我正在学习Java并且正在学习I / O w / java.util.Scanner
。具体来说,我正在学习Scanner
方法。
import java.util.Scanner;
public class ScannerTest {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
int result;
while (s.hasNextInt()) {
result += s.nextInt();
}
System.out.println("The total is " + result);
}
}
答案 0 :(得分:0)
因为你只是在检查
while (s.hasNextInt())
您可以使用try
catch
来捕获程序退出时获得的异常(see documentation here),这样您就可以在catch
块中显示错误消息使程序关闭。
答案 1 :(得分:0)
你可以为while循环执行此操作(但未测试):
while (s.hasNextLine()) {
String line = s.nextLine();
int parsedInteger;
try {
parsedInteger = Integer.parseInt(line);
} catch(NumberFormatException numEx) {
if(line.startsWith("q")) break;
else {
System.out.println("please enter valid integer or the character 'q'.");
continue;
}
}
result += parsedInteger;
}
s.close();
不是扫描int
,而是扫描行,然后将每行解析为int。我觉得这种方法的优点是如果你的任何int
格式不正确,那么你可以通过向用户显示错误消息来适当地处理它们。
或者,根据pinckerman的回答,你也可以这样做。
while (s.hasNextInt()) {
try {
result += s.nextInt();
} catch(InputMismatchException numEx) {
break;
}
}
s.close();
答案 2 :(得分:0)
也许您应该尝试解析每一行:
public static void main(String args[]){
int sum = 0;
final Scanner scanner = new Scanner(System.in);
System.out.println("Enter a series of integers. Press 'q' to quit.");
while(true){
final String line = scanner.nextLine();
if(line.equals("q"))
break;
try{
final int number = Integer.parseInt(line);
sum += number;
}catch(Exception ex){
System.err.printf("Invalid: %s | Try again\n", ex.getMessage());
}
}
System.out.printf("The sum is %,d" , sum);
}
这个想法是逐行读取输入并尝试将它们的输入解析为整数。如果抛出异常(意味着它们输入了一个无效的整数),它将抛出一个异常,您可以以任何方式处理它。在上面的示例中,您只是打印错误消息并提示用户键入另一个号码。
答案 3 :(得分:0)
一种聪明的方法,你可以做到并且我之前尝试过你使用Integer.parseInt(String toParse);
这会返回一个int并拒绝所有非数字字符。
while (scanner.hasNextInt()) {
int i = Integer.parseInt(scanner.nextInt());
result += i;
if (result < 2147483648 && result > -2147483648) {
try{
throw new IndexOutOfBoundsException();
catch (Exception e) {e.printStackTrace();}
}
答案 4 :(得分:0)
尝试以下方式:
int result = input.nextInt;
这将定义您的结果变量。
答案 5 :(得分:0)
代码中唯一的问题是&#34;没有初始化&#34;结果。一旦初始化代码将正常工作。但是,请不要忘记你需要告诉编译器EOF。编译器只能通过EOF了解控制台上输入的停止。 CTRL Z是Windows Eclipse IDE的EOF。