我试图为我的问题找到一个解决方案,但找不到一个在实践中有效的解决方案。所以,如果你不确定你知道解决方案是什么,请不要回答。我真的需要具体的帮助。
问题在于,当我运行我的简单代码时 - 你可以选择一个数字而且没关系,循环工作正常。当你选择0时,它也可以工作(运行完成),但是当你输入一个字母或任何字符串时 - 有一个问题......一个异常会不停地循环,即使我尝试输入另一个值。
PS。我需要在这里使用Scanner,所以请不要写关于读者等等 - 只是如何解决这个具体问题。
干杯,
这是代码(仅限主要代码):
public static void main(String[] args) {
// TODO code application logic here
Scanner sc = new Scanner(System.in);
int dane = -1 ;
boolean keepLooping; //if you delete this works the same with same problem
do
{
keepLooping = false;
try
{
System.out.println("Pick a number:");
dane = sc.nextInt();
}catch (InputMismatchException e)
{
System.out.println("Your exception is: " + e);
keepLooping = false;
}
System.out.println("Out from exception");
}while ((dane != 0)||(keepLooping == true));
}
答案 0 :(得分:0)
<强>被修改强>
这样做
public static void main(String[] args) {
// TODO code application logic here
Scanner sc = new Scanner(System.in);
int dane = -1 ;
boolean keepLooping; //if you delete this works the same with same problem
do
{
keepLooping = false;
try
{
System.out.println("Pick a number:");
dane = sc.nextInt();
}catch (InputMismatchException e)
{
System.out.println("Your exception is: " + e);
keepLooping = false;
dane = sc.nextInt();
}
System.out.println("Out from exception");
}while ((dane != 0)||(keepLooping == true)&&(dane!=0));
}
答案 1 :(得分:0)
试试这个:
public static void main(String[] args) {
// TODO code application logic here
Scanner sc = new Scanner(System.in);
int dane = -1 ;
boolean keepLooping = true; //if you delete this works the same with same problem
while(keepLooping && dane != 0)
{
System.out.println("Pick a number:");
try
{
dane = Integer.parseInt(sc.next());
}catch (NumberFormatException e)
{
keepLooping = true;
}
System.out.println("Out from exception");
}
答案 2 :(得分:0)
问题是当你说 -
dane = sc.nextInt();
在上面一行中,如果您输入的数字不是数字,则会引发异常输入不匹配。 让我们了解这条线的作用。实际上有两件事 -
首先sc.nextInt()读取一个整数,并且只有在成功完成此任务时,它才会将该整数值赋给变量dane。但是在读取一个整数时会抛出一个InputMismatchException,因此赋值永远不会发生,但是dane有它的previos值而不是扫描仪读取的新值,所以dane仍然不等于0。 所以循环继续。
我希望它有所帮助。