限制数字开关/如果选项?

时间:2012-07-19 19:16:41

标签: java

小免责声明我是Java新手,这是我尝试编写的第一个真正的程序。

我目前正在编写一个包含3个类的程序。第一个是带有JComboBox,4个JButtons和20个JTextFields的GUI。

第二个从JComboBox框中获取信息,并使用它来使用一组if语句为4个JButton提供标签。

第三个填充JTextFields时,单击其中一个JButtons,具体取决于单击的按钮以及使用一组switch语句在JComboBox中的选择。

前两个班的工作正常,第三个工作正常,直到我输入x量的开关,然后我开始出错。

我的第三类代码的一个小例子是

switch (hiddenText) {
        case "Abecean Longfin":
        if (command.equals("Weakness to Frost")){
        gui.r1.setText("Elves Ear");
        gui.r2.setText("Fire Salts");
        gui.r3.setText("Ice Wraith Teeth");
        gui.r4.setText("White Cap");
        gui.r5.setText("");
        gui.r6.setText("");
        gui.r7.setText("");
        gui.r8.setText("");
        gui.r9.setText("");
        gui.r10.setText("");
        gui.r11.setText("");
        gui.r12.setText("");
        gui.r13.setText("");
        gui.r14.setText("");
        gui.r15.setText("");
        gui.r16.setText("");
        gui.r17.setText("");
        gui.r18.setText("");
        gui.r19.setText("");
        gui.r20.setText("");

        }
        if (command.equals("Fortify Sneak")){
        gui.r1.setText("Beehive Husk");
        gui.r2.setText("Frost Mirriam");
        gui.r3.setText("Hawk Feathers");
        gui.r4.setText("Human Flesh");
        gui.r5.setText("Powdered Mammoth Tusk");
        gui.r6.setText("Purple Mountain Flower");
        gui.r7.setText("");
        gui.r8.setText("");
        gui.r9.setText("");
        gui.r10.setText("");
        gui.r11.setText("");
        gui.r12.setText("");
        gui.r13.setText("");
        gui.r14.setText("");
        gui.r15.setText("");
        gui.r16.setText("");
        gui.r17.setText("");
        gui.r18.setText("");
        gui.r19.setText("");
        gui.r20.setText("");
        }
        if (command.equals("Weakness to Poison")){
        gui.r1.setText("Bleeding Crown");
        gui.r2.setText("Chaurus Eggs");
        gui.r3.setText("Deathbell");
        gui.r4.setText("Giant Lichen");
        gui.r5.setText("Pine Thrush Egg");
        gui.r6.setText("Sabre Cat Tooth");
        gui.r7.setText("Small Antlers");
        gui.r8.setText("");
        gui.r9.setText("");
        gui.r10.setText("");
        gui.r11.setText("");
        gui.r12.setText("");
        gui.r13.setText("");
        gui.r14.setText("");
        gui.r15.setText("");
        gui.r16.setText("");
        gui.r17.setText("");
        gui.r18.setText("");
        gui.r19.setText("");
        gui.r20.setText("");
        }
        if (command.equals("Fortify Restoration")){
        gui.r1.setText("Cyrodilic Spadetail");
        gui.r2.setText("Salt Pile");
        gui.r3.setText("Small Antlers");
        gui.r4.setText("Small Pearl");
        gui.r5.setText("");
        gui.r6.setText("");
        gui.r7.setText("");
        gui.r8.setText("");
        gui.r9.setText("");
        gui.r10.setText("");
        gui.r11.setText("");
        gui.r12.setText("");
        gui.r13.setText("");
        gui.r14.setText("");
        gui.r15.setText("");
        gui.r16.setText("");
        gui.r17.setText("");
        gui.r18.setText("");
        gui.r19.setText("");
        gui.r20.setText("");
        }
        break;

总共有92个案例,每个案例都有4个if语句,程序运行正常,直到我得到57个案例和2个if语句然后我在IDE的类选项卡标题中得到一个错误符号(使用NetBeans)但不是在代码本身内。

当我编译并运行代码时,我得到一个错误框,显示“一个或多个项目编译错误”,但如果我选择运行,程序将运行正常,就我所见。

我尝试过以各种方式编写代码。最初使用if语句并且最初将class 2和3作为同一个类,并且在达到x选择量时总是会出现此错误。

在以前的版本中,我有时会得到错误符号出现在IDE中的类选项卡标题中而不是像往常一样在代码中但是当试图运行程序时它根本不运行并且给出了一些类路径错误现在似乎无法重现,所以无法发布确切的代码。

从我做过的测试开始。删除代码的不同部分,似乎在添加x个选项时会发生这种情况。我可以添加第52个case和第3个if语句并且出现错误但是如果我删除了前一个if语句,那么有52个案例和2个if语句仍然然后一切都很好。

从实验开始,似乎我可以使用的开关/ if语句的数量有限,虽然从理论上讲我理论上可以有无限的数量?

所以我的问题是,我可以使用的开关/ if语句的数量是否有限制,或者当我输入x个开关/ if语句时,是否有其他事情导致错误?

1 个答案:

答案 0 :(得分:1)

您需要将数据与代码分开。将所有数据粘贴在地图和列表的组合中,并使用一些简单的通用代码来更新gui元素。

// setup data code
List<String> elements = Arrays.asList("Elves Ear", "Fire Salts", ...);
Map<String,List<String>> elementMap;
elementMap.put("Weakness to Frost");

// setup ui code
List<String> elements = elementMap.get(command);
initUI(elements);

public void initUI(List<String> elements) {
  gui.r1.setText(elements.get(0));
  // ...
}

请注意,您可以将所有文本字段保留在列表中,然后更新代码为:

public void initUI(List<String> elements) {
  for(int i = 0; i< textFields.size(); ++i) {
    textFields.get(i).setText(elements.get(i));
  }
}

一般来说,如果你发现自己编写了大量重复代码,那么你可能做错了。

另外,正如@thatidiotguy在评论中指出的那样,当你前进时,你可以将数据移出代码,就像我的例子一样,进入某种单独的配置文件。