为什么无法读取此代码:java.util.Scanner.throwFor(Unknown Source)中线程“main”java.util.NoSuchElementException中的异常,

时间:2014-03-28 13:27:38

标签: java eclipse multithreading java.util.scanner filereader

<

at java.util.Scanner.throwFor(Unknown Source)

at java.util.Scanner.next(Unknown Source)

at java.util.Scanner.nextInt(Unknown Source)

at java.util.Scanner.nextInt(Unknown Source)
at Main.main(Main.java:14)>>

我正在尝试制作一个文件阅读器,它应该从文本文件中读取一个9位数并制作一个ISBN号。这给出了持续的错误:线程中的异常......

9位数字是这样的: 013601267<输入>

013031997

013292373 这是我的代码:

    File  fr = new File("ISBN.txt");
    Scanner in = new Scanner(fr);
    int s ; int sum; int c10;
    while (in.hasNextInt()) {
        int c1 = in.nextInt();
        int c2 = in.nextInt();
        int c3 = in.nextInt();
        int c4 = in.nextInt();
        int c5 = in.nextInt();
        int c6 = in.nextInt();
        int c7 = in.nextInt();
        int c8 = in.nextInt();
        int c9 = in.nextInt();

        String set = in.next();

         sum = Integer.parseInt(set);

         c10 = (c1 * 1 + c2 * 2 + c3 * 3 + c4 * 4 + c5 * 5 + c6 * 6 + c7
                * 7 + c8 * 8 + c9 * 9) % 11;
         s = c1+c2+c3+c4+c5+c6+c7+c8+c9;

        System.out.print("" + s);

        if (c10 == 1) 
            {
            System.out.println(set);

            } 
        else if (c10 % 11 == 0) 
            {
            System.out.println(set + "X");
            }

    }

}

}

3 个答案:

答案 0 :(得分:1)

如果您的输入是013601267<输入>,in.nextInt()将013601267作为单个int,因为数字之间没有空格。因此,您应该拨打in.nextInt()一次,并根据需要将其解析为数字。

考虑您的输入数字以0开头,您最好使用in.nextLine()将其作为String而不是int,或者忽略第一个位置的0。

你可以这样做:

while(in.hasNextLine) {
    String line = in.nextLine();
    int c1 = Integer.valueOf(line.substring(0,1));
    int c2 = Integer.valueOf(line.substring(1,2));
    //more lines here

}

答案 1 :(得分:0)

我认为你期望当你的例程运行时in.nextInt()会看到这样的数字:

013601267

并在第一次调用时返回0,第二次返回1,第三次返回3,等等。

事实上,当您第一次拨打in.nextInt()时,它实际上是返回整个号码013601267。

答案 2 :(得分:0)

嗯......没有看到堆栈跟踪,那就是:

while (in.hasNextInt()) {
    int c1 = in.nextInt();
    int c2 = in.nextInt();
    int c3 = in.nextInt();
    int c4 = in.nextInt();
    int c5 = in.nextInt();
    int c6 = in.nextInt();
    int c7 = in.nextInt();
    int c8 = in.nextInt();
    int c9 = in.nextInt();

正在呼吁那种例外。如果“in”hasNextInt,你刚刚检查过一次,但是你已经调用了nextInt 9次。