0

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

我目前正在编写一个包含 3 个班级的程序。第一个是带有一个 JComboBox、4 个 JButton 和 20 个 JTextField 的 GUI。

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

第三个填充 JTextFields 当其中一个 JButton 被单击时,取决于单击的按钮和使用一组 switch 语句在 JComboBox 中的选择。

前 2 类工作正常,第三类工作正常,直到我输入 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 语句并且最初将类​​ 2 和 3 作为同一个类,并且在达到 x 数量的选择时我总是会遇到此错误。

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

从我已经完成的测试中。例如,删除不同的代码部分似乎是在添加 x 数量的选项时发生的。即我可以添加第 52 个案例和第 3 个 if 语句并且出现错误,但是如果我删除了之前的 if 语句,那么有 52 个案例和 2 个 if 语句,然后一切正常。

从实验来看,我可以使用的 switch/if 语句的数量似乎是有限的,尽管从环顾四周我理论上可以有无限的数量?

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

4

1 回答 1

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 在评论中指出的那样,随着您的前进,您可以像我的示例一样将数据从代码中移出并移到某种单独的配置文件中。

于 2012-07-19T19:19:49.687 回答