代码不完全按照我的意愿去做。尽早退出循环

时间:2014-12-08 11:08:40

标签: java eclipse

我编写了代码(如下),我希望在文件中添加所有有效整数,并忽略任何无效的代码。目前,停止 无效值并且不会继续。

intnumbers.txt

22
33
44
55
66
ss
77
88
99
import java.io.File;
import java.io.FileNotFoundException;
import java.util.InputMismatchException;
import java.util.Scanner;

public class HandleExceptions {
    public static void main(String[] args) {
        int total = 0;
        int number;

        try {
            File inFile = new File("intnumbers.txt");
            Scanner fileScanner= new Scanner(inFile);
            while (fileScanner.hasNextInt()) {
                number = fileScanner.nextInt(); // Checks to see the next double in the text file
                total = total + number;
                System.out.println(number);
            }
            fileScanner.close();
        }
        catch (FileNotFoundException e) {
            System.err.println("No such file name");
        }
        catch (InputMismatchException e) {
            System.err.println("Data incorrect type expecting an int");
        }

        System.out.println("Finished");
        System.out.println("Total is:" + total);
    }
}

示例输出

22
33
44
55
66
Finished
Total is:220

5 个答案:

答案 0 :(得分:2)

试试这个吗?有一个时获取一个整数,或者只是跳过它。

int total = 0;
int number;

try {
    File inFile = new File("intnumbers.txt");
    Scanner fileScanner= new Scanner(inFile);
    while (fileScanner.hasNext())
    {
        if(fileScanner.hasNextInt()) // Check for an valid integer
        {
            number = fileScanner.nextInt(); // Gets the integer
            total = total + number;         // Add it to the total
            System.out.println(number);
        }
        else
        {
            fileScanner.next(); // Skip invalid input
            // System.out.println("Data incorrect type, expecting an int");
        }
    }
    fileScanner.close();
}
catch (FileNotFoundException e) {
    System.err.println("No such file name");
}
catch (InputMismatchException e)
{
    // If an exception is thrown for an invalid data type
    // Your loop will not run to completion
    System.err.println("Data incorrect type expecting an int");
}

System.out.println("Finished");
System.out.println("Total is:" + total);

<强>输出:

22
33
44
55
66
77
88
99
Finished
Total is:484

答案 1 :(得分:0)

您在循环中使用scanner.hasNextInt。根据文档,只要&#34; ss&#34;读(https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextInt%28%29)。

使其工作的一种方法是在循环条件中使用hasNextLine,然后检查该行是否为整数。

答案 2 :(得分:0)

您所拥有的条件是while (fileScanner.hasNextInt())

顾名思义,hasNextInt()将检查下一个值是否为int。

当遇到ss时,它将返回false并退出循环。

More Info

您需要使用say,hasNext()

来修改逻辑

修改

当您尝试将字符串ss解析为整数时,会出现异常,

number = fileScanner.nextInt();

最好用try-catch尝试这个语句。

try{
    number = fileScanner.nextInt();
}catch(NumberFormatException e){

}

答案 3 :(得分:0)

如果下一个没有int,则fileScanner.hasNextInt()返回false 所以虽然停在&#39; ss&#39;并且必须如此......

你必须写

 while (fileScanner.hasNext())
    {
        try{
          number = Integer.pasrseInt(fileScanner.next()); /
        }            
        catch(Exception ex) {}
    }
 )

答案 4 :(得分:0)

Scanner API doc描述了hasNextInt方法的功能如下:

  

如果使用nextInt()方法可以将此扫描程序输入中的下一个标记解释为默认基数中的int值,则返回true。

由于ss不能解释为int,因此循环将退出。我建议改为使用hasNexthasNextLine()