为了账号安全,请及时绑定邮箱和手机立即绑定

将值传递到循环中时遇到麻烦

将值传递到循环中时遇到麻烦

慕雪6442864 2022-09-14 10:46:22
如果文本文件由一行数字组成,下面的代码可以完全正常运行,但是一旦它到达例如一行说“我是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 由于非数字数据而失败时。因此,不要将所有内容都包装在巨大的尝试/捕获中,这只会使调试变得更加困难!


查看完整回答
反对 回复 2022-09-14
?
万千封印

TA贡献1891条经验 获得超3个赞

我建议你只使用一次nextInt函数来保留请求的值,然后在需要时使用该变量。我认为 nextInt 函数会在每次调用它时移动到下一个 int。


查看完整回答
反对 回复 2022-09-14
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

以下

result[i] = Integer.parseInt(strOut)

将导致 在尝试处理任何信件时出现 。作为空字符串中的结果NumberFormatExceptionstrOut""

在尝试解析之前,您必须检查空字符串

if (!strOut.isEmpty()) {
    result[i] = Integer.parseInt(strOut);
}


查看完整回答
反对 回复 2022-09-14
  • 3 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号