首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 猜數字遊戲:為什麼每次輸入判斷都不一樣?

     編輯:程式設計疑難解答

現象:輸入 40 提示「大了」,輸入 39 卻提示「小了」

Scanner in = new Scanner(System.in);
for (int j = 1; j < 8; j++) {
    System.out.println("請輸入一個整數:");
    int value = in.nextInt();
    int ran = (int)(Math.random() * 100) + 1; // ❌ 每次迴圈都重新產生隨機數
    if (value > ran) System.out.println("大了");
    else if (value < ran) System.out.println("小了");
    else System.out.println("恭喜你猜對了!");
}

根本原因:隨機數在迴圈內重複生成

每次玩家輸入,ran 都會重新隨機,導致「目標數字」不斷變動,玩家永無法猜中。

修正:將隨機數生成移至迴圈外部

Scanner in = new Scanner(System.in);
int ran = (int)(Math.random() * 100) + 1; // ✅ 只生成一次,固定目標
for (int j = 1; j < 8; j++) {
    System.out.println("請輸入一個整數:");
    int value = in.nextInt();
    if (value > ran) System.out.println("大了");
    else if (value < ran) System.out.println("小了");
    else {
        System.out.println("恭喜你猜對了!你的戰鬥力是 " + j + "%");
        break; // 猜中跳出
    }
}

延伸改進建議

  • 使用 Random 類別而非 Math.random(),效能更好、支援種子可重現。
  • 加上輸入驗證(非整數處理)。
  • 顯示剩餘猜測次數,提升體驗。
Random rnd = new Random();
int target = rnd.nextInt(100) + 1; // [1, 100]

記住:**遊戲目標必須在迴圈外確立**,否則就不是猜數字,而是「追著移動的目標射擊」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved