如何坚持认为,用户输入一个int?(How to insist that a users input

2019-07-03 10:39发布

这里的基本问题..我会问,你请不与任何代码响应,因为这可能只会混淆我进一步(编程小白)开始。 我在寻找如何解决我有这个问题解释清楚。

我有一台扫描仪,从用户读取输入。 用户被提示以1〜150(仅限整数)之间进入一个int值。 我得到的值,如下所示:

    Scanner scan = new Scanner(System.in);
    int input = scan.nextInt();

并继续与我的程序,一切工作正常。

不幸的是,该代码是不完全防弹,因为任何输入不是一个整数可以打破它(字母,符号等)。

我怎样才能使代码更健壮,它会验证只有一个int被输入?

这是我希望的结果:

比方说输入是:

23 -> valid
fx -> display an error message, ask the user for input again (a while loop would do..)
7w -> error, again
3.7 -> error
$$ -> error
etc

Answer 1:

Scanner.hasNextInt()返回true如果下一个标记是一个数字,返回false ,否则。

在这个例子中,我称之为hasNextInt()。 如果返回true ,我走过去的,而并设定输入; 如果返回false ,那么我丢弃输入( scanner.next(); ),并重复。

Scanner scan = new Scanner(System.in);
while(!scan.hasNextInt()) {
    scan.next();
}
int input = scan.nextInt();


Answer 2:

这里有一个简单的例子,有提示和评论。

Scanner scan = new Scanner(System.in);
System.out.print("Enter an integer: "); // Initial prompt for input

// Repeat until next item is an integer
while (!scan.hasNextInt()) 
{        
    scan.next(); // Read and discard offending non-int input
    System.out.print("Please enter an integer: "); // Re-prompt
}

// At this point in the code, the user has entered an integer
int input = scan.nextInt(); // Get the integer

// And now you can use the input variable.


Answer 3:

使用scan.hasNextInt()以确保下一个输入是int



Answer 4:

刚刚获得“任何东西”,并对其进行分析:

Scanner scan = new Scanner(System.in);

Integer number = null;
while (number == null) {
    try {
        number = Integer.parseInt(scan.next());
    } catch (NumberParseException e) {
        System.out.println("bad input: " + input);
    }
}


Answer 5:

没有任何代码,只是在英语,我说有你有测试或看出来的两件事情。 第一输入是一个int,第二是,int是正确的范围内。

在伪代码方面,要做的第一件事就是确保它是一个int。 声明名为“输入”一个int,我会把一个try / catch块,在那里你尝试在用户输入一个int进行扫描,用parseInt函数()。 如果尝试部分出现故障,你知道这是不是一个int,并且可以返回一个错误信息。

那么,现在你知道“输入”是一个int,你可以测试它是否是150余小于1,如果是返回一个错误信息!



Answer 6:

我写了保证如果输入数字而不是无效值的程序只能继续一个例子。 别担心,我将所需的解释。

该方案要求用户输入一个数字。 一个循环确保直到输入一个有效的数字处理将不下去了。 在此之前,我已经定义了一个变量“inputAccepted”有假的默认值。 如果他进入一个数字,变量“inputAccepted”设置为true,程序退出循环。 但是,如果他进入东西比别的号,一个异常就在此刻抛出,而变量“inputAccepted”设置为true,该行不会被执行。 相反,一个消息将被打印出来,告诉他输入无效用户。 由于“inputAccepted”不能设置为true,则循环将再次做同样的东西,直到字符串可以转换为数字。

你可以在这里测试程序。

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean inputAccepted = false;
        while (!inputAccepted) {
            try {
                System.out.print("Please enter a number: ");
                Integer.valueOf(input.nextLine());
                inputAccepted = true;
            } catch (NumberFormatException e) {
                System.out.println("Not a valid number.");
            }
        }
        System.out.println("Thank you!");
    }
}


Answer 7:

公共类样品{

/**
 * author CLRZ
 */
public static void main(String[] args) {
    int a; // variable
    Scanner in = new Scanner(System.in); // scans your input
    System.out.println("Enter your number's choice:"); 
    int sem1 = in.nextInt(); // reads next integer
    if (sem1 == 1) // conditioned if your choice number is equal to 1
    System.out.println("Hello World1"); // output wil be Hello World
    int b;

    System.out.println("Enter your number's choice:");
    int sem2 = in.nextInt(); 
    if (sem2 == 2)
    System.out.println("Hello World2");
    int c;

    System.out.println("Enter your number's choice:");
    int sem3 = in.nextInt(); 
    if (sem3 == 3)
    System.out.println("Hello World3");
}

}



文章来源: How to insist that a users input is an int?