Java 为什么下面的程序不起作用?
我不明白为什么下面的程序不起作用。请帮帮我,我哪里出错了。多谢各位Java 为什么下面的程序不起作用?,java,Java,我不明白为什么下面的程序不起作用。请帮帮我,我哪里出错了。多谢各位 import java.util.Scanner; public class LargestNumber { public static void main(String[] args) { int[] numbers = new int[100]; int largestNumber = 0; System.out.println("Enter numbers. Wh
import java.util.Scanner;
public class LargestNumber {
public static void main(String[] args) {
int[] numbers = new int[100];
int largestNumber = 0;
System.out.println("Enter numbers. When you want to finish, type 'finish'.");
Scanner sc = new Scanner(System.in);
do {
if (sc.hasNextInt()) {
for (int counter = 0; counter < 10; counter++)
numbers[counter] = sc.nextInt();
}
if (!sc.hasNextInt() && !sc.hasNext("finish")) {
System.out.println("It's neither number nor 'finish'.");
}
}
while (!sc.hasNext("finish"));
for (int x : numbers) {
if (x > largestNumber) {
largestNumber = x;
}
}
System.out.println("The largest number is: " + largestNumber);
}
}
根据该文件:
抛出:
InputMismatchException-如果下一个标记与整数正则表达式不匹配,或超出范围
所以我想你可以这样做:
int counter = 0;
while (counter < numbers.length) {
if (sc.hasNextInt()) {
numbers[counter++] = sc.nextInt();
} else {
if (sc.hasNext("finish")) {
sc.close();
break;
} else {
System.out.println("It's neither number nor 'finish'.");
sc.next();
}
}
}
for (int x : numbers) {
if (x > largestNumber) {
largestNumber = x;
}
}
System.out.println("The largest number is: " + largestNumber);
希望这能有所帮助我认为扫描仪不必要地复杂,而且大部分时间都不能工作。下面是如何用老式的方式来做:
public class LargestNumber {
public static void main(String[] args) {
int largestNumber=0;
System.out.println("Enter numbers. When you want to finish, type 'finish'.");
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String line;
while (!(line = r.readLine()).equals("finish")) {
int val = Integer.parseInt(line);
if (val > largestNumber)
largestNumber = val;
}
System.out.println("The largest number is: " + largestNumber);
}
}
为此,请在新行中输入每个数字。我在这里使用了一个较短的算法,即读取一个数字,如果它大于目前为止的最大值,则新数字是目前为止的最大值
do {
if (sc.hasNextInt()) {
for (int counter = 0; counter < 10; counter++)
numbers[counter] = sc.nextInt();
}
if (!sc.hasNextInt() && !sc.hasNext("finish")) {
System.out.println("It's neither number nor 'finish'.");
}
}
while (!sc.hasNext("finish"));
毫无意义。你:
测试输入中的下一项是否为整数;
尝试解析接下来的十个标记,假设它们都是整数;
在第十一个标记处,检查它是另一个整数还是finish;
如果两者都不是,则抛出异常;
如果没有完成,重复所有的步骤。
实际上,你应该做的事情要简单得多:
检查下一个令牌:
如果完成了,你就完成了;
如果它是一个整数,解析它;
否则抛出错误;
重复此操作最多100次
你已经接受了输入。继续处理它。
它怎么不起作用?编译错误?运行时错误?意外的结果?请解释。我得到了InputMismatchException。你重新键入…?A尝试发布完整的异常和stacktrace,这样我们可以缩小范围,B我们怎么知道你给出了什么输入?我键入的是数字或字符串。不是我投了否决票,但是将if改为while在这里不起作用。我投了反对票,因为我真的认为这不起作用,然后OP验证了。@user2637870再次测试它,并告诉我它是否是你想要的,但它从未测试过finish。这不可能是对的。我认为检查必须在手术室里进行。我认为手术室使用扫描仪的方式过于复杂。他把一个简单的需求搞得一团糟。我认为你的代码更需要一个封闭的花括号…@AndreaParodi你是对的