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

如果文本文件由一行数字组成,下面的代码可以完全正常运行,但是一旦它到达例如一行说“我是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);

            }

        }

    }


慕雪6442864
浏览 96回答 3
3回答

DIEA

next()将为您提供下一个令牌,而不是下一行。所以变量可能会超过十。如果你没有一个空的捕获,你会意识到这一点:你的数组正在越界i溶液:不要使用结果数组,使用结果列表,并在有其他结果时追加到其末尾注意:另一个可能发生的隐藏异常是,当您的 parseInt 由于非数字数据而失败时。因此,不要将所有内容都包装在巨大的尝试/捕获中,这只会使调试变得更加困难!

万千封印

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

慕妹3242003

以下result[i]&nbsp;=&nbsp;Integer.parseInt(strOut)将导致 在尝试处理任何信件时出现 。作为空字符串中的结果NumberFormatExceptionstrOut""在尝试解析之前,您必须检查空字符串if&nbsp;(!strOut.isEmpty())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;result[i]&nbsp;=&nbsp;Integer.parseInt(strOut); }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java