Java:初学者使用Scanner

时间:2013-09-05 01:09:14

标签: java java.util.scanner

我正在学习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);
    }
}

6 个答案:

答案 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。