Java 猜谜游戏,带一个While循环

Java 猜谜游戏,带一个While循环,java,game-engine,Java,Game Engine,我目前正在尝试为我的程序创建一个while循环,一个猜谜游戏。我将其设置为用户可以创建一个最大值,即1-500,然后用户可以继续猜测数字。当猜到数字时,用户可以按1关闭,或按其他任何键继续再次运行循环 我的问题是,代码在尝试继续循环时给了我一个错误,没有编译错误 这是我的代码: import java.util.Random; import java.util.Scanner; public class Gættespil2 { public static void main(Strin

我目前正在尝试为我的程序创建一个while循环,一个猜谜游戏。我将其设置为用户可以创建一个最大值,即1-500,然后用户可以继续猜测数字。当猜到数字时,用户可以按1关闭,或按其他任何键继续再次运行循环

我的问题是,代码在尝试继续循环时给了我一个错误,没有编译错误

这是我的代码:

import java.util.Random;
import java.util.Scanner;
public class Gættespil2
{
    public static void main(String[] args)
    {
        Random rand = new Random();
        int TAL = rand.nextInt(20) + 1;
        int FORSØG = 0;
        Scanner input = new Scanner (System.in);
        int guess;
        int loft;
        boolean win = false;

        boolean keepPlaying = true;
        while ( keepPlaying )
        {
            Scanner tastatur = new Scanner(System.in);
            System.out.print("Indsæt loftets højeste værdi : ");
            loft = tastatur.nextInt();
            TAL = (int) (Math.random() * loft + 1);

            while (win == false) 
            {

                System.out.println(" Gæt et tal mellem 1 og  "+ loft + "):: ");
                guess = input.nextInt();
                FORSØG++;
                if (guess == TAL) 
                {

                    win = true;
                }
                else if (guess < TAL) 
                {
                    System.out.println("Koldere, gæt igen");
                }
                else if (guess > TAL) {
                    System.out.println("Varmere, Gæt igen!!");
                }
            }
            System.out.println(" Tillykke du vandt...endeligt!!! ");
            System.out.println(" tallet var" + TAL);
            System.out.println(" du brugte " + FORSØG + " forsøg");

            System.out.println("Slut spillet? tast 1.");
            System.out.println("tryk på hvadsomhelst for at spille videre");
            int userInt = input.nextInt();
            if( userInt == 1)
            {
                keepPlaying = false;
            }
        }
    }
}

答案很简单。在玩家成功完成第一轮后开始第二轮之前,您没有初始化“keepPlaying”循环中的所有必要值。请参见下面的代码注释:

import java.util.Random;
import java.util.Scanner;

public class GuessingGame
{
    public static void main(String[] args)
    {

        Random rand = new Random();
        int TAL = rand.nextInt(20) + 1;
        int FORSØG = 0;
        Scanner input = new Scanner (System.in);
        int guess;
        int loft;
        boolean win = false;

        boolean keepPlaying = true;
        while ( keepPlaying )
        {
            Scanner tastatur = new Scanner(System.in);
            System.out.print("Enter a maximum limit: ");
            loft = tastatur.nextInt();
            TAL = (int) (Math.random() * loft + 1);

            // *** LOOK HERE ***

            // Reset the 'win' flag here, otherwise the player receives an
            // automatic win on all subsequent rounds following the first

            win = false;

            while (win == false) 
            {
                System.out.println("Guess the number between one and "+ loft + "):: ");
                guess = input.nextInt();
                FORSØG++;
                if (guess == TAL) 
                {

                    win = true;
                }
                    else if (guess < TAL) 
                {
                System.out.println("Colder, guess again!");
                }
                    else if (guess > TAL) {
                    System.out.println("Warmer, guess again!");
                }
            }

            System.out.println("You've found the number!");
            System.out.println("The number was: " + TAL + ".");
            System.out.println("You guessed " + FORSØG + " times.");

            System.out.println("To quit, enter 1.");
            System.out.println("Provide any other input to play again.");

            int userInt = input.nextInt();

            if( userInt == 1)
            {
                keepPlaying = false;
            }
        }
    }
}

很抱歉翻译成英语-我必须确保我读的东西是正确的。你可能还想用更高和更低的温度来代替更高和更冷的温度。温度越高和温度越低,则越接近正确答案,而不是正确答案所在的方向。

您能否更具体地说明收到的错误以及错误所指的线?另外,你能编辑你的代码使其正确缩进吗?现在很难阅读。瑞典语让阅读变得格外困难:听起来不粗鲁,但这对大多数英语读者来说是极其困难的,你至少可以更详细地了解一下你的代码在做什么吗?indsæt loftets højeste værdi:1//我输入了值1,所以程序选择了一个介于1-1 Gæt et tal mellem 1 og 1之间的随机数://猜数字1 tillyke du vandt…endeligt!!!//格拉茨:数字是1塔利特·瓦勒1杜布鲁特1福斯·格/用过1次尝试荡妇斯皮莱?品味1./要结束,请按1;要继续,请按其他任何键。tryk påhvadsomhelst for at spille videre当我点击其他任何东西时,它会从我输入最高值开始,当点击enter时,它只完成了整个While循环,显示了数字,我没有猜到。该程序基本上运行循环,但不允许用户第二次猜,相反,它只是显示数字。复制我的代码并运行它。我已经帮你修好了。请注意,除了英文翻译,我添加了一行,如下所述。如果你做一个区分,你会看到那一行,即使我没有让你看得很清楚。