<
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");
}
}
}
}
答案 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次。