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

如何修复这个基本程序?Java do-while循环

商勇
2023-03-14

我正在写这个猜谜游戏,它使用户可以输入一个数字作为最大数字。

我正在使用try/catch,但在错误消息后,程序不允许用户输入另一个号码来继续游戏。

import java.util.ArrayList;
import java.util.Random;
import javax.swing.JOptionPane;

public class guessinggame { // class name

    public static void main(String[] args) { // main method

        String smax = JOptionPane.showInputDialog("Enter your maximum number for the Guessing Game:");
        int max = Integer.parseInt(smax);

        do {
            if (max > 10000) {
                JOptionPane.showMessageDialog(null, "Oh no! Please keep your number less than 10,000.");
                smax = JOptionPane.showInputDialog("Enter your maximum number for the Guessing Game:");
                max = Integer.parseInt(smax);
            }
        } while (max > 10000);

        int answer, guess = 0, lowcount = 0, highcount = 0, game;
        String sguess;
        Random generator = new Random();
        answer = generator.nextInt(max) + 1;

        ArrayList<String> buttonChoices = new ArrayList<>(); // list of string arrays called buttonChoices 
        buttonChoices.add("1-" + max + " Guessing Game");

        Object[] buttons = buttonChoices.toArray(); // turning the string arrays into objects called buttons

        game = JOptionPane.showOptionDialog(null, "Play or Quit?", "Guessing Game",
                JOptionPane.PLAIN_MESSAGE, JOptionPane.QUESTION_MESSAGE,
                null, buttons, buttonChoices.get(0));

        do {
            sguess = JOptionPane.showInputDialog("I am thinking of a number between 1 and " + max + ". Have a guess:");
            try {
                guess = Integer.parseInt(sguess);
            } catch (Exception nfe) {
                JOptionPane.showMessageDialog(null, "That was not a number! ");
            }

            if (guess < answer) {
                JOptionPane.showMessageDialog(null, "That is too LOW!");
                lowcount++;

            } else if (guess > answer) {
                JOptionPane.showMessageDialog(null, "That is too HIGH!");
                highcount++;
            }

        } while (guess != answer);
        JOptionPane.showMessageDialog(null, "Well Done!" + "\n---------------" + "\nThe answer was " + answer + "\nLow Guesses: " + lowcount
                + "\nHigh Guesses: " + highcount + "\n\nOverall you guessed: " + (lowcount + highcount) + " Times");

        System.exit(0);
    }
}

共有1个答案

宰父嘉胜
2023-03-14

在我的机器上运行,它循环回来很好。虽然它是坏的;缺省情况下guess为0,在发生异常后继续执行代码。如果随机数碰巧是0,程序将退出,因为它是正确的猜测。假设您的机器上发生了类似的情况?

您还没有将保护逻辑放在最初的“您的最大值是多少”位附近。

 类似资料:
  • 我用C#做了一个快速排序算法,当数组中只有10个项时,它可以工作。当我增加这个数字时,它就会陷入无限循环。这是问题所在的代码: 当调用sortArray时,left=0,right=49&array是一个随机的50个元素的一维数组。 您可以忽略对reDrawer和refresher的引用,因为这些不会影响排序算法,它们只会在图片框中绘制结果。

  • 我试图创建一个简单的while循环,它将运行start、stop、quit和help命令。“启动”、“停止”和“帮助”将仅显示一些打印文本。在它们运行之后,我希望它继续执行另一个命令。然而,在退出时,我希望整个程序停止。

  • 问题内容: boolean r = false ; int s = 0 ; while (r == false) ; { s = getInt() ; if (!(s>=0 && s<=2)) System.out.println (“try again not a valid response”) ; else r = true ; } 即使输入3或123,循环也不会终止,文本也不会显示。怎么了

  • 我怎么能修好它? replaceAll函数中此字符“{”错误。谢谢。

  • 我如何修复这个程序我使用Java Spring MVC?我想在数据库中输入包含日期的数据,但它显示错误。我该怎么修好它? 这是我在实体中的代码 字段“Tanggal”上对象“transaksipenjualan”中的字段错误:拒绝值[2019-07-15];代码[typemismatch.transaksipenjualan.tanggal,typemismatch.tanggal,typemis

  • 正如这里看到的,有两种方法可以重复某事很多次。但是它似乎对我不起作用,所以我想知道是否有人能帮忙。 基本上,我想重复以下3次 根据链接所说,这就是我所做的, 但这似乎行不通。while循环只重复一次,而不是三次。有人能帮我解决这个问题吗?