-1

私は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

4 に答える 4

1

あなたのwhileループは を待つつもりはないnextInt()ので、ループは最初の推測に基づいてインクリメントまたはデインクリメントします。これを修正するには、計算を行う前に次の入力を待ち、ループ内で計算を行います。

while ((points <= 7 && points >= 0) && scan.hasNext()) {
  // we have an input value
  guess = scan.nextInt();
  num = generator.nextInt(5) + 1;
}
于 2013-10-17T03:23:33.403 に答える
1

最初の答えを間違えると、ポイントが-1になります。

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

0 から 7 の間の範囲のみをチェックするため、ループを終了します

于 2013-10-17T03:22:08.183 に答える
1

あなたのコードは while ループが始まる場所にループバックします。ユーザー入力からの読み取りがループの外にあるため、次の推測では読み取られません。これらの 2 行はループ内にある必要があります

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

現在、コードは 1 つの int を読み取り、それを生成します。予想が当たれば7点獲得して勝ち、ハズレなら即負け

于 2013-10-17T03:19:56.167 に答える
0

while ループ内でユーザー入力を受け取る

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

  }
于 2013-10-17T03:24:11.727 に答える