我应该在哪里放置变量扫描器声明? " int figureNumber = stdin.nextInt();"

时间:2017-01-23 22:03:31

标签: java try-catch

我想这样做,以便用户输入错误的数据类型作为figureNumber将看到来自我的消息说"请输入一个整数"而不是正常的错误消息,并将给予另一个输入整数的机会。我开始尝试使用try和catch,但我无法让它工作。

对不起,如果这是一个愚蠢的问题。这是我参加java课程的第二周。

import java. util.*;

public class Grades {

public static void main(String args []) {
    Scanner stdin = new Scanner(System.in);
    System.out.println();
    System.out.print(" Please enter an integer: ");
    int grade = stdin.nextInt();
    method2 ();
    if (grade % 2 == 0) { 
        grade -= 1; 
    }
    for(int i = 1; i <=(grade/2); i++) { 
            method1 ();
            method3 ();
    }
}

}

4 个答案:

答案 0 :(得分:0)

Scanner stdin = new Scanner(System.in);
try {
    int figureNumber = stdin.nextInt();
    eagle();
    if (figureNumber % 2 == 0) { //determines if input number of figures is even
        figureNumber -= 1; 
    }
    for(int i = 1; i <=(figureNumber/2); i++) { 
        whale();
        human();
    }
}
catch (InputMismatchException e) {
    System.out.print("Input must be an integer");
} 

您可能想要做这样的事情。别忘了在.java文件的开头添加import java.util.*;

答案 1 :(得分:0)

您想要表格中的内容:

  1. 要求输入
  2. 如果输入不正确,请说明并转到第1步。
  3. 一个不错的选择是:

    Integer num = null; // define scope outside the loop
    System.out.println("Please enter a number:"); // opening output, done once 
    do {
        String str = scanner.nextLine(); // read anything
        if (str.matches("[0-9]+")) // if it's all digits
            num = Integer.parseInt(str);
        else
            System.out.println("That is not a number. Please try again:"); 
    } while (num == null);
    // if you get to here, num is a number for sure
    

    do while是一个不错的选择,因为你总是至少进行一次迭代。

    将整行读作字符串非常重要。如果您尝试阅读int而其中之一,那么通话将会爆炸。

答案 2 :(得分:0)

 public static void main(String args[]) {
        Scanner stdin = new Scanner(System.in);
        System.out.println();
        System.out.print(" Welcome! Please enter the number of figures for your totem pole: ");

        while (!stdin.hasNextInt()) {
            System.out.print("That's not a number! Please enter a number: ");
            stdin.next();
        }

        int figureNumber = stdin.nextInt();
        eagle();
        if (figureNumber % 2 == 0) { //determines if input number of figures is even
            figureNumber -= 1;
        }
        for (int i = 1; i <= (figureNumber / 2); i++) {
            whale();
            human();
        }
    }

您需要检查输入。如果输入是整数,则hasNextInt()方法为true。因此,while循环要求用户输入一个数字,直到输入为数字。调用next()方法很重要,因为它将从扫描程序中删除先前错误的输入。

答案 3 :(得分:0)

您可以在分配之前测试该值。你不需要做任何匹配。

...
int figureNumber = -1;
while (figureNumber < 0) {
    System.out.print(" Welcome! Please enter the number of figures for your totem pole: ");
    if (stdin.hasNextInt()){
        figureNumber = stdin.nextInt(); //will loop again if <0
    } else {
        std.next(); //discard the token
        System.out.println("Hey! That wasn't an integer! Try again!");
    }
}
...