簡體   English   中英

根據用戶輸入分配枚舉

[英]Assigning an enum based on the user input

我正在嘗試構建一個簡單的控制台井字游戲。 我試圖讓用戶使用 select Circle 或 Cross 來玩。 我有一個 Circle 和 Cross 的枚舉。

每次我運行程序時,我都會得到 else output,即使我輸入了“Circle”或“Cross”。

不尋找代碼答案,只是想看看是否有人可以指出我的錯誤方向。

import java.util.Scanner;

public class Game {

    private Model model;
    private Model player;

    public Game() {

        Scanner input = new Scanner(System.in);
        System.out.println("Do you want to play as Cross or Circle");
        input.nextLine();

        if(input.equals(Model.valueOf("CROSS"))) {
            player = Model.CROSS;
        } else if(input.equals(Model.valueOf("CIRCLE"))) {
            player = Model.CIRCLE;
        } else {
            System.out.println("Invalid choice, please choose either Circle or Cross");
        }

    }
}
public enum Model {

CROSS, CIRCLE
}

input是一個Scanner並且永遠不會等於一個枚舉實例。 您需要存儲input.nextLine()的結果並進行比較。

String line = input.nextLine();
if (line.equals("CROSS")) {
  ...
} else if (line.equals("CIRCLE")) {
  ...
} else {
  ...
}

來自JDK 11 doc class Enum 的方法valueOf

返回具有指定名稱的指定枚舉類型的枚舉常量。 該名稱必須與用於在此類型中聲明枚舉常量的標識符完全匹配。 (不允許使用多余的空白字符。)請注意,對於特定的枚舉類型 T,可以使用該枚舉上隱式聲明的公共 static T valueOf(String) 方法代替此方法,從名稱到相應的枚舉常量。 枚舉類型的所有常量都可以通過調用該類型的隱式公共 static T[] values() 方法獲得。

也許你想這樣寫你的 if

   String line = input.nextLine();
   if(Model.CROSS == Model.valueOf(line.trim())) {
        player = Model.CROSS;
    } else if(Model.CIRCLE == Model.valueOf(line.trim())) {
        player = Model.CIRCLE;
    } else {
        System.out.println("Invalid choice, please choose either Circle or Cross");
    }

另一個好處是String line = input.nextLine(); 如何在這里建議其他答案

您正在嘗試檢查掃描儀 object 是否等於枚舉的字符串值,而是將 nextLine() 返回值保存到字符串變量並檢查變量是否相等並且最好使用 equalsIgnoreCase

public Game() {

    Scanner scanner = new Scanner(System.in);
    System.out.println("Do you want to play as Cross or Circle");
    String input =  scanner.nextLine();
    if(input.equalsIgnoreCase(Model.CIRCLE.name())) {
        player = Model.CROSS;
    } else if(input.equalsIgnoreCase(Model.CROSS.name())) {
        player = Model.CIRCLE;
    } else {
        System.out.println("Invalid choice, please choose either Circle or Cross");
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM