这里的基本问题..我将首先要求您不要回复任何代码,因为这可能只会让我更加困惑(编程菜鸟)。我正在寻找关于如何解决这个问题的明确解释。
我有一个扫描仪,可以读取用户的输入。提示用户输入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
答案 0 :(得分:12)
Scanner.hasNextInt()如果下一个标记是数字,则返回true
,否则返回false
。
在这个例子中,我调用hasNextInt()。如果它返回true
,我会经过一段时间并设置输入;如果它返回false
,则我丢弃输入(scanner.next();
)并重复。
Scanner scan = new Scanner(System.in);
while(!scan.hasNextInt()) {
scan.next();
}
int input = scan.nextInt();
答案 1 :(得分:3)
这是一个带有提示和注释的简单示例。
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.
答案 2 :(得分:1)
使用scan.hasNextInt()
确保下一个输入为int
。
答案 3 :(得分:0)
得到"任何东西"并解析它:
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);
}
}
答案 4 :(得分:0)
没有任何代码,只有英文,我会说有两件事你需要测试或注意。首先输入是int,第二个是int在正确的范围内。
就伪代码而言,首先要做的是确保它是一个int。声明一个名为“input”的int,我会放一个try / catch块,你尝试使用parseInt()在用户输入中扫描为int。如果try部分失败,您知道它不是int并且可以返回错误消息。
然后,既然您知道“input”是一个int,您可以测试它是否小于1或大于150,并返回错误消息,如果是这样的话!
答案 5 :(得分:0)
我编写了一个示例,确保只有输入数字而不是无效值时程序才会继续。别担心,我添加了所需的解释。
程序要求用户输入一个数字。循环确保在输入有效数字之前不会继续处理。在此之前,我已经定义了一个变量“inputAccepted”,它具有false作为默认值。如果他输入一个数字,变量“inputAccepted”将设置为true,程序将离开循环。但是如果他输入的不是数字,则会在此时抛出异常,并且不会执行将变量“inputAccepted”设置为true的行。而是打印出一条消息,告诉用户他的输入无效。由于“inputAccepted”无法设置为true,因此循环将再次执行相同的操作,直到字符串可以转换为数字。
You can test the program here.
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!");
}
}
答案 6 :(得分:-1)
公共类示例{
/**
* 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");
}
}