我正在尝试创建一个使用while循环的方法,该循环包含一个前瞻方法来处理错误的用户输入:输入1-10范围或输入字符串。我试图通过抛出异常或使用try {} catch {}来做到这一点;如果可能的话。我还没有发现一个不使用这些的帖子,到目前为止我的所有尝试都失败了。一个基本的想法将起作用。
如果输入正确,将不会停止
import java.util.*;
public class UserErrors{
public static Scanner console = new Scanner(System.in);
public static void main(String[]args){
String s = "Enter a integer between 1-10: ";
get(s);
}
public static int get(String prompt){
System.out.print(prompt);
while(console.hasNext()){
while(!console.hasNextInt()){
console.next();
System.out.println("Invalid data type");
System.out.print(prompt);
}
if(console.nextInt() > 10 || console.nextInt() <1){
System.out.println("not in range");
System.out.print(prompt);
}
}
return console.nextInt();
}
}
要求正确的答案在停止之前被估算3次
import java.util.*;
public class UserErrors{
public static Scanner console = new Scanner(System.in);
public static void main(String[]args){
String s = "Enter a integer between 1-10: ";
get(s);
}
public static int get(String prompt){
System.out.print(prompt);
boolean b = false;
while(!b){
if(!console.hasNextInt()){
console.next();
System.out.println("Invalid data type");
System.out.print(prompt);
console.nextInt();
}
else if(console.nextInt() < 10 && console.nextInt() >1){
b = true;
}
else{
System.out.println("not in range");
System.out.print(prompt);
console.nextInt();
}
}
return console.nextInt();
}
}
我也删除了其他一些失败的尝试。我需要修理什么(基本想法会做什么)?
答案 0 :(得分:2)
有一个错误:
if(console.nextInt() > 10 || console.nextInt() <1){ ... }
将此行更改为:
int i = console.nextInt();
if(i > 10 || i <1){ ... }
你不能重复使用console.next ...():)
答案 1 :(得分:0)
每个nextInt调用都是一个阻塞调用,它等待用户输入。 当你在下面写下你的代码:
if(console.nextInt() < 10 && console.nextInt() >1)
本质上,控制台等待第一个用户输入,将其与10进行检查,然后等待下一个输入(可能是任何输入)(不一定是相同的),不一定相同,等待,最后输入if条件。< / p>
控制台输入应始终预先设置并分配给我们的本地变量,然后需要检查您的条件,如下所示:
int userInput = console.nextInt();
然后使用userInput变量进行检查:
if(userInput < 10 && userInput >1)
答案 2 :(得分:0)
Scanner类的nextInt()方法读取标准出口
import java.util.*;
public class UserErrors{
public static Scanner console = new Scanner(System.in);
public static void main(String[]args){
String s = "Enter a integer between 1-10: ";
get(s);
}
public static int get(String prompt){
boolean b = false;
int number;
while(!b){
System.out.print(prompt);
if(!console.hasNextInt()){
console.next();
System.out.println("Invalid data type");
System.out.print(prompt);
console.nextInt();
}else {
number = console.nextInt();
if(nb<1 || nb>10){
System.out.println("not in range");
}else{
b=true;
}
}
}
return nb;
}
}