如何防止错误的用户输入变量?
How to prevent wrong user input on a variable?
我目前正在尝试构建防止错误用户输入的代码(例如,将 char/string 存储为整数)但我无法使其正常工作...
public static void main(String[] args) {
int num=0, option=0;
boolean keep=true;
Scanner scan = new Scanner(System.in);
while(keep) {
System.out.println("1 - Test Exception.");
System.out.println("2 - Out.");
option = scan.nextInt();
switch(option) {
case 1:
System.out.println("Write a number: ");
if(scan.hasNextInt()) {
num = scan.nextInt();
}
else {
System.out.println("Wrong input...");
}
break;
case 2:
keep=false;
System.out.println("Bye !");
break;
}
}
}
我一输入 char/string,代码就停止工作。异常发生在行 option = scan.nextInt();
我错过了什么?
您的输入类型仅为整数 您是如何传递 string/char 值的。如果您的输入是 string/char.
,请使用 Integer.parseInt(选项)
您希望用户输入 int
,但是,用户可以随意输入任何内容。因此你需要确保输入可以被解析。
String userInput = scan.next(); //scan the input
int value;
try {
value = Integer.parseInt(userInput); // try to parse the "number" to int
} catch (NumberFormatException e) {
System.out.println("Hey, you entered something wrong...");
// now you can ask the user again to enter something
}
您可以将选项声明移到循环内并使用 var 声明它,以便您可以为其分配任何内容。然后你可以使用 .getClass() 方法来检查输入是否等于 num(声明为 int,因此只有当扫描也是 int 时才会为真)。
System.out.println("Write a number: ");
var x = scan.next();
if(x.getClass() == num.getClass()) {
num = x
}
else {
System.out.println("Wrong input...");
}
我稍微修正了你的代码版本,所以它现在可以与 chars/Strings 一起使用了。我尽量少修改。
public static void main(String[] args) {
int num=0, option=0;
String input;
boolean keep=true;
Scanner scan = new Scanner(System.in);
while(keep) {
System.out.println("1 - Test Exception.");
System.out.println("2 - Out.");
input = scan.next();
try{
option = Integer.parseInt(input);
}
catch (NumberFormatException exception){
System.out.println("Wrong input");
continue;
}
switch(option) {
case 1:
System.out.println("Write a number: ");
if(scan.hasNextInt()) {
num = scan.nextInt();
}
else {
System.out.println("Wrong input...");
}
break;
case 2:
keep=false;
System.out.println("Bye !");
}
}
}
扫描仪现在正在使用 next()
函数,该函数返回下一个使用 enter 提交的输入字符。
在 try 块中,函数 Integer.parseInt(input)
检查给定的字符串是否为整数,否则抛出 NumberFormatException
并立即捕获。在这种情况下,continue
语句会跳过 while 循环中的以下代码并从头开始执行。
所以在 try-catch 块之后,您可以确定,该选项是一个整数并且 switch case 正在工作。
我目前正在尝试构建防止错误用户输入的代码(例如,将 char/string 存储为整数)但我无法使其正常工作...
public static void main(String[] args) {
int num=0, option=0;
boolean keep=true;
Scanner scan = new Scanner(System.in);
while(keep) {
System.out.println("1 - Test Exception.");
System.out.println("2 - Out.");
option = scan.nextInt();
switch(option) {
case 1:
System.out.println("Write a number: ");
if(scan.hasNextInt()) {
num = scan.nextInt();
}
else {
System.out.println("Wrong input...");
}
break;
case 2:
keep=false;
System.out.println("Bye !");
break;
}
}
}
我一输入 char/string,代码就停止工作。异常发生在行 option = scan.nextInt();
我错过了什么?
您的输入类型仅为整数 您是如何传递 string/char 值的。如果您的输入是 string/char.
,请使用 Integer.parseInt(选项)您希望用户输入 int
,但是,用户可以随意输入任何内容。因此你需要确保输入可以被解析。
String userInput = scan.next(); //scan the input
int value;
try {
value = Integer.parseInt(userInput); // try to parse the "number" to int
} catch (NumberFormatException e) {
System.out.println("Hey, you entered something wrong...");
// now you can ask the user again to enter something
}
您可以将选项声明移到循环内并使用 var 声明它,以便您可以为其分配任何内容。然后你可以使用 .getClass() 方法来检查输入是否等于 num(声明为 int,因此只有当扫描也是 int 时才会为真)。
System.out.println("Write a number: ");
var x = scan.next();
if(x.getClass() == num.getClass()) {
num = x
}
else {
System.out.println("Wrong input...");
}
我稍微修正了你的代码版本,所以它现在可以与 chars/Strings 一起使用了。我尽量少修改。
public static void main(String[] args) {
int num=0, option=0;
String input;
boolean keep=true;
Scanner scan = new Scanner(System.in);
while(keep) {
System.out.println("1 - Test Exception.");
System.out.println("2 - Out.");
input = scan.next();
try{
option = Integer.parseInt(input);
}
catch (NumberFormatException exception){
System.out.println("Wrong input");
continue;
}
switch(option) {
case 1:
System.out.println("Write a number: ");
if(scan.hasNextInt()) {
num = scan.nextInt();
}
else {
System.out.println("Wrong input...");
}
break;
case 2:
keep=false;
System.out.println("Bye !");
}
}
}
扫描仪现在正在使用 next()
函数,该函数返回下一个使用 enter 提交的输入字符。
在 try 块中,函数 Integer.parseInt(input)
检查给定的字符串是否为整数,否则抛出 NumberFormatException
并立即捕获。在这种情况下,continue
语句会跳过 while 循环中的以下代码并从头开始执行。
所以在 try-catch 块之后,您可以确定,该选项是一个整数并且 switch case 正在工作。