0

小さな免責事項私はJavaを初めて使用します。これは、私が作成しようとしている最初の実際のプログラムです。

私は現在、3つのクラスでプログラムを書いています。1つ目は、JComboBox、4つのJButton、および20のJTextFieldを備えたGUIです。

2つ目は、JComboBoxボックスから情報を取得し、それを使用して、一連のifステートメントを使用して4つのJButtonにラベルを付けます。

3つ目は、クリックされたボタンと一連のswitchステートメントを使用したJComboBoxでの選択に応じて、JButtonの1つがクリックされたときにJTextFieldsにデータを入力します。

最初の2つのクラスは正常に機能し、3番目のクラスはx個のスイッチを入力するまで正常に機能し、その後エラーが発生し始めます。

3番目のクラスの私のコードの小さな例は

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を使用)にエラーシンボルが表示されますが、コード内には表示されません。自体。

コードをコンパイルして実行すると、「1つ以上のプロジェクトがエラーでコンパイルされました」というエラーボックスが表示されますが、とにかく実行することを選択した場合、プログラムは私が見た限りでは正常に実行されます。

私はさまざまな方法でコードを書いてみました。たとえば、元々ifステートメントを使用し、元々同じクラスとしてクラス2と3を持っていたのですが、x個の選択肢に達すると常にこのエラーが発生します。

以前のバージョンでは、エラーシンボルがIDEのクラスタブタイトルに表示され、通常のコード内では表示されないことがありましたが、プログラムを実行しようとすると、まったく実行されず、クラスパスエラーが発生しました。現在再現されているようですので、正確なコードを投稿することはできません。

私が行ったテストから、たとえばコードのさまざまなセクションを削除すると、x個の選択肢が追加されたときに発生するようです。つまり、52番目のケースと3番目のifステートメントを追加するとエラーが表示されますが、前のifステートメントを削除すると52のケースと2つのifステートメントがあり、それでも問題がなければすべてです。

実験から、私が使用できるスイッチ/ 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 に答える