1

我正在学习 Java 并且正在学习带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);
    }
}
4

6 回答 6

0

因为你只检查

while (s.hasNextInt())

您可以使用它try catch来捕获程序退出时出现的异常(请参阅此处的文档),因此您可以在catch块中显示错误消息而无需关闭程序。

于 2013-09-05T01:17:59.323 回答
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,而不是扫描's。我觉得这种方法的优点是,如果您的任何int's 格式错误,您可以通过向用户显示错误消息来适当地处理它们。

或者,根据 pinckerman 的回答,您也可以这样做。

    while (s.hasNextInt()) {
        try {
            result += s.nextInt();
        } catch(InputMismatchException numEx) {
            break;
        }
    }

    s.close();
于 2013-09-05T01:18:47.373 回答
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);
}

这个想法是逐行读取输入并尝试将其输入解析为整数。如果抛出异常(意味着他们输入了一个无效的整数),它将抛出一个异常,您可以在其中以任何您想要的方式处理。在上面的示例中,您只是打印错误消息并提示用户输入另一个数字。

于 2013-09-05T01:20:44.183 回答
0

一个聪明的方法是你可以做到这一点,我之前尝试过的是你使用Integer.parseInt(String toParse);This 返回一个 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();}
 }
于 2013-09-05T01:25:14.950 回答
0

您的代码中唯一的问题是“未初始化”结果。一旦你初始化代码将正常工作。但是,请不要忘记您需要告诉编译器 EOF。编译器只能通过EOF理解控制台上输入的停止。CTRL Z 是 Windows Eclipse IDE 的 EOF。

于 2017-08-18T13:46:25.953 回答
0

试试下面的方法:

int result = input.nextInt; 

这将为结果定义您的变量。

于 2015-10-02T06:12:26.367 回答