当前位置: 首页 > 知识库问答 >
问题:

Java Do While语句在Try Catch语句[duplicate]之后无限循环

余歌者
2023-03-14

我目前正在处理Eclipse中的一些Java代码,并试图在do-time语句中使用try捕获语句。我目前的代码如下:

import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.Random;
public class GG_HighLowInvalid{

    public static void main(String[] args){

        Scanner cg = new Scanner(System.in);

        //Assign and define variables
        int guess, rand;
        guess = 0;
        rand = 10;

        //Create loop
        do 
            try{
                guess = 0;
                //Ask for a guess
                System.out.print("Enter your guess: ");

                //Record the guess
                guess = cg.nextInt();
            }
            catch(InputMismatchException exception){

                System.out.println("Your guess must be an integer.");

            }
        while  (guess != rand);


    }
}

当我输入任何数字时,代码工作正常,并将循环请求另一个输入,当输入10时,代码按预期停止(因为猜测值等于rand)。但是,如果我输入任何非整数的内容(例如“否”),则会出现一个无限循环,其中输出打印以下内容:

"你的猜测必须是整数"

“输入您的猜测:您的猜测必须是整数。”

“输入您的猜测:您的猜测必须是整数。”

“输入您的猜测:您的猜测必须是整数。”

永远重复,直到程序从外部终止。

既然while语句是(guess!=rand),为什么非整数会导致这个无限循环?try语句下的手动输入不应该再次调用吗?如有任何帮助,我们将不胜感激。另外,我对Java还很陌生,如果我遇到一些简单的问题,请提前道歉。

共有3个答案

龚迪
2023-03-14

你不需要使用try catch语句。您只需使用对象扫描仪的hasNextInt()方法检查它是否是整数。这是一个例子,它将解决您的问题:

public static void main(String[] args) {
    Scanner cg = new Scanner(System.in);
    boolean valid = false;
    //Assign and define variables
    int guess, rand;
    guess = 0;
    rand = 10;

    //Create loop
    do{
        System.out.println("Enter your guess: ");
        if(cg.hasNextInt()){
            guess = cg.nextInt();  
            valid = true;
        }else{
            System.out.println("Your guess must be an integer.");
            cg.next();
        }
    }while  (!valid || guess != rand);
}
魏学智
2023-03-14

使用以下代码:

       catch(InputMismatchException exception){
                cg.next();
                System.out.println("Your guess must be an integer.");

       }

在您读取缓冲区失败后,它的值不会被清空,下一次当它到达cg时。nextInt()它试图读取相同的错误的值,您进入了循环。您需要“清空缓冲区”,所以下次它将读取正确的值。

蔡弘扬
2023-03-14

当扫描器抛出一个InputMismatchException时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌。

当前,您的扫描仪没有向前移动以读取下一个输入,而是连续读取相同的输入。您必须显式调用一些方法,这些方法可以读取这个不正确的值,而这是不期望的。例如,扫描仪。next()调用catch块可以避免这个无限循环。

 类似资料:
  • 通常都听到别人说,计算机很牛逼,很聪明,其实计算机一点都不聪明,光是你要跟他沟通,都会气 shi 你,聪明的是在写程序的你。 写程序就是跟计算机沟通,告诉它要做什么。 竟然是这样,那么肯定缺少不了一些沟通逻辑。比如你要告诉计算机在什么情况下做什么?或者在哪个时间点做什么? 这都需要用到逻辑判断。这一章节,主要就是说这个。 目录

  • 1、什么是循环语句 一般编程语言都有循环语句,为什么呢? 那就问一下自己,我们弄程序是为了干什么? 那肯定是为了方便我们工作,优化我们的工作效率啊。 而计算机和人类不同,计算机不怕苦也不怕累,也不需要休息,可以一直做。 你要知道,计算机最擅长就是做重复的事情。 所以这时候需要用到循环语句,循环语句允许我们执行一个语句或语句组多次。 循环语句的一般形式如下: 在 Python 提供了 for 循环和

  • while 循环:while 条件 do … end repeat 循环:repeat … until 条件 for 循环:for 变量 = 初值,终点值,步进 do … end for 循环:for 变量 1,变量 2,… ,变量 N in表或枚举函数 do … end while 循环 my_table = {1,2,3} local index = 1 -- 注意: table 中的索引从

  • 循环语句的作用是反复的执行同一段代码,尽管分几种不同的类型,但其原理几乎相同;只要给定的条件满足,包含在循环体内的语句会不断执行,一旦条件不再满足则终止。 while循环是前测试循环,这意味着是否终止的条件判断是在执行代码之前,因此,循环的主体可能根本不执行。其语法如下: while(expression) statement 当expression为ture时,程序会不断执行statement语

  • 在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。 以下为大多编程语言循环程序的流程图: Go 语言提供了以下几种类型循环处理语句: 循环类型 描述 for 循环 重复执行语句块 循环嵌套 在 for 循环中嵌套一个或多个 for 循环 循环控制语句 循环控制语句可以控制循环体内语句的执行过程。 GO 语言支持以下几种循环控制语句: 控制语句 描述 break 语句

  • 我正在开发一个简单的python程序,其中包括创建一个圆圈“按钮”,然后让用户在圆圈内单击。如果他们没有点击圆圈,会出现一条消息,说明他们在圆圈外点击,应该再试一次。然而,在最后一部分,我得到了一个关于代码的无休止的循环,尽管使用了中断。是否有任何人可以帮助查看是否存在错误?谢谢