做 while 循环和用户输入问题
do while loop and user input issue
我正在尝试制作一个用户需要输入随机整数的程序。如果用户输入一个字符串,我希望弹出一条错误消息:"This is not a number",然后重新启动程序,直到用户输入一个数字。到目前为止我得到了这个并且我被卡住了。如果我输入一个字符串并且程序崩溃,我只会收到一条错误消息。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = 0;
do {
System.out.println("Input a number!");
number = scanner.nextInt();
if (!scanner.hasNextInt()) {
System.err.println("This is not a number");
}
} while (!scanner.hasNextInt());
System.out.println("You entered: " + number);
}
您收到 InputMisMatchException,因为如果您将字符串输入 scanner.nextInt()
,它会立即给出错误并在执行任何其他操作之前停止程序,因此它不会到达您的 if 语句.解决此问题的一种方法是将用户输入作为字符串接收,try
将其解析为 int,如果不抛出异常则结束循环。这是我的实现:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "";
int number = 0;
boolean end = true;
do {
System.out.println("Input a number!");
input = scanner.nextLine();
try {
number = Integer.parseInt(input);
end = true;
} catch(Exception e) {
System.err.println("This is not a number");
end = false;
}
} while (!end);
System.out.println("You entered: " + number);
}
看看下面的代码是否可以帮助实现你想要做的事情。
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String number;
do {
System.out.println("Input a number!");
number = scanner.next();
} while (!isNumeric(number));
System.out.println("You entered: " + number);
}
public static boolean isNumeric(final String str) {
// null or empty
if (str == null || str.length() == 0) {
return false;
}
return str.chars().allMatch(Character::isDigit);
}
}
我正在尝试制作一个用户需要输入随机整数的程序。如果用户输入一个字符串,我希望弹出一条错误消息:"This is not a number",然后重新启动程序,直到用户输入一个数字。到目前为止我得到了这个并且我被卡住了。如果我输入一个字符串并且程序崩溃,我只会收到一条错误消息。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = 0;
do {
System.out.println("Input a number!");
number = scanner.nextInt();
if (!scanner.hasNextInt()) {
System.err.println("This is not a number");
}
} while (!scanner.hasNextInt());
System.out.println("You entered: " + number);
}
您收到 InputMisMatchException,因为如果您将字符串输入 scanner.nextInt()
,它会立即给出错误并在执行任何其他操作之前停止程序,因此它不会到达您的 if 语句.解决此问题的一种方法是将用户输入作为字符串接收,try
将其解析为 int,如果不抛出异常则结束循环。这是我的实现:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "";
int number = 0;
boolean end = true;
do {
System.out.println("Input a number!");
input = scanner.nextLine();
try {
number = Integer.parseInt(input);
end = true;
} catch(Exception e) {
System.err.println("This is not a number");
end = false;
}
} while (!end);
System.out.println("You entered: " + number);
}
看看下面的代码是否可以帮助实现你想要做的事情。
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String number;
do {
System.out.println("Input a number!");
number = scanner.next();
} while (!isNumeric(number));
System.out.println("You entered: " + number);
}
public static boolean isNumeric(final String str) {
// null or empty
if (str == null || str.length() == 0) {
return false;
}
return str.chars().allMatch(Character::isDigit);
}
}