c++ map<string,int> 用下标访问的时候报错的问题?
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;

map<string,int> m;
vector<int> v;
int index=1;

int main(){

    int n,k;
    cin>>n>>k;
    for(int i=0;i<k;i++){
        int course,m;
        cin>>course>>m;
        for(int j=0;j<m;j++){
            string s;
            cin>>s;
            if(m[s]!=0){
                v[m[s]].push_back(course);
            }else {
                m[s]=index;
                index++;
                v[m[s]].push_back(course);
            }
        }
    }
} 

报错
22 10 D:\Dev C++\workspace\A1039.cpp [Error] no match for 'operator[]' in 'm[s]'

每一次用下标访问m[s]的时候都会报错

c++

3个回答

变量重名了,内部定义了一个int类型的m,会屏蔽外面的map类型的m。
可以把名字改成不一样的。

你和java搞混淆了,在c++里,map不支持[],可以用 m.find(s)

1.map< string,int> m; 与 int course,m; m 重名了,后面操作的是int类型的 m;
2.v[m[s]].push_back(course); 写错了,你可以v.push_back(m[s]); 或者 v.push_back(course); 因为 v[m[s]]已经是元素了,是int类型
3.我稍稍改了一下你代码;可以运行。

#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;

map<string,int> mMap;
vector<int> v;
int index=1;

