【问题标题】:I'm stuck with while loop on my random number guessing game我在我的随机数猜谜游戏中遇到了 while 循环
【发布时间】:2016-07-03 16:17:21
【问题描述】:

希望它循环遍历所有内容,直到用户输入正确的数字。当用户输入错误的号码时,它应该说“输入不同的号码”。当用户输入正确的数字时,它应该说“恭喜你赢了”。但在那之前它会循环并说“输入不同的数字”,在尝试 5 次后我希望它说“你失败了这个任务!你想再试一次吗?”

如果他们在 1 次尝试中猜到,他们将给 500 美元,第二次尝试为 400 美元,依此类推,直到 5 次尝试。

import javax.swing.*;
import java.util.Random;

public class Projekt_1 {

    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, "WELCOME TO GUESS GAME!" + "\nYou gonna guess a number between 1 and 20 " + "\nYou have  5 tries to guess the number! " + "\nYou gonna get more money on less tries, highest win are 500 dollar on one try! " + "\nHOPE YOU LIKE IT :)");

        Random talet = new Random();
        int secretnumber = talet.nextInt(20) + 1;
        int tries = 0;
        int money = 600;
        String number;

        int guess;
        boolean win = false;

        while (win == false) {
            number = JOptionPane.showInputDialog("Guess a number between 1 and 20");
            guess = Integer.parseInt(number);
            tries++;

            if (guess == secretnumber) {
                win = true;
            } else if (guess > secretnumber) {
                JOptionPane.showInputDialog("Your number is to low :(" + "\nType in a higher number!");
                guess = Integer.parseInt(number);
            } else if (guess < secretnumber) {
                JOptionPane.showInputDialog("Your number is to high :(" + "\nType ina a lower number!");
                guess= Integer.parseInt(number);
            }
        }

        JOptionPane.showMessageDialog(null, "Congrats you won!" + "\nYour number was " + secretnumber + "\nit took you " + tries + "tries");
    }
}   

【问题讨论】:

  • 我假设försök 计算尝试次数?如果是这样,您将要在循环中添加第二个条件,如果försök 等于4,则终止它。
  • 请翻译代码。问题和代码应该是英文meta.stackexchange.com/questions/13676/….
  • 已编辑为英文 :)
  • 对于此类问题,我强烈建议您学习如何使用调试器并逐行检查您的代码。问题很明显。
  • 查看更新后的代码

标签: java if-statement while-loop do-while


【解决方案1】:

while 循环中添加附加条件将起作用。如果försök 是最大值为5 的尝试次数(在您的情况下),则条件应为:

while (win == false && försök<5) //if försök starts from 0 
{
   //code
   if(win==true)
   break;
   försök++;
}

要显示消息和分数,您可以在while 循环之后检查försök 的值:

if(försök==5)
{
      // display this message: "you failed this mission! do you want to try again?" 
     score=0;
}
else
{
     //display: "congrats you won"
      score=(5-försök)*100;
}

基本上你的代码应该是这样的:

import javax.swing.*;
import java.util.Random;

class Projekt_1
{
public static void main(String[] args) {
        final int maxTries = 5;
        JOptionPane.showMessageDialog(null, "Welcome... " + maxTries + " tries ... 500 krones ");

        final Random rnd = new Random();
        final int hemligtnummer = rnd.nextInt(20) + 1;
        int tryCounter = 0;
        final int pengar = 500;
        String nummer;

        int guess = -1;

        while (guess != hemligtnummer && tryCounter < maxTries) {
            if(tryCounter==0)
            nummer = JOptionPane.showInputDialog("...a number 1 and 20");
            else
            nummer = JOptionPane.showInputDialog("Enter no...");
            guess = Integer.parseInt(nummer);
            if (guess == hemligtnummer) {
                break;
            } else if (guess > hemligtnummer) {
                JOptionPane.showMessageDialog(null, "Try " + (tryCounter+1) + " was too big try a smaller one");
            } else if (guess < hemligtnummer) {
                JOptionPane.showMessageDialog(null, "Try " + (tryCounter+1) + " too small try a bigger one");
            }
            tryCounter++;
        }
        if(tryCounter==5){
            JOptionPane.showMessageDialog(null,"Grattis du vann!" + "\nteh number was " + hemligtnummer + "\nDet tog dig " + tryCounter + " försök");
            JOptionPane.showMessageDialog(null, "Your price is :" + (pengar - tryCounter * 100) + " Krones");
        }
        else
        {
            JOptionPane.showMessageDialog(null,"congrats you won"+"Your price is :" + (pengar - tryCounter * 100) + " Krones" );
        }
    }
}

【讨论】:

  • 谢谢你,我会补充一点,你首先那个 while 循环比另一个 if (försök == 5) 下那个?
  • 谢谢!会尝试一下,但是当您尝试 1/2/3/4/5 次时,该程序会给您 500/400/300/200/100 美元吗?如果你知道我的意思
  • 这个程序每次都会说“输入一个更大的数字”并返回“输入一个介于 1 和 20 之间的数字”,如果输入正确的数字并且如果输入正确,则不执行“你赢”你输入了错误的数字,它不会在某些时候说“输入一个较低的数字”
  • 我更新了代码,运行良好!@Lucke GG
  • 非常感谢你,你让我长达 2 天的痛苦再次好转! :D
【解决方案2】:

你可以有一个控制 break while 循环。当尝试次数超过 5 或输入正确的数字时,它将被破坏。
请参阅以下内容

Scanner s = new Scanner(System.in);
        int numOfTries = 0;
        int input;
        int correctNumn = 15;

        while (true) {

            input = s.nextInt();
            if (input != correctNumn && numOfTries <= 5) {

                numOfTries++;
                if (numOfTries == 5) {
                    System.out.println("Game Over");
                    break;
                }

                continue;
            } else if (input == correctNumn) {
                System.out.println("corect ans");
                break;
            }

        }

【讨论】:

  • 如何使用 swing?你现在正在使用 util
【解决方案3】:

如果您用您的母语发布所有内容,真的很难帮助您...但这是我的答案...

您的代码的问题在于洞 logi,您从不使用变量 Trys(försök),如果用户猜错了数字,那么您再次阅读 try,但您应该再次启动 while 的逻辑。 ..

无论如何....

示例:

public static void main(String[] args) {
        final int maxTries = 5;
        JOptionPane.showMessageDialog(null, "Welcome... " + maxTries + " tries ... 500 krones ");

        final Random rnd = new Random();
        final int hemligtnummer = rnd.nextInt(20) + 1;
        int tryCounter = 0;
        final int pengar = 600;
        String nummer;

        int guess = -1;

        while (guess != hemligtnummer && tryCounter < maxTries) {
            nummer = JOptionPane.showInputDialog("...a number 1 and 20");
            guess = Integer.parseInt(nummer);
            tryCounter++;

            if (guess == hemligtnummer) {
                break;
            } else if (guess > hemligtnummer) {
                JOptionPane.showMessageDialog(null, "Try " + tryCounter + " was too big try a smaller one");
            } else if (guess < hemligtnummer) {
                JOptionPane.showMessageDialog(null, "Try " + tryCounter + "too small try a bigger one");
            }
        }
        JOptionPane.showMessageDialog(null,
                "Grattis du vann!" + "\nteh number was " + hemligtnummer + "\nDet tog dig " + tryCounter + " försök");
        JOptionPane.showMessageDialog(null, "Your price is :" + (pengar - tryCounter * 100) + " Krones");
    }

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 2023-03-15
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2019-11-29
    相关资源
    最近更新 更多