如果文本文件由一行数字组成,下面的代码可以完全正常运行,但是一旦它到达例如一行说“我是40”,它就会跳过它,而不是将40放入数组中。Scanner inFile = null;    File file = null;    String filePath = (JOptionPane.showInputDialog("Please enter a file path"));    int size = 0;    int[] result = new int[10];    try {        file = new File(filePath);        inFile = new Scanner(file);        int skippedCounter = 0;        for(int i = 0; inFile.hasNext(); i++){            if(inFile.hasNextInt())                result[i] = inFile.nextInt();            else{                String strOut = "";                String data = inFile.next();                for(int j = 0; j <= data.length() - 1; j++){                    if(!Character.isLetter(data.charAt(j))){                        strOut += data.charAt(j);                    }                    else                        skippedCounter++;                }                result[i] = Integer.parseInt(strOut);            }        }    }
                    
                    
                3 回答
 
                    
                    
                            DIEA
                            
                                
                            
                        
                        
                                                
                    TA贡献1820条经验 获得超3个赞
next()将为您提供下一个令牌,而不是下一行。所以变量可能会超过十。如果你没有一个空的捕获,你会意识到这一点:你的数组正在越界i
溶液:
不要使用结果数组,使用结果列表,并在有其他结果时追加到其末尾
注意:
另一个可能发生的隐藏异常是,当您的 parseInt 由于非数字数据而失败时。因此,不要将所有内容都包装在巨大的尝试/捕获中,这只会使调试变得更加困难!
 
                    
                    
                            慕妹3242003
                            
                                
                            
                        
                        
                                                
                    TA贡献1824条经验 获得超6个赞
以下
result[i] = Integer.parseInt(strOut)
将导致 在尝试处理任何信件时出现 。作为空字符串中的结果NumberFormatExceptionstrOut""
在尝试解析之前,您必须检查空字符串
if (!strOut.isEmpty()) {
    result[i] = Integer.parseInt(strOut);
}添加回答
举报
0/150
	提交
		取消
	
