如何使用if语句或for-loop设置枚举?

时间:2017-08-03 10:58:04

标签: java android-studio for-loop if-statement enums

我希望人们可以评估自己。为此,他们需要输入0到10之间的数字(0,1,2,3,4,5,6,7,8,9,10)。根据他们的号码,我的枚举应该切换。

我的名字被称为" knowlede"我有四个不同的步骤"知识" 0-3 =初学者// 4-6 =高级// 7-9 =专业// 10 =主人

我的想法是用if语句和/或for循环设置用户枚举级别 这是我的代码到目前为止,但你可以看到我可以缩短这段代码,但我不知道如何;我读了一些其他的帖子,但由于某些原因他们没有工作或我没有得到它们。

@SuppressLint("SetTextI18n")
public Wissenstand Bestätigung(View v) {
    TextView uWissen = (TextView) findViewById(R.id.textView_Wissen_Titel);
    TextView pWarung = (TextView) findViewById(R.id.textView_Wissen);
    TextView eWissen = (TextView) findViewById(R.id.editText_eingabeWissentsstand);
            if ("0".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.Beginner;
            } else if ("1".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.Beginner;
            } else if ("2".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.Beginner;
            } else if ("3".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.Beginner;
            } else if ("4".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.Fortgeschrittener;
            } else if ("5".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.Fortgeschrittener;
            } else if ("6".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.Fortgeschrittener;
            } else if ("7".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.Pro;
            } else if ("8".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.Pro;
            } else if ("9".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.Pro;
            } else if ("10".equals(eWissen.getText().toString())) {
                knowledge = Wissenstand.GrandMaster;
            } else {
                uWissen.setText("Fehler gefunden!");
                uWissen.getResources().getColor(android.R.color.holo_red_dark);
                pWarung.setText("Gib eine Zahl von 0 bis 10 ein!\n0,5-er Schritte sind nicht erlaubt!\nWeitere Informationen kannst du der Legende entnehmen!");
                pWarung.getResources().getColor(android.R.color.holo_red_light);
            }
    return null;
}

如果你需要一些帮助,因为你不理解某些词语,请给我发短信,我会尽快回答。
语言是"德语"。

4 个答案:

答案 0 :(得分:3)

我会实现这样的事情:

enum KnowledgeLevel
{
    BEGINNER, ADVANCED, PROFESSIONAL, MASTER;

    static KnowledgeLevel fromUserInput(final int input)
    {
        if (input >= 10) {
            return MASTER;
        }
        else if (input >= 7) {
            return PROFESSIONAL;
        }
        else if (input >= 4) {
            return ADVANCED;
        }
        else {
            return BEGINNER;
        }
    }
}

示例用法是:

final String input = "5";
KnowledgeLevel level = KnowledgeLevel.fromUserInput( Integer.parseInt(input) );

这比您的实施有一些优势:

  1. 重复次数少,因为我使用范围>=而不是明确提及所有整数
  2. 它分离了接收用户输入并将其转换为知识级别的顾虑。
  3. 它将整数映射放置在易于重用的位置。

答案 1 :(得分:0)

您可以使用Map存储评级到枚举值的映射:

Map<String, Wissenstand> ratingToWissenstand = new HashMap<>();

ratingToWissenstand.put("0", Wissenstand.Beginner);
ratingToWissenstand.put("1", Wissenstand.Beginner);
ratingToWissenstand.put("2", Wissenstand.Beginner);
ratingToWissenstand.put("3", Wissenstand.Beginner);
ratingToWissenstand.put("4", Wissenstand.Fortgeschrittener);
ratingToWissenstand.put("5", Wissenstand.Fortgeschrittener);
ratingToWissenstand.put("6", Wissenstand.Fortgeschrittener);
ratingToWissenstand.put("7", Wissenstand.Pro);
ratingToWissenstand.put("8", Wissenstand.Pro);
ratingToWissenstand.put("9", Wissenstand.Pro);
ratingToWissenstand.put("10", Wissenstand.GrandMaster);

knowledge = ratingToWissenstand.get(eWissen.getText().toString());
if (knowledge == null) {
    // Handle invalid eWissen-text value
}

可以将地图设为静态字段并仅初始化一次。然后,您只需在代码中调用get -

答案 2 :(得分:0)

int value = Integer.parseInt(eWissen.getText().toString());
if(value < 4){
    knowledge = Wissenstand.Beginner;
}else if(value < 7){
    knowledge = Wissenstand.Fortgeschrittener;
}else if(value < 10){
    knowledge = Wissenstand.Pro;
}else{
    knowledge = Wissenstand.GrandMaster;
}

答案 3 :(得分:0)

尝试下面的伪代码。 您可以为知识定义一个包含所有可能答案的数组。 然后,验证选项是1-10的适当范围内的数字。 最后,如果选择的选项在proiper范围内,则从数组或其他条件中指定知识

Wissenstand knowledges[] ={ Wissenstand.Beginner,Wissenstand.Beginner,Wissenstand.Beginner,Wissenstand.Beginner,Wissenstand.Fortgeschrittener,Wissenstand.Fortgeschrittener,Wissenstand.Fortgeschrittener,Wissenstand.Pro,Wissenstand.Pro,Wissenstand.GrandMaster};

int option = -1;
try{
    option=Integer.getInt(eWissen.getText().toString()); 
}
catch(Exception e){
}
if (option>0 && option <=knowledge.size()){
    knowledge=knowledges[option];
}
else{
    uWissen.setText("Fehler gefunden!");
    uWissen.getResources().getColor(android.R.color.holo_red_dark);
                pWarung.setText("Gib eine Zahl von 0 bis 10 ein!\n0,5-er Schritte sind nicht erlaubt!\nWeitere Informationen kannst du der Legende entnehmen!");
    pWarung.getResources().getColor(android.R.color.holo_red_light);
}