我正在使用java语言创建一个简单的程序,它使用一堆类似的方法从用户检索信息。我用来处理用户输入无效数据的方法对我来说似乎非常不正确,因此我正在寻求有关如何更好地处理无效数据的专业指导。
我试图搜索类似的问题,但没有找到。
这是我的一个方法的示例:
public static int getInput()
{
int temp = 1;
do
{
System.out.println("Answers must be between 1 and 15");
temp = reader.nextInt();
if(temp >=1 && temp <= 15)
{
return temp;
}
else
{
System.out.println("Please enter a valid value");
}
}while(temp > 15 || temp < 1);
//This value will never be reached because the do while loop structure will not end until a valid return value is determined
return 1;
}//End of getInput method
有没有更好的方法来编写此方法?
这个问题完全弥补了,所以我可以在未来的课程中学到更好的方法。
使用带标签的中断语句是否可以接受?如:
public static int getInput()
{
int temp = 1;
start:
System.out.println("Answers must be between 1 and 15");
temp = reader.nextInt();
if(temp >=1 && temp <= 15)
{
return temp;
}
else
{
System.out.println("Please enter a valid value");
break start;
}
}
非常感谢您提前。
答案 0 :(得分:2)
您忘记检查案例,输入了非数字值(Scanner#nextInt
会抛出java.util.InputMismatchException
)。处理该问题的一个建议是更少冗余和更灵活:
public static int getInput(int min, int max) {
for (;;) {
Scanner scanner = new Scanner(System.in);
System.out.println(String.format("Answers must be between %s and %s", min, max));
try {
int value = scanner.nextInt();
if (min <= value && value <= max) {
return value;
} else {
System.out.println("Please enter a valid value");
}
} catch (InputMismatchException e) {
System.out.println("Input was no number");
}
}
}
答案 1 :(得分:0)
如果您只是担心未使用的返回并且仔细检查temp,则可以执行类似
的操作public static int getInput()
{
while(true)
{
System.out.println("Answers must be between 1 and 15");
temp = reader.nextInt();
if(temp >=1 && temp <= 15)
{
return temp;
}
else
{
System.out.println("Please enter a valid value");
}
}
}//End of getInput method