int main(){

    int n,k;
    cin>>n>>k;
    for(int i=0;i<k;i++){
        int course,m;
        cin>>course>>m;
        for(int j=0;j<m;j++){
            string s;
            cin>>s;
            if(mMap[s]!= 0){
                v.push_back(mMap[s]);
                //v[mMap[s]].push_back(course);
            }else {
                mMap[s]=index;
                index++;
                //v[mMap[s]].push_back(course);
                v.push_back(mMap[s]);
            }
        }
    }
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c++ map<string,int> 用下标访问的时候报错的问题?
``` #include<iostream> #include<string> #include<vector> #include<map> #include<algorithm> using namespace std; map<string,int> m; vector<int> v; int index=1; int main(){ int n,k; cin>>n>>k; for(int i=0;i<k;i++){ int course,m; cin>>course>>m; for(int j=0;j<m;j++){ string s; cin>>s; if(m[s]!=0){ v[m[s]].push_back(course); }else { m[s]=index; index++; v[m[s]].push_back(course); } } } } ``` 报错 22 10 D:\Dev C++\workspace\A1039.cpp [Error] no match for 'operator[]' in 'm[s]' 每一次用下标访问m[s]的时候都会报错
关于for()循环和map(multimap)的问题
``` int main() { multimap<string, string> m{ {"yiyi","nihao"}, {"gcl","hello"}, {"gcl","world"} }; map<string, multiset<string>> order_m;//1.why order_m can't be multimap for (const auto author : m) order_m[author.first].insert(author.second); for (const auto author : order_m) { cout << author.first << " : "; for (const auto work : author.second)//2.why i can't use order_m.second cout << work << " "<<endl; } system("pause"); return 0; } ``` 这段代码定义一个作者及其作品的multimap,并使它按字典序打印作者列表和他们的作品。功能的确实现了,但是有两个问题(在代码中有标注)。 1.为什么使用multimap定义order_m 的时候 下一行for循环遍历的时候不能使用下标运算符,显示无法匹配相应元素。 2.为什么在for循环遍历中可以使用author.second,却不能使用order_m.second,编译器会提示order_m并没有元素second,可是author不是只是order_m的别名而已吗?
java poi导出excel文档 后台报下标越界 但文档正常导出且损坏
public static SXSSFWorkbook createCSVUtil2(int startRow, String sheetName, SXSSFWorkbook wb, Map<String, List<CellModel>> cellListMap, Integer cellRowNum, List<LinkedHashMap> exportData, int[] columnWidth, int totalcolumn, GgreportingtemplateDto ggreportingtemplateDto, int countRow) throws Exception { // 设置表格名称 SXSSFSheet sheet = (SXSSFSheet) wb.createSheet(sheetName); sheet.trackAllColumnsForAutoSizing(); // 设置表格标题 一般都是第一行第一个格子 // 标题样式 if (ggreportingtemplateDto.getTitle() != null) { XSSFCellStyle cellStyleTitle = (XSSFCellStyle) wb.createCellStyle(); cellStyleTitle.setWrapText(true); SXSSFRow rowTitle = (SXSSFRow) sheet.createRow(0); XSSFFont fontTitle = (XSSFFont) wb.createFont(); fontTitle.setFontHeightInPoints((short) 16); cellStyleTitle.setFont(fontTitle); // 合并标题单元格 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, totalcolumn - 1)); for (int i = 0; i < totalcolumn; i++) { if (i == 0) { SXSSFCell cell = (SXSSFCell) rowTitle.createCell(0); cell.setCellValue(ggreportingtemplateDto.getTitle()); cell.setCellStyle(cellStyleTitle); } else { SXSSFCell cell = (SXSSFCell) rowTitle.createCell(i); cell.setCellStyle(cellStyleTitle); } } } if (ggreportingtemplateDto.getCondition() != null) { // 设置筛选条件格子 一般是第二行第一列 // 条件样式 XSSFCellStyle cellStyleCondition = (XSSFCellStyle) wb.createCellStyle(); cellStyleCondition.setWrapText(true); SXSSFRow rowCondition = (SXSSFRow) sheet.createRow(1); XSSFFont fontCondition = (XSSFFont) wb.createFont(); fontCondition.setFontHeightInPoints((short) 16); cellStyleCondition.setFont(fontCondition); // 合并条件单元格 sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 4)); for (int i = 0; i < 4; i++) { if (i == 0) { SXSSFCell cell = (SXSSFCell) rowCondition.createCell(0); cell.setCellValue(ggreportingtemplateDto.getCondition()); cell.setCellStyle(cellStyleCondition); } else { SXSSFCell cell = (SXSSFCell) rowCondition.createCell(i); cell.setCellStyle(cellStyleCondition); } } } // 设置表格通用样式 XSSFCellStyle cellStyle = (XSSFCellStyle) wb.createCellStyle(); // 设置边框 // 设置单元格内容水平对齐 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 设置单元格内容垂直对齐 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 设置自动换行 cellStyle.setWrapText(true); // 设置双边框 XSSFCellStyle cellStyleDouble = (XSSFCellStyle) wb.createCellStyle(); // 设置边框 // 设置单元格内容水平对齐 cellStyleDouble.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 设置单元格内容垂直对齐 cellStyleDouble.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 设置自动换行 cellStyleDouble.setWrapText(true); // 合并单元格 for (int t = 0; t < cellRowNum; t++) { SXSSFRow row = (SXSSFRow) sheet.createRow(t + startRow); List<CellModel> cellNameList = cellListMap.get(String.valueOf(t)); for (CellModel cellModel : cellNameList) { // 如果被合并的元素只占用了一个单元格则不进行合并 if (cellModel.getStartColumn() == cellModel.getEndColumn() && cellModel.getEndRow() == cellModel.getStartRow()) { continue; } sheet.addMergedRegion(new CellRangeAddress(cellModel.getStartRow(), cellModel.getEndRow(), cellModel.getStartColumn(), cellModel.getEndColumn())); } // create的cell Set<Integer> create = new HashSet<Integer>(); for (int i = 0; i < cellNameList.size(); i++) { CellModel cellModel = cellNameList.get(i); // 遍历插入表头 SXSSFCell cell = (SXSSFCell) row.createCell(cellModel.getStartColumn()); // 设置字体 XSSFFont font = (XSSFFont) wb.createFont(); font.setFontName("Times New Roman"); font.setFontHeightInPoints((short) 8); // 设置行高 if (i == 1) { row.setHeight((short) 500); } cellStyle.setFont(font); cell.setCellValue(cellModel.getCellName()); cell.setCellStyle(cellStyle); create.add(cellModel.getStartColumn()); } // 把所有没有create的cell都create for (int i = 0; i < totalcolumn; i++) { if (!(create.contains(i))) { // 设置字体 XSSFFont font = (XSSFFont) wb.createFont(); font.setFontName("Times New Roman"); font.setFontHeightInPoints((short) 8); cellStyle.setFont(font); SXSSFCell cell = (SXSSFCell) row.createCell(i); cell.setCellStyle(cellStyle); } } } for (LinkedHashMap hashMap : exportData) { SXSSFRow rowValue = (SXSSFRow) sheet.createRow(cellRowNum + startRow); Iterator<Map.Entry> iteratorRow = hashMap.entrySet().iterator(); while (iteratorRow.hasNext()) { Map.Entry entryRow = iteratorRow.next(); Integer key = Integer.valueOf(entryRow.getKey().toString()); String value = ""; if (entryRow.getValue() != null) { value = entryRow.getValue().toString(); } else { value = ""; } SXSSFCell cellValue = (SXSSFCell) rowValue.createCell(key - 1); // 设置字体 XSSFFont font = (XSSFFont) wb.createFont(); font.setFontName("Times New Roman"); font.setFontHeightInPoints((short) 8); cellValue.setCellValue(value); cellStyle.setFont(font); cellValue.setCellStyle(cellStyle); } cellRowNum++; } // 设置备注栏 List<String> reMarkList = ggreportingtemplateDto.getRemake(); if (reMarkList != null) { for (int i = 0; i < reMarkList.size() + 1; i++) { int rowNum = i + startRow + cellRowNum + 1; XSSFCellStyle cellStyleRemake = (XSSFCellStyle) wb.createCellStyle(); SXSSFRow rowRemake = (SXSSFRow) sheet.createRow(rowNum); XSSFFont fontRemake = (XSSFFont) wb.createFont(); fontRemake.setFontHeightInPoints((short) 8); cellStyleRemake.setFont(fontRemake); String cellValue = "Notes:"; // 合并条件单元格 if (i != 0) { sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, 0, 4)); cellValue = reMarkList.get(i - 1); SXSSFCell cell = (SXSSFCell) rowRemake.createCell(0); cell.setCellValue(cellValue); cell.setCellStyle(cellStyleRemake); } else { SXSSFCell cell = (SXSSFCell) rowRemake.createCell(0); cell.setCellValue(cellValue); cell.setCellStyle(cellStyleRemake); } } } // 设置列宽 if (columnWidth != null) { for (int i = 0; i < columnWidth.length; i++) { sheet.setColumnWidth(i, columnWidth[i]); } } return wb; } 以上是我生成sheet表的内容 //exceptional Rpt public SXSSFWorkbook exceptionalRpt (GgreportingtemplateDto ggreportingtemplateDto, String startInputDate,String endInputDate) throws Exception { // 设置最大数据行数 SXSSFWorkbook wb = new SXSSFWorkbook(5050);//这里之前看到是说能设置这个表格最多能含有多少数据 Map<String, List<CellModel>> map = new HashMap<String, List<CellModel>>(); // 设置数据 // 第一级表头 List<CellModel> firstRow = new ArrayList<CellModel>(); CellModel cellModel1 = new CellModel(); // 总占用1行 Integer cellRow = 1; cellModel1.setCellName("Member English Name"); cellModel1.setStartRow(0); cellModel1.setEndRow(0); cellModel1.setStartColumn(0); cellModel1.setEndColumn(0); CellModel cellModel2 = new CellModel(); cellModel2.setCellName("Member Chinese Name"); cellModel2.setStartRow(0); cellModel2.setEndRow(0); cellModel2.setStartColumn(1); cellModel2.setEndColumn(1); CellModel cellModel3 = new CellModel(); cellModel3.setCellName("Staff No."); cellModel3.setStartRow(0); cellModel3.setEndRow(0); cellModel3.setStartColumn(2); cellModel3.setEndColumn(2); CellModel cellModel4 = new CellModel(); cellModel4.setCellName("HKID/Passport No."); cellModel4.setStartRow(0); cellModel4.setEndRow(0); cellModel4.setStartColumn(3); cellModel4.setEndColumn(3); CellModel cellModel5 = new CellModel(); cellModel5.setCellName("Sex"); cellModel5.setStartRow(0); cellModel5.setEndRow(0); cellModel5.setStartColumn(4); cellModel5.setEndColumn(4); CellModel cellModel6 = new CellModel(); cellModel6.setCellName("Plan Code"); cellModel6.setStartRow(0); cellModel6.setEndRow(0); cellModel6.setStartColumn(5); cellModel6.setEndColumn(5); CellModel cellModel7 = new CellModel(); cellModel7.setCellName("Plan Description"); cellModel7.setStartRow(0); cellModel7.setEndRow(0); cellModel7.setStartColumn(6); cellModel7.setEndColumn(6); CellModel cellModel8 = new CellModel(); cellModel8.setCellName("Effective Date"); cellModel8.setStartRow(0); cellModel8.setEndRow(0); cellModel8.setStartColumn(7); cellModel8.setEndColumn(7); CellModel cellModel9 = new CellModel(); cellModel9.setCellName("Status"); cellModel9.setStartRow(0); cellModel9.setEndRow(0); cellModel9.setStartColumn(8); cellModel9.setEndColumn(8); firstRow.add(cellModel1); firstRow.add(cellModel2); firstRow.add(cellModel3); firstRow.add(cellModel4); firstRow.add(cellModel5); firstRow.add(cellModel6); firstRow.add(cellModel7); firstRow.add(cellModel8); firstRow.add(cellModel9); map.put("0", firstRow); // 业务数据 List<LinkedHashMap> exportData = new ArrayList<LinkedHashMap>(); GuPolicyCopyItemMedgMembDto guPolicyCopyItemMedgMembDto = new GuPolicyCopyItemMedgMembDto(); List<GuPolicyCopyItemMedgMembDto> list = ServiceManager.prpall.getGuPolicyCopyItemMedgMembService().findALL(guPolicyCopyItemMedgMembDto, null);//这里查询出来是295条 //增加数据 用这端代码增加5000条数据 /*for (int i = 0; i < 5000; i++) { list.add((GuPolicyCopyItemMedgMembDto)list.get(0)); }*/ int countRow = 0; for (int i = 0; i < list.size(); i++) { GuPolicyCopyItemMedgMembDto data = (GuPolicyCopyItemMedgMembDto) list.get(i); LinkedHashMap<String,String> row = new LinkedHashMap<String,String>(); String struts = ""; String ename = ""; String cname = ""; String idno = ""; String staffno = ""; String sex = ""; String rationType = ""; String rationName = ""; String entryDate = ""; String chineseName = ""; String hKIDandPassportNo = ""; if(data.getFlag()==null||data.getFlag().equals("I")) { struts = "Add"; }else if(data.getFlag().equals("U")){ struts = "Amendment"; }else if(data.getFlag().equals("D")){ struts = "Deletion"; }else if(data.getFlag().equals("B")){ struts = "Cancellation"; } if(data.getClientEName() != null&&!(data.getClientEName().equals(""))) { ename = data.getClientEName(); } if(data.getClientCName() != null&&!(data.getClientCName().equals(""))) { cname = data.getClientCName(); } if(data.getIdNo() != null&&!(data.getIdNo().equals(""))) { idno = data.getIdNo(); } if(data.getStaffNo() != null&&!(data.getStaffNo().equals(""))) { staffno = data.getStaffNo(); } if(data.getSex() != null&&!(data.getSex().equals(""))) { sex = data.getSex(); } if(data.getRationType() != null&&!(data.getRationType().equals(""))) { rationType = data.getRationType(); } if(data.getRationName() != null&&!(data.getRationName().equals(""))) { rationName = data.getRationName(); } if(data.getEntryDate() != null) { entryDate = sim.format(data.getEntryDate()); } /*row.put("1", ""+ename+""); row.put("2", ""+cname+""); row.put("3", ""+staffno+""); row.put("4", ""+idno+""); row.put("5", ""+sex+""); row.put("6", ""+rationType+""); row.put("7", ""+rationName+""); row.put("8", ""+entryDate+""); row.put("9", ""+struts+"");*/ row.put("1", "1"); row.put("2", "2"); row.put("3", "3"); row.put("4", "4"); row.put("5", "5"); row.put("6", "6"); row.put("7", "7"); row.put("8", "8"); row.put("9", "9"); exportData.add(row); countRow++; } // 用于写入文件 // 列宽数组 int[] columnWidth = { 10000, 7500, 5000, 7500, 5000, 7500, 10000, 5000, 5000 }; // 报表标题 ggreportingtemplateDto.setTitle(null); List<String> remakeList = null; // 报表备注 ggreportingtemplateDto.setRemake(remakeList); ggreportingtemplateDto.setCondition(null); //数据分页 if(exportData.size()>5000) { double size = exportData.size(); double divisor = size/5000; int forNumber = (new Double(Math.ceil(divisor))).intValue(); for (int i = 0; i < forNumber; i++) { if((i+1)==forNumber) { List<LinkedHashMap> exportDataTemp = exportData.subList(0+(i*5000), exportData.size()-1); wb = this.createCSVUtil2(0, "Exceptional Rpt"+(i+1), wb, map, cellRow, exportDataTemp, columnWidth, columnWidth.length, ggreportingtemplateDto, 0); }else { List<LinkedHashMap> exportDataTemp = exportData.subList(0+(i*5000), 5000+(i*5000 )); wb = this.createCSVUtil2(0, "Exceptional Rpt"+(i+1), wb, map, cellRow, exportDataTemp, columnWidth, columnWidth.length, ggreportingtemplateDto, 0); } } }else { wb = this.createCSVUtil2(0, "Exceptional Rpt", wb, map, cellRow, exportData, columnWidth, columnWidth.length, ggreportingtemplateDto, 0); } /*wb = this.createCSVUtil2(0, "Exceptional Rpt", wb, map, cellRow, exportData, columnWidth, columnWidth.length, ggreportingtemplateDto, 0);*/ return wb; } 一开始SXSSFWorkbook wb = new SXSSFWorkbook(5050)这里的值给的5000 ,然后当数据量大于5000时直接报错,文件不能正常导出,然后我把5000改成7000,会报错但是文件能导出,是损坏文件,一条数据都没有,后来修改成分页导出,自己测试的时候任然报了数组下标越界,且越界的下标为负值,文件能正常导出,但导出的文件显示已损坏,看不到数据。报错代码图片以上传,求大神解答,解答有效我微信转账请大神喝奶茶 java.lang.ArrayIndexOutOfBoundsException: -20527 at java.util.ArrayList.elementData(ArrayList.java:418) at java.util.ArrayList.get(ArrayList.java:431) at org.apache.poi.xssf.model.StylesTable.getFontAt(StylesTable.java:386) at org.apache.poi.xssf.usermodel.XSSFWorkbook.getFontAt(XSSFWorkbook.java:954) at org.apache.poi.xssf.streaming.SXSSFWorkbook.getFontAt(SXSSFWorkbook.java:857) at org.apache.poi.ss.util.SheetUtil.getCellWidth(SheetUtil.java:148) at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.updateColumnWidth(AutoSizeColumnTracker.java:367) at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.updateColumnWidths(AutoSizeColumnTracker.java:333) at org.apache.poi.xssf.streaming.SXSSFSheet.flushOneRow(SXSSFSheet.java:1892) at org.apache.poi.xssf.streaming.SXSSFSheet.flushRows(SXSSFSheet.java:1871) at org.apache.poi.xssf.streaming.SXSSFSheet.flushRows(SXSSFSheet.java:1882) at org.apache.poi.xssf.streaming.SXSSFWorkbook.write(SXSSFWorkbook.java:931) at com.sinosoft.application.platform.web.action.GgReportingTemplateAction.download(GgReportingTemplateAction.java:267) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sinosoft.application.common.BaseProcessAction.execute(BaseProcessAction.java:213) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:216) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:117) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:198) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:176) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107) at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.sinosoft.application.common.CAS_LANGUATE.doFilter(CAS_LANGUATE.java:35) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.sinosoft.sysframework.web.control.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.sinosoft.application.common.CompatibleFilter.doFilter(CompatibleFilter.java:29) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.sinosoft.application.common.ValidateSalt.doFilter(ValidateSalt.java:56) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:160) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at com.sinosoft.application.common.LoadSalt.doFilter(LoadSalt.java:41) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:808) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) 此问题已解决,导致报错的原因是sheet.trackAllColumnsForAutoSizing();poi自动设置列宽的代码,注释这行之后问题解决。
java JDBC 批量插入的时候报数组下标越界,求大神
代码: private static Boolean Function_User(Map<String, List> resultMap, String sql,String tableType) { // TODO Auto-generated method stub Connection conn=null; PreparedStatement insert_st=null; int count = 0; final int batchSize = 500; System.out.println("开始:"+Calendar.getInstance().getTime()); try { conn=DriverManager.getConnection(db_url,db_name,db_pwd); conn.setAutoCommit(false); insert_st = conn.prepareStatement(sql); for (int i = 0; i < resultMap.get(tableType).size(); i++) { Object obj = resultMap.get(tableType).get(i); OrderUserSnap user = (OrderUserSnap) obj; insert_st.setString(1, ZH_S(user.getId())); insert_st.addBatch(); if(++count % batchSize == 0) { insert_st.executeBatch(); insert_st.clearBatch(); } System.out.println("tt:"+count); } insert_st.executeBatch(); insert_st.clearBatch(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { insert_st.close(); conn.close(); System.out.println("结束:"+Calendar.getInstance().getTime()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return true; }
运行hadoop 报错Error: java.lang.ArrayIndexOutOfBoundsException: 1,感觉程序没问题
``` public class HH { public static class HHMapper extends Mapper<LongWritable,Text,Text,IntWritable>{ private Text map_key=new Text(); private IntWritable map_value=new IntWritable(); protected void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException{ //System.out.println(value.toString()); String[] H=value.toString().split("\t"); String[] h=H[1].split(","); int[][] R=new int[h.length][h.length]; for(int i=0;i<h.length;i++) for(int j=0;j<h.length;j++){ R[i][j]=Integer.parseInt(h[i])*Integer.parseInt(h[j]); map_key.set(H[0]+","+j); // map_key.set(H[0]); map_value.set((R[i][j])); // map_value.set(1); context.write(map_key, map_value); } } } ``` 感觉程序没问题 就是报下标越界错误,文件格式也没问题啊
android客户端从服务器获取图片报数组下标越界
速求:各位大神好,帮忙给看一下,刚才运行安卓客户端从服务器获取图片报“数组下标越界”,程序挂掉了,啥原因呢:public class MainActivity extends Activity implements OnScrollListener { private static final String TAG = null; private int count=0; public SimpleAdapter simpleAdapter; ListView listview; int lastItemIndex; private int times = 1;// 表示第几次刷新,从而从数据库中调出不同的数据 public static List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); View moreView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview = (ListView) findViewById(R.id.listview); // Button button = (Button) findViewById(R.id.button_main); moreView = getLayoutInflater().inflate(R.layout.load, null); // 点击listview的某一项而进入 listview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(MainActivity.this, DetailActivity.class); intent.putExtra("id",position); startActivity(intent); } }); // 向上滑动获取更新,这个更适合一般的常见的操作方式 count = list.size(); String[] items = { "img", "title", "list_item" }; int[] ids = { R.id.list_item, R.id.list_name, R.id.list_detail }; simpleAdapter = new SimpleAdapter(this, getData(times), R.layout.activity_list, items, ids); listview.addFooterView(moreView); listview.setAdapter(simpleAdapter); // 这段代码是现实自定义位图所必需的,较为简单,直接放上即可 simpleAdapter.setViewBinder(new ViewBinder() { public boolean setViewValue(View view, Object data, String textRepresentation) { if (view instanceof ImageView && data instanceof Drawable) { ImageView iv = (ImageView) view; iv.setImageDrawable((Drawable) data); return true; } else return false; } }); // 滑动获取更新,这个更适合一般的常见的操作方法,this是因为集成了相应的接口可以直接这样写,然后必须有其全部实现 listview.setOnScrollListener(this); } // 从服务器获取数据并将要现实的数据封装成List List<HashMap<String, Object>> getData(int num) { times=times+1; List<NameValuePair> lists = new ArrayList<NameValuePair>(); // 使得请求格式较为统一 lists.add(new BasicNameValuePair("id", num + "")); // 网络请求 Thread httpThread = new Thread(new HttpUtil(HttpUtil.httpUrl + "show", lists)); httpThread.start(); // 直到新线程出栈,主线程运行 try { httpThread.join(); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } String result = HttpUtil.result; String[] results = result.split(";"); for (int i = 0; i < results.length; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); String[] item = results[i].split(","); String name = item[2]; String price = item[1]; String pic = item[0]; String tag = "item"; Log.v(tag, item[0]); FormatTools format = new FormatTools(); map.put("img", format.Bytes2Drawable(Base64.decode(pic, Base64.DEFAULT))); map.put("title", name); map.put("list_item", price); list.add(map); } count=list.size(); return list; } //滑动到底部 @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (lastItemIndex == simpleAdapter.getCount()-1 && scrollState == this.SCROLL_STATE_IDLE&&lastItemIndex<25) { Log.i(TAG, "拉到最底部"); moreView.setVisibility(view.VISIBLE); mHandler.sendEmptyMessage(0); } if(lastItemIndex>=25){ Toast.makeText(getApplicationContext(), "没有更多了", Toast.LENGTH_SHORT).show(); listview.removeFooterView(moreView); } } //滑动监视器 @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { lastItemIndex = firstVisibleItem + visibleItemCount - 1 -1; } // Handler用于处理UI交互 private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: getData(times); // 向服务器请求数据 //直接用这个即可以更新里adapter和listview simpleAdapter.notifyDataSetChanged(); moreView.setVisibility(View.GONE); break; case 1: break; default: break; } }; }; }
HttpClient的循环发送请求,第一次成功,为什么第二次就Read timed out?
public String audits() throws Exception{ init(); /*String ids = "[" + condition.getIds() + "]"; String param="{" + "logId" + ":" + ids + "}";*/ String url = "http://192.168.1.220:8080/servlet/AuditServlet";//测试 PostMethod method = new PostMethod(url); HttpClient httpClient = new HttpClient(); //HttpClient httpClient = new HttpClient(new HttpClientParams(),new SimpleHttpConnectionManager(true)); httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(600000); httpClient.getHttpConnectionManager().getParams().setSoTimeout(600000); try { int maxList = 5000; int lastIndex = maxList; Integer allTotal = 0; Integer allFaild = 0; Integer allSuccess = 0; List<String> lists = java.util.Arrays.asList(condition.getIds().split(",")); int count = lists.size(); List<List<String>> idList = new ArrayList<>(); for (int index = 0; index < count; ) { if (lastIndex >= count) { lastIndex = count; idList.add(lists.subList(index, lastIndex)); break; } else { idList.add(lists.subList(index, lastIndex)); index = lastIndex; // 设置下一批下标 lastIndex = index + (maxList - 1); } } if (CollectionUtils.isNotEmpty(idList)) { for (List<String> subList : idList) { String params="{" + "logId" + ":" + subList + "}"; System.out.println("请求接口参数:" + params); //循环发送请求 RequestEntity entity = new StringRequestEntity(params,"application/json","GBK"); System.out.println(1); method.setRequestEntity(entity); System.out.println(2); httpClient.executeMethod(method); System.out.println("请求接口路径url:" + method.getURI().toString()); System.out.println(3); InputStream in = method.getResponseBodyAsStream(); //下面将stream转换为String StringBuffer sb = new StringBuffer(); InputStreamReader isr = new InputStreamReader(in, "GBK"); char[] b = new char[4096]; for(int n; (n = isr.read(b)) != -1;) { sb.append(new String(b, 0, n)); } String returnStr = sb.toString(); System.out.println("返回接口参数:" + returnStr); JSONObject jasonObject = JSONObject.fromObject(returnStr); Map map = (Map)jasonObject; Object total = map.get("total"); Object faild = map.get("faild"); Object success = map.get("success"); allTotal = allTotal + Integer.valueOf(total.toString()); allFaild = allFaild + Integer.valueOf(faild.toString()); allSuccess = allSuccess + Integer.valueOf(success.toString()); } } String totals = allTotal.toString(); String failds = allFaild.toString(); String successs = allSuccess.toString(); condition.setTotal(totals); condition.setFaild(failds); condition.setSuccess(successs); return "index"; } catch (Exception e) { e.printStackTrace(); throw e; } finally { method.releaseConnection(); } } 第一次返回显示是成功的![图片说明](https://img-ask.csdn.net/upload/201912/25/1577256421_630516.png) 第二次就![图片说明](https://img-ask.csdn.net/upload/201912/25/1577256497_930744.png)
Android获取GridView里的item内容时获取的内容不是点击的。
![图片说明](https://img-ask.csdn.net/upload/201506/13/1434177121_635930.jpg) 如图,快餐,烧烤这些白色btn是gridview里的item。这个页面生成了多个gridview,我想在点击其中一个btn时候获取btn的text作为参数传递。使用 ``` gridView=new MyGridView(FenleiActivity.this); gridView.setVerticalSpacing(10); gridView.setHorizontalSpacing(15); gridView.setNumColumns(3); hashlist=new ArrayList<HashMap<String,Object>>(); for(int j=0 ;j<Two_classify_list.size();j++){ HashMap<String, Object> map= new HashMap<String, Object>(); map.put("fenlei_btnlist_btn_text", Two_classify_list.get(j)); hashlist.add(map); } sAdapter=new SimpleAdapter(this,hashlist, R.layout.fenlei_btnlist_item, new String[]{"fenlei_btnlist_btn_text"},new int[]{R.id.fenlei_btnlist_btn_text}); gridView.setAdapter(sAdapter); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { HashMap<String,String> map=(HashMap<String,String>)gridView.getItemAtPosition(arg2); String btnText=map.get("fenlei_btnlist_btn_text"); System.out.println("------------------------!!!!!!-------------------"+btnText); Bundle bundle=new Bundle(); bundle.putString("oneClassify", text); bundle.putString("twoClassify", btnText); Intent intent=new Intent(FenleiActivity.this,GoodsShowActivity.class); intent.putExtras(bundle); startActivity(intent); } }); ``` 因为不同的gridview中btn的数量是不同的,不知道为什么有时候点的比较靠后的btn时候就提示数组下标越界,还有就是不管我点哪个gridview,只要点的是第几个btn提示的内容是相同的,这意思就是说他不会动态获取点的那个gridview呗,为什么呢
为何音乐播放器代码在esclipse中没报错,点击按钮却没有实现功能,上图上代码,求前辈们指教
![图片说明](https://img-ask.csdn.net/upload/201604/24/1461461690_603209.png)![![图片说明](https://img-ask.csdn.net/upload/201604/24/1461461584_552949.png)图片说明](https://img-ask.csdn.net/upload/201604/24/1461461571_443206.png) Mainactivity package com.example.music; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.os.Bundle; import android.provider.MediaStore.Audio.Media; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.Button; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.AdapterView.OnItemClickListener; public class MainActivity extends Activity implements OnClickListener { List<Object> musiclists = new ArrayList<Object>(); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Button play_pause, stop, onplay, downplay, close, exit; ActivityReceiver activityReceiver; public static final String CTL_ACTION = "org.crazyit.action.CTL_ACTION"; public static final String UPDATE_ACTION = "org.crazyit.action.UPDATE_ACTION"; Intent intentservice; // 定义音乐的播放状态 ,0X11 代表停止 ,0x12代表播放,0x13代表暂停 int status = 0x11; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UIinit(); logic(); musicList(); activityReceiver = new ActivityReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(UPDATE_ACTION); registerReceiver(activityReceiver, filter); intentservice = new Intent(this, MusicService.class); startService(intentservice); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void UIinit() { play_pause = (Button) this.findViewById(R.id.play_pause); stop = (Button) this.findViewById(R.id.stop); onplay = (Button) this.findViewById(R.id.onplay); close = (Button) this.findViewById(R.id.close); exit = (Button) this.findViewById(R.id.exit); downplay = (Button) this.findViewById(R.id.downplay); } public void logic() { play_pause.setOnClickListener(this); stop.setOnClickListener(this); onplay.setOnClickListener(this); downplay.setOnClickListener(this); close.setOnClickListener(this); exit.setOnClickListener(this); } @Override public void onClick(View source) { Intent intent = new Intent(CTL_ACTION); switch (source.getId()) { case R.id.play_pause: { intent.putExtra("control", 1); break; } case R.id.stop: { intent.putExtra("control", 2); break; } case R.id.onplay: { intent.putExtra("control", 3); break; } case R.id.downplay: { intent.putExtra("control", 4); break; } case R.id.close: { this.finish(); break; } case R.id.exit: { stopService(intentservice); this.finish(); break; } } sendBroadcast(intent); } public class ActivityReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 获取Intent中的update消息,update代表播放状态 int update = intent.getIntExtra("update", -1); switch (update) { case 0x11: { play_pause.setText("播放"); status = 0x11; break; } // 控制系统进入播放状态 case 0x12: { // 播放状态下设置使用按钮 play_pause.setText("暂停"); // 设置当前状态 status = 0x12; break; } // 控制系统进入暂停状态 case 0x13: { play_pause.setText("播放"); status = 0x13; break; } } } } /* 播放列表 */ public void musicList() { // 取得指定位置的文件设置显示到播放列表 String[] music = new String[] { Media._ID, Media.DISPLAY_NAME, Media.TITLE, Media.DURATION, Media.ARTIST, Media.DATA }; Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, music, null, null, null); while (cursor.moveToNext()) { Music temp = new Music(); temp.setFilename(cursor.getString(1)); temp.setTitle(cursor.getString(2)); temp.setDuration(cursor.getInt(3)); temp.setArtist(cursor.getString(4)); temp.setData(cursor.getString(5)); musiclists.add(temp); Map<String, Object> map = new HashMap<String, Object>(); map.put("name", cursor.getString(1)); map.put("artist", cursor.getString(4)); list.add(map); } ListView listview = (ListView) findViewById(R.id.musics); SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.musicsshow, new String[] { "name", "artist" }, new int[] { R.id.name, R.id.artist }); listview.setAdapter(adapter); listview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int current, long id) { Intent intent=new Intent(CTL_ACTION); intent.putExtra("control", 5); intent.putExtra("current", current); sendBroadcast(intent); } }); } } TitanMusic.java package com.example.titan; public class TitanMusic { private String filename; private String Title; private int duration; private String artist; private String location; public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public int getDuration() { return duration; } public void setDuration(int duration) { this.duration = duration; } public String getArtist() { return artist; } public void setArtist(String artist) { this.artist = artist; } public String getData() { return location; } public void setData(String location) { this.location = location; } // {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME, // MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DURATION, // MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.DATA } TitanMusicService.java package com.example.titan; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.IBinder; import android.provider.MediaStore.Audio.Media; import android.util.Log; public class TitanMusicService extends Service { List<Object> musiclists = new ArrayList<Object>(); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); MyReceiver serviceReceiver; MediaPlayer mPlayer; int status = 0x11; //歌曲下标 int current = 0; int count = 0; int flog = 0; //String filename; @Override public IBinder onBind(Intent arg0) { return null; } @Override public void onDestroy() { flog=0; mPlayer.stop(); mPlayer.release(); super.onDestroy(); } @Override public void onCreate() { flog=1; musicList(); count = list.size(); Log.e("Service", "onStart"); serviceReceiver = new MyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(MainActivity.CTL_ACTION); registerReceiver(serviceReceiver, filter); mPlayer = new MediaPlayer(); mPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { current++; if (current >= count) { current = 0; } String filename = ((TitanMusic) musiclists.get(current)).getData(); playMusic(filename); } }); super.onCreate(); } @Override public void onStart(Intent intent, int startId) { if(flog==2){ Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION); sendIntent.putExtra("update", status); //sendIntent.putExtra("current", current); sendBroadcast(sendIntent); } flog=2; } private void playMusic(String path) { try { /* 重置MediaPlayer */ mPlayer.reset(); /* 设置要播放的文件的路径 */ mPlayer.setDataSource(path); /* 准备播放 */ mPlayer.prepare(); /* 开始播放 */ mPlayer.start(); mPlayer.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer arg0) { //播放完成一首之后进行下一首 current--; if (current < 0) { current = count; } playMusic( ((TitanMusic) musiclists.get(current)).getData()); status = 0x12; } }); }catch (IOException e){} } /* 播放列表 */ public void musicList() { // 取得指定位置的文件设置显示到播放列表 String[] music = new String[] { Media._ID, Media.DISPLAY_NAME, Media.TITLE, Media.DURATION, Media.ARTIST, Media.DATA }; Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, music, null, null, null); while (cursor.moveToNext()) { TitanMusic temp = new TitanMusic(); temp.setFilename(cursor.getString(1)); temp.setTitle(cursor.getString(2)); temp.setDuration(cursor.getInt(3)); temp.setArtist(cursor.getString(4)); temp.setData(cursor.getString(5)); musiclists.add(temp); Map<String, Object> map = new HashMap<String, Object>(); map.put("name", cursor.getString(1)); map.put("artist", cursor.getString(4)); list.add(map); } } public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int control = intent.getIntExtra("control", -1); switch (control) { case 1: { // 如果原来处于停止的状态 if (status == 0x11) { playMusic( ((TitanMusic) musiclists.get(current)).getData()); status = 0x12; } // 原来处于播放状态 else if (status == 0x12) { mPlayer.pause(); status = 0x13; } // 原来处于暂停状态 else if (status == 0x13) { mPlayer.start(); status = 0x12; } break; } case 2: { // 如果原来正在播放或暂停 if (status == 0x12 || status == 0x13) { mPlayer.stop(); status = 0x11; } break; } case 3: { current--; if (current < 0) { current = count; } playMusic( ((TitanMusic) musiclists.get(current)).getData()); status = 0x12; break; } case 4: { current++; if (current > count) { current = 0; } playMusic( ((TitanMusic) musiclists.get(current)).getData()); status = 0x12; break; } case 5: { current = intent.getIntExtra("current", -1);; playMusic( ((TitanMusic) musiclists.get(current)).getData()); status = 0x12; break; } } Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION); sendIntent.putExtra("update", status); // sendIntent.putExtra("current", current); sendBroadcast(sendIntent); } } } 布局代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/onplay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上一首" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:orientation="horizontal" > <Button android:id="@+id/play_pause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="播放" /> <Button android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止" /> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/downplay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="下一首" /> </RelativeLayout> </LinearLayout> <!-- <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="音乐列表" android:textColor="#ff0000ff" android:textSize="30sp" /> --> <ListView android:id="@+id/musics" android:layout_width="match_parent" android:layout_height="257dp" android:layout_weight="1.53" > </ListView> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="最小化" /> <Button android:id="@+id/exit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="退出" /> </RelativeLayout> </LinearLayout> </LinearLayout> 歌曲布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20dp" /> <TextView android:id="@+id/artist" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20dp" /> </LinearLayout> ``` ```
关于骑士飞行棋的问题
我做到这一步了,随机产生A的数,为什么A不移动 ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 飞行棋 { class Program { static int[] Map = new int[100];//存地图 static int[] playerPos = { 4,0 };//playerPos[0]存A的下标,playerPos[1]存B的下标 static void Main(string[] args) { //下面的数组存储我们游戏地图各种关卡 //数组的下标为0的元素对应地图上的第1格 下标为1的元素对应地图上的第2格,下标为N的对应第N+1格 //在数组中用 1 表示幸运轮盘◎ // 2 地雷☆ // 3 暂停▲ // 4 时空隧道卍 // 0 表示普通 int[] Map = new int[100]; Random r = new Random();//r是产生一个随机数的 int step = 0;//存放临机产生一个随机数 string[] names = new string[2];//names[0]存玩家A的姓名,names[1]存玩家B的姓名 ShowUI(); Console.WriteLine("请输入玩家A姓名:"); names[0] = Console.ReadLine(); while (names[0] == "")//判断姓名是否为空 { Console.WriteLine("玩家A的姓名不能为空,请重新输入!"); names[0] = Console.ReadLine(); } Console.WriteLine("请输入玩家B的姓名:"); names[1] = Console.ReadLine(); while (names[1] == "" || names[1] == names[0]) { if (names[1] == "") { Console.WriteLine("玩家B的姓名不能为空,请重新输入!"); names[1] = Console.ReadLine(); } else { Console.WriteLine("该姓名已被玩家A使用,请重新输入!"); names[1] = Console.ReadLine(); } } Console.Clear(); ShowUI(); Console.WriteLine("对战开始……"); Console.WriteLine("{0}用A来表示", names[0]); Console.WriteLine("{0}用B来表示", names[1]); Console.WriteLine("如果AB使用同一位置,用<>来表示"); IntialMap();//初始化地图 DrawMap();//绘制地图 Console.WriteLine(); Console.WriteLine("开始游戏…………"); //这个循环中让A和B轮流掷骰子,当玩家A和玩家B的值>=99时,则结束循环。 //循环条件就是 while (playerPos[0] < 99 && playerPos[1] < 99) { #region//玩家A Console.WriteLine("{0}按任意键开始掷骰子……", names[0]); Console.ReadKey(true); step = r.Next(1, 7); Console.WriteLine("{0}掷出了{1}", names[0], step); Console.WriteLine("按任意键开始行动……"); Console.ReadKey(true); playerPos[0] += step; #endregion #region//玩家B #endregion } Console.ReadKey(); } /// <summary> /// 用于绘制界面 /// </summary> static void ShowUI() { Console.WriteLine("****************************************"); Console.WriteLine("* *"); Console.WriteLine("* 骑 士 飞 行 琪 *"); Console.WriteLine("* *"); Console.WriteLine("****************************************"); } /// <summary> /// 对地图中的关卡进行初始化 /// </summary> static void IntialMap() { //用于存储地图中地图的下标 int[] luckyTurn = { 6, 23, 40, 55, 69, 83 };//幸运轮盘◎ int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };//地雷☆ int[] pause = { 9, 27, 60, 93 };//暂停▲ int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };//时空隧道卍 for (int i = 0; i < luckyTurn.Length; i++) { Map[luckyTurn[i]] = 1; } for (int i = 0; i < landMine.Length; i++) { Map[landMine[i]] = 2; } for (int i = 0; i < pause.Length; i++) { Map[pause[i]] = 3; } for (int i = 0; i < timeTunnel.Length; i++) { Map[timeTunnel[i]] = 4; } } /// <summary> /// 获得第POS坐标上应该绘制的图案 /// </summary> /// <param name="pos">要绘制的坐标</param> /// <returns></returns> static string GetMapString(int pos) { string resule = ""; if (playerPos[0] == pos && playerPos[1] == pos) { Console.ForegroundColor = ConsoleColor.Yellow; resule = "<>"; } else if (playerPos[0] == pos)//A当前画的格上 { Console.ForegroundColor = ConsoleColor.Yellow; resule = "A"; } else if (playerPos[1] == pos)//B在当前的格上 { Console.ForegroundColor = ConsoleColor.Yellow; resule = "B"; } else { switch (Map[pos]) { case 0: Console.ForegroundColor = ConsoleColor.White; resule = "□"; break; case 1: Console.ForegroundColor = ConsoleColor.Red; resule = "◎"; break; case 2: Console.ForegroundColor = ConsoleColor.Green; resule = "☆"; break; case 3: Console.ForegroundColor = ConsoleColor.Blue; resule = "▲"; break; case 4: Console.ForegroundColor = ConsoleColor.DarkBlue; resule = "卍"; break; } } return resule; } /// <summary> /// 画地图的方法 /// </summary> static void DrawMap() { Console.WriteLine("图例:运轮盘◎2 地雷☆ 3暂停▲ 时空隧道卍"); //这是第一行 for (int i = 0; i <= 29; i++) { Console.Write(GetMapString(i)); } Console.WriteLine(); //这是第二行 for (int i = 30; i <= 34; i++) { for (int j = 0; j < 58; j++) { Console.Write(" "); } Console.WriteLine(GetMapString(i)); } //第三行 for (int i = 64; i >= 35; i--) { Console.Write(GetMapString(i)); } Console.WriteLine(); //第四行 for (int i = 65; i <= 69; i++) { Console.WriteLine(GetMapString(i)); } //第五行 for (int i = 70; i <= 99; i++) { Console.Write(GetMapString(i)); } //Console.WriteLine(); //Console.ResetColor(); } } } ```
ACM CodeForces 2A - Winner 求大神指导
题目意思就是给出一个各轮选手得分,最后输出分最高的那个人. 如果有多人分数一样高,那就输出先达到这个分数的人. 思路大概是,把数据都录进去然后按分数排序,如果分数相同按最后一次出现该名词时的下标排序 样例可以过,感觉思路是对的,但是总是第六次测验wa,请大佬指正; #include <iostream> #include <string> #include <algorithm> #include <vector> #include <map> using namespace std; struct node{ int score = 0; int index; }; bool cmp(const pair<string, node>& a, const pair<string, node>& b) { if((a.second).score != (b.second).score) return (a.second).score > (b.second).score; else return (a.second).index < (b.second).index; }//按规则排序 int main() { ios::sync_with_stdio(false); int T; //测试用例个数 cin >> T; map<string,node>nums; for(int i = 0;i < T;i++)//数据录入 { string a; int b; cin >> a >> b; nums[a].score += b;//记分 nums[a].index = i;//有相同分数时用于比较得到该分数的顺序先后。 } vector< pair<string,node> > x(nums.begin(),nums.end());//把map放到容器中排序 sort(x.begin(),x.end(),cmp); cout << x[0].first <<endl; return 0; }
百度地图获取经纬度没问题但是具体地址省城市街道有时能得到有时却是返回null求解救
public class PhotoFragment extends Fragment { public static final String IMAGE_UNSPECIFIED = "image/*"; private ImageView iv_head = null; private String[] strings = null; private FileOutputStream b = null; private String mImagePath = null; private File sdcardTempFile = null; private Bitmap myBitmap = null; private byte[] mContent = null; private Button btn_geog = null; // 定位相关 private String loc = null; // 保存定位信息 private LocationClient mLocationClient = null; private BDLocationListener myListener = new MyLocationListener(); private LocationMode mCurrentMode; boolean isFirstLoc = true;// 是否首次定位 private String head_str = null; private Map<String, String> upMap = null; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_photo, container, false); initview(); btn_geog = (Button) view.findViewById(R.id.geog); iv_head = (ImageView) view.findViewById(R.id.head); // 用于保存上传的信息时使用 upMap = new HashMap<String, String>(); sdcardTempFile = new File("/mnt/sdcard/", "tmp_pic_" + SystemClock.currentThreadTimeMillis() + ".jpg"); iv_head.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder dialog = new AlertDialog.Builder( getActivity()); dialog.setTitle("请选择"); strings = new String[2]; strings[0] = "相机"; strings[1] = "相册"; dialog.setItems(strings, new DialogInterface.OnClickListener() { // which 如果是点击列表中的选项 表示当前点击的item的下标 @Override public void onClick(DialogInterface dialog, int which) { if (which == 0) { String status = Environment .getExternalStorageState(); if (status.equals(Environment.MEDIA_MOUNTED)) { Intent intent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE); try { sdcardTempFile.createNewFile(); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(sdcardTempFile)); } catch (IOException e) { e.printStackTrace(); } startActivityForResult(intent, 100); } else { Toast.makeText(getActivity(), "请安装储存卡", Toast.LENGTH_SHORT).show(); } } else if (which == 1) { Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED); try { sdcardTempFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } startActivityForResult(intent, 101); } } }); dialog.create(); dialog.show(); } }); btn_geog.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mLocationClient.start();// 开启定位SDK mLocationClient.requestLocation();// 开始请求位置 } }); return view; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 100 || data != null) { mImagePath = sdcardTempFile.getAbsolutePath(); File file = new File(mImagePath); // 这是需要上传的转换成Base64的String 他大爷的就是这里出错了 // head_str = bitmapToString(mImagePath); myBitmap = decodeFile(file); if (myBitmap != null) { iv_head.setImageBitmap(myBitmap); } } if (requestCode == 101 || null != data) { try { // ContentResolver是可以对ContentProvider操作的类 ContentResolver resolver = getActivity().getContentResolver(); Uri originalUri = data.getData();// 取数据 // 这是把输入流转成了字节数组Uri.parse需要一个路径openInputStream需要一个URI mContent = readStream(resolver.openInputStream(Uri .parse(originalUri.toString()))); BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inJustDecodeBounds = true; opt.inDither = false; opt.inPurgeable = true; opt.inSampleSize = calculateInSampleSize(opt, 480, 800); // opt.inTempStorage = new byte[12 * 1024]; opt.inJustDecodeBounds = false; // 将字节数组转换为ImageView可调用的Bitmap对象 myBitmap = getPicFromBytes(mContent, opt); iv_head.setImageBitmap(myBitmap); mImagePath = getPath(originalUri); } catch (Exception e) { System.out.print(e.getMessage()); } } } /* * 压缩图片,避免内存不足报错 */ private Bitmap decodeFile(File f) { Bitmap b = null; try { // Decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; FileInputStream fis = new FileInputStream(f); BitmapFactory.decodeStream(fis, null, o); fis.close(); BitmapFactory.Options o2 = new BitmapFactory.Options(); int width = o.outWidth; int height = o.outHeight; int test = calculateInSampleSize(o, 480, 800); Log.i("照片长宽:", " width:" + width + " height:" + height + "insamplesize:" + test); o2.inSampleSize = calculateInSampleSize(o, 480, 800); fis = new FileInputStream(f); b = BitmapFactory.decodeStream(fis, null, o2); fis.close(); } catch (IOException e) { e.printStackTrace(); } return b; } // 计算图片的缩放值 public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int heightRatio = Math.round((float) height / (float) reqHeight); final int widthRatio = Math.round((float) width / (float) reqWidth); inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; } return inSampleSize; } public static byte[] readStream(InputStream inStream) throws Exception { byte[] buffer = new byte[1024]; int len = -1; ByteArrayOutputStream outStream = new ByteArrayOutputStream(); while ((len = inStream.read(buffer)) != -1) { outStream.write(buffer, 0, len); } byte[] data = outStream.toByteArray(); outStream.close(); inStream.close(); return data; } public static Bitmap getPicFromBytes(byte[] bytes, BitmapFactory.Options opts) { if (bytes != null) if (opts != null) return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts); else return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); return null; } private String getPath(Uri originalUri) { String[] imgs = { MediaStore.Images.Media.DATA };// 将图片URI转换成存储路径 Cursor cursor = getActivity().managedQuery(originalUri, imgs, null, null, null); int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(index); } // 把bitmap转换成Base64 String public static String bitmapToString(String filePath) { Bitmap bm = getSmallBitmap(filePath); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 40, baos); byte[] b = baos.toByteArray(); return Base64.encodeToString(b, Base64.DEFAULT); } // 根据路径获得图片并压缩,返回bitmap用于显示 public static Bitmap getSmallBitmap(String filePath) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(filePath, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, 480, 800); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(filePath, options); } public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location != null) { StringBuffer sb = new StringBuffer(128);// 接受服务返回的缓冲区 // 上传服务器的时候可不能忘记去除\n哦 sb.append(location.getProvince() + location.getCity() + location.getStreet() + "\n" + "(北纬" + location.getLatitude() + "东经" + location.getLongitude() + ")");// 获得城市 loc = sb.toString(); Toast.makeText(getActivity(), loc, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getActivity(), "无法定位", Toast.LENGTH_SHORT) .show(); return; } } @Override public void onReceivePoi(BDLocation arg0) { } } /** * 停止,减少资源消耗 */ public void stopListener() { if (mLocationClient != null && mLocationClient.isStarted()) { mLocationClient.stop();// 关闭定位SDK mLocationClient = null; } } public void initview() { mCurrentMode = LocationMode.NORMAL; mLocationClient = new LocationClient(getActivity()); // 声明LocationClient类 mLocationClient.registerLocationListener(myListener); // 注册监听函数 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true);// 打开GPS option.setAddrType("all");// 返回的定位结果包含地址信息 option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02 option.disableCache(false);// 禁止启用缓存定位 option.setPoiExtraInfo(true);// 获取地址 电话等信息 option.setPriority(LocationClientOption.NetWorkFirst);// 网络定位优先 mLocationClient.setLocOption(option);// 使用设置 mLocationClient.start(); mLocationClient.requestLocation(); } @Override public void onDestroy() { stopListener();// 停止监听 super.onDestroy(); } }
android程序运行后无法加载UI
程序运行后无法加载UI,出现白屏,并报错如下: 07-18 01:30:20.459: E/WindowManager(674): Starting window AppWindowToken{42322000 token=Token{4241ffd8 ActivityRecord{41eb6d98 u0 com.example.pls/.MainActivity t30}}} timed out 在我将主线程中的如下语句注释后,便可以正常加载UI。 ![图片说明](https://img-ask.csdn.net/upload/201607/18/1468811257_95355.jpg) MyThread类如下(主要是考虑单线程模型,想另开一个线程做任务)。 ``` class MyThread implements Runnable { private byte[] src = new byte[1024]; private byte[] dst = new byte[1024]; public void run() { while (!Thread.currentThread().isInterrupted()) { try { int fd = portOperation.getFd(); //循环前清空 String sResponse = "100003010300000712"; byte[] bResponse = HexString2Bytes(sResponse); portOperation.WriteSerialByte(fd, bResponse); String sCardInfo = "1000030101000512"; byte[] bCardInfo = HexString2Bytes(sCardInfo);//[16, 0, 1, 1, 1, 0, 3, 18] portOperation.WriteSerialByte(portOperation.getFd(),bCardInfo); try { Thread.sleep(1000); }catch (InterruptedException e){ e.printStackTrace(); } src = portOperation.ReadSerial(fd,1024 ); if ((src != null) && (src.length > 9)) { String debug = bytesToHexString(src); //调试 //转码恢复 dst = recovery(src); //从返回帧中提取卡数 String sTemp = bytesToHexString(dst); int a = Integer.parseInt(String.valueOf(sTemp.charAt(11))); int b = Integer.valueOf(String.valueOf(sTemp.charAt(12)),16); int cardNum = a*16+b; for(int i = 0;i<cardNum;i++){ int j = i*16; String cardID = sTemp.substring(13+j,21+j ); if (!dbFile.exists()) { DisplayToast("请先将数据库拷贝到SD卡根目录下!"); return; } String SQL = String.format("select * from employInfo where cardID = '%s'", cardID); Cursor c = db.rawQuery(SQL, null); //没有读到马丽但读到其他卡时,在此停止(因为数据库中只有马丽),不会执行超时删除 //而若读到马丽时,只会更新马丽时间 if(c.moveToFirst()){ //Cursor默认从下标为-1的地方开始,所以不能马上从Cursor获取信息 String name = c.getString(c.getColumnIndex("name")); //在此处将读取人员姓名保存至“employinfo.txt”文件中(确保不重复) Date date = new Date(localFile.lastModified());//文件最后修改时间 Calendar calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try{ //保证文件日期为今日 if(!localFile.exists()){ localFile.createNewFile(); }else if(localFile.exists() && date.getDay() != calendar.get(Calendar.DAY_OF_MONTH) ){ localFile.createNewFile(); } BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(localFile,true)); BufferedReader bufferedReader = new BufferedReader(new FileReader(localFile)); if(!hasName(name, bufferedReader)){ bufferedWriter.write(name+"\t"+dateFormat.format(calendar.getTime())+"\n"); bufferedWriter.flush(); } bufferedReader.close(); bufferedWriter.close(); }catch(IOException e){ e.printStackTrace(); Log.e("txt",e.toString()); } c.close(); String photoPath0 = Environment.getExternalStorageDirectory().toString() + "/picSrc/"; String photoPath = String.format("%s%s.bmp",photoPath0,name); //确保list里面放的是不同对象map的堆地址,指向的是不同对象 Map<String, Object> map = new HashMap<String, Object>(); map.put("itemName", name); //注意此处不可将Bitmap对象直接放入hashmap中,而应传入地址 map.put("itemPhoto", photoPath); map.put("addTime",System.currentTimeMillis()); Log.v("map", map.toString()); //根据姓名查看list当中是否存在所有项 boolean exist = false; for(Map<String, Object> tempMap : list){ if(name.equals(tempMap.get("itemName"))){ exist = true; //如果有则更新时间 tempMap.put("addTime", System.currentTimeMillis()); break; } } //如果不存在,则添加到list当中 if(!exist){ list.add(map); } Log.v("removeb2",list.toString()); //遍历list查看有无超时项,有则清空该项 Iterator<Map<String, Object>> it = list.iterator(); while(it.hasNext()){ if((System.currentTimeMillis()-Long.parseLong(it.next().get("addTime").toString()))>60000){ Log.v("removebefore",list.toString()); it.remove(); Log.v("removeafter",list.toString()); } } /*for(int k=0;k<list.size();k++){ if(System.currentTimeMillis()-Long.parseLong(list.get(k).get("addTime").toString())>30000){ long debug1 = System.currentTimeMillis(); long debug2 = Long.parseLong(list.get(k).get("addTime").toString()); Log.v("removebefore",list.toString()); list.remove(k); Log.v("remove",list.remove(k).toString()); Log.v("removeafter",list.toString()); } }*/ /*//删除list中没有但listview中 for(int m = 0;m<lv.getChildCount();m++){ View viewTemp = lv.getChildAt(m); String nameTemp = viewTemp.findViewById(R.id.itemName).toString(); boolean exist1 = false; for(Map<String, Object> tempMap : list){ if(nameTemp.equals(tempMap.get("itemName"))){ exist1 = true; break; } } if(!exist1){ lv.removeView(viewTemp); } }*/ } } //将定时任务中获取的List装入ListView中 Message msg = new Message(); msg.what = 1; handler.sendMessage(msg); }else{ Message msg = new Message(); msg.what = 2; handler.sendMessage(msg); } }catch(UnsupportedEncodingException e){ e.printStackTrace(); } try { Thread.sleep(500); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } } ``` 不知道具体是什么原因,还请各位前辈赐教,谢谢!
Java编程中的初始化问题
为啥初始化字符串数组要放在无参构造函数中?放在外面时,就会报数组越界异常?代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.HashMap; import java.util.Map; import com.bdqn.hibernate.model.Student; public class Session { //模拟配置文件 String tableName="_Student"; Map<String, String> cfs=new HashMap<String, String>(); //定义一个String数组,来存储方法名 String[] methodNames; public Session() { cfs.put("_id", "id"); cfs.put("_name", "name"); cfs.put("_age", "age"); methodNames=new String[cfs.size()]; } public void save(Student s) throws Exception{ //创建sql语句 String sql=createSql(); //加载驱动类 /*Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection( "jdbc:mysql://localhost:3306/hibernate", "root", ""); PreparedStatement pst=conn.prepareStatement(sql); pst.executeUpdate(); pst.close(); conn.close();*/ } private String createSql() { String str1=""; //定义变量,用来存储方法名数组的下标 int index=0; for(String s:cfs.keySet()){ //通过键获取值 String value=cfs.get(s); //将值的首字母转换成大写 value=Character.toUpperCase(value.charAt(0))+value.substring(1); //获取方法名 methodNames[index]="get"+value; System.out.println(methodNames[index]); index++; str1+=s+","; } str1=str1.substring(0, str1.length()-1); System.out.println(str1); String str2=""; for(int i=0; i<cfs.size(); i++){ str2+="?,"; } str2=str2.substring(0, str2.length()-1); System.out.println(str2); String sql="insert into "+tableName+" ("+str1+") value("+str2+")"; System.out.println(sql); return sql; } }
大型门户网站的表现技术
最近在做一个门户网站,主要是1,2级的静态化,我用jsp表现,在用url,io转化成html,我想问的问题是, 在表现层(jsp),页面中有大量的模块(不同的类别为一个模块(或多个模块)),每个模块中又有小的模块, 为了方便,我每个大模块对应一个list,(小模块从大模块的list中生成,)这样我在dao中有个findAll()的方法,在findAll()中查询出每个模块的list,在把findAll()的每个list放在session中去(大量的代码), 随着模块的增加我的findAll() 越来越大, 我想有没有好解决的方法 问题的根本原因是,1,2级页面的模块太多, 解决的方向1:使findAll()的代码量减少, 2:减少jsp的表现逻辑, 我的jsp的逻辑大部分为: <ul> <% //显示饮食的1-3条新闻 newss=(List<News>)application.getAttribute("msNewss"); newssT=newss.toArray(); for(int i=0;i<=newssT.length;i++){ m=(News)newssT[i]; String isDate=m.getIsDate(); String[] isDates=isDate.split("-"); String fileName=null; fileName=request.getContextPath()+"\\Html\\"+isDates[0]+"_"+isDates[1]+"\\" +isDates[2]+"\\"+m.getId()+".html"; %> <li> <a href=<%=fileName %> target="_blank"><%=m.getHead() %></a></li> <% if(i==2) break; }%> </ul> </span> </div> <div class="food_a_b"> <ul> <% //显示饮食的4-12条新闻 newss=(List<News>)application.getAttribute("msNewss"); newssT=newss.toArray(); for(int i=3;i<=newssT.length;i++){ m=(News)newssT[i]; String isDate=m.getIsDate(); String[] isDates=isDate.split("-"); String fileName=null; fileName=request.getContextPath()+"\\Html\\"+isDates[0]+"_"+isDates[1]+"\\" +isDates[2]+"\\"+m.getId()+".html"; %> <li> <a href=<%=fileName %> target="_blank"><%=m.getHead() %></a></li> <% if(i==11) break; }%> 我的dao大部分为: /** * 查询出时尚的新闻 */ hql="from News n where n.newsType.type=:type order by n.isDate desc "; newss=(List<News>)session.createQuery(hql).setString("type", "时尚").setFirstResult(0).setMaxResults(20).list(); newssMap.put("ssNewss", newss); /** * 查询出时尚潮流的新闻 */ hql="from News n where n.newsType.type=:type and n.keyy like:co order by n.isDate desc "; newss=(List<News>)session.createQuery(hql).setString("type", "时尚").setString("co", "%潮流%").setFirstResult(0).setMaxResults(6).list(); newssMap.put("clNewss", newss); /** * 查询出时尚前沿的新闻 */ hql="from News n where n.newsType.type=:type and n.keyy like:co order by n.isDate desc "; newss=(List<News>)session.createQuery(hql).setString("type", "时尚").setString("co", "%前沿%").setFirstResult(0).setMaxResults(6).list(); newssMap.put("qyNewss", newss); /** * 查询出纤体的新闻 */ hql="from News n where n.newsType.type=:type order by n.isDate desc "; newss=(List<News>)session.createQuery(hql).setString("type", "纤体").setFirstResult(0).setMaxResults(6).list(); newssMap.put("qtNewss", newss); 我的 action为:: /** * 查询出亲子的新闻 */ newss=newssMap.get("qzNewss"); request.getSession().getServletContext().setAttribute("qzNewss", newss); /** * 查询出居家的新闻 */ newss=newssMap.get("jjNewss"); request.getSession().getServletContext().setAttribute("jjNewss", newss); /** * 查询出美食的新闻 */ newss=newssMap.get("msNewss"); request.getSession().getServletContext().setAttribute("msNewss", newss); [b]问题补充:[/b] 大家说的清楚些,怎样拿掉page上的<%...%>,用jsp的标签吗??我用的是struts1.2 [b]问题补充:[/b] 这个我也考虑过,不过我放弃了,因为:jsp是用来表现的,我的那些数据就是被显示的,如果写在action中,我就要对上面的一个list划分成几个list,每个小list对应一个小模块,这样表现数据是方便了点,但这样的小list要有50多个, 放在request中就有50多个,这样的list太多了,而且action的代码就特别庞大了, [b]问题补充:[/b] 我的我的dao是用map 存放每一个list的,那时我为了jsp好表现,我在action 中又把map的list拿出来放在request中了,现在想想还是不分解map了, 我写了个方法, //i开始下标 //结束下标 //数据源 public string getNewss(int i,int j,String mapNewss) ,这样应该好点,谢谢啊, 但我已经写了四个模块了,这样改太辛苦了,唉,自己开始没有规划好。 能交个朋友吗? 我的msn:kulinglei@126.com
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
小白学 Python 爬虫(25):爬取股票信息
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
《面试宝典》2019年springmvc面试高频题(java)
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 1、什么是Spring MVC ?简单...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
(总结)阿里面试问了ArrayList,都问了啥?
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
2020年1月中国编程语言排行榜,python是2019增长最快编程语言
编程语言比例 排名 编程语言 最低工资 工资中位数 最低工资 最高工资 人头 人头百分比 1 rust 20713 17500 5042 46250 480 0.14% 2 typescript 18503 22500 6000 30000 1821 0.52% 3 lua 18150 17500 5250 35000 2956 0.84% 4 go 17989 16...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
工作十年的数据分析师被炒,没有方向,你根本躲不过中年危机
2020年刚刚开始,就意味着离职潮高峰的到来,我身边就有不少人拿着年终奖离职了,而最让我感到意外的,是一位工作十年的数据分析师也离职了,不同于别人的主动辞职,他是被公司炒掉的。 很多人都说数据分析是个好饭碗,工作不累薪资高、入门简单又好学。然而今年34的他,却真正尝到了中年危机的滋味,平时也有不少人都会私信问我: 数据分析师也有中年危机吗?跟程序员一样是吃青春饭的吗?该怎么保证自己不被公司淘汰...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
立即提问