有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的while循环会冻结我的程序以及如何修复它?

我对Java非常陌生,有一个问题。我的程序是一个简单的电脑猜谜游戏。如果你猜对了,那么你的分数会上升1。如果你猜错了,那么你的分数会减少1。如果你得到7或0,那么你赢/输。你能帮我理解为什么它不会循环回while语句的起始位置吗? 谢谢

import java.util.Random;
import java.util.Scanner;
import java.lang.Math;
import java.io.*;

class RandomGame {
public static void main(String str[]) throws IOException {
    Scanner scan = new Scanner(System.in);
    String userAns = new String();
    Random generator = new Random();

    int guess, num, points = 0;

    System.out.println("Hello...");
    try {
        Thread.sleep(1500);
    } catch (InterruptedException ex) {
    }
    System.out.println("Would you consider playing a fun game?");
    try {
        Thread.sleep(1000);
    } catch (InterruptedException ex) {
    }
    userAns = scan.next();
    // if/else about whether they want to play the game**********
    if (userAns.equals("yes")) {
        System.out.println("Awww yeah lets get going!");
        System.out
                .println("Objective of the game:\n1.Guess numbers out of 5\n2."
                        + "If you guess incorrect you get points reduced.\n3.Have fun!");

        try {
            Thread.sleep(5500);
        } catch (InterruptedException ex) {
        }
        System.out.println("\nReady?");
        userAns = scan.next();
        if (userAns.equals("yes")) {
            System.out.println("Okay! Here we go!");
            // COUNTDOWN************************************
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
            }
            System.out.println("3");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
            }
            System.out.println("2");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
            }
            System.out.println("1");
        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException ex) {
        }

        // *****************************************************
        System.out.println("Please enter a integer 1-5 to start the game.");

        guess = scan.nextInt();
        num = generator.nextInt(5) + 1;
        while (points <= 7 && points >= 0)

        {
            if (guess == num) {
                System.out.println("Correct! You gained 1 point!");
                points++;
                System.out.println(points);
            } else if (guess != num) {
                System.out.println("Incorrect. You lose 1 point.");
                points--;

            }
        }

    }

    else if (userAns.equals("no")) {
        System.out.println("GAMEOVER.\n\n\nHint: say \"yes\"");
    }

    else {
        System.out.print("yes or no answers please.");
    }
}
}

共 (4) 个答案

  1. # 1 楼答案

    您的代码确实会循环回while循环开始的位置,但它不会在下一次猜测中读取,因为您从用户输入读取的内容在循环之外。这两条线需要在循环内

    guess = scan.nextInt();
    num = generator.nextInt(5) + 1;
    

    当前代码读入一个int并生成一个int。如果猜测正确,你将得到7分,然后获胜,如果猜错了,你将立即失败

  2. # 2 楼答案

    你的while循环不会等待nextInt(),因此循环只是根据第一次猜测的结果递增或递减。要解决此问题,请在进行计算之前等待下一个输入,然后在循环中进行计算:

    while ((points <= 7 && points >= 0) && scan.hasNext()) {
      // we have an input value
      guess = scan.nextInt();
      num = generator.nextInt(5) + 1;
    }
    
  3. # 3 楼答案

    如果你第一次答错了,你的分数会变成-1

    while (points <= 7 && points >= 0)
    

    只检查0到7之间的范围,因此退出循环

  4. # 4 楼答案

    在while循环中获取用户输入

      while (points <= 7 && points >= 0)
      {
          guess = scan.nextInt();
          num = generator.nextInt(5) + 1;
          // continue 
    
      }