1

なぜこのエラーが発生するのかを理解しようとしています。私のコードは次のとおりです。

 ArrayList lowestQuant = new ArrayList();
    for (int i = 0; i < aRes1.size(); i++) {
        int var = Math.min(casesQuant.get(i), mainboardQuant.get(i));
        int var2 = Math.min(var, cpuQuant.get(i));
        int var3 = Math.min(var2, ramQuant.get(i));
        int var4 = Math.min(var3, graphicsQuant.get(i));
        lowestQuant.add(var4);
        System.out.println(aRes1.get(i) +" quantity: "+lowestQuant.get(i));
    }

aRes1長さ 8 コンピューター システムのコンピューター システムの配列リストです。

すべてのコンピューター システムで最小数量のコンポーネントを見つける必要があるため、Math.minすべてのArrayList-indexルックアップが必要になります。このコードは、最低数量のコンポーネントを提供する必要があります。しかし、どういうわけか、8番目のコンピューターシステムに到達する前に停止します。それは最初のもので完全に機能し7ます。誰が問題が何であるか教えてもらえますか? これらのエラーの多くを調べて設定しようとしましたがi=1.size()-1/+1何も役に立ちません。

前もって感謝します!エラー:

 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 7, Size: 7
            at java.util.ArrayList.RangeCheck(ArrayList.java:547)
            at java.util.ArrayList.get(ArrayList.java:322)
            at databasen.Database.ComputerSystems(Database.java:242)
            at databasen.Database.menuLVL1(Database.java:70)
            at databasen.Database.mainMenu(Database.java:61)
            at databasen.Database.main(Database.java:37)
    Java Result: 1

明確にするために:使用されるすべての配列リストは、データベースから作成されているため、同じ長さです。配列リストがどのように作成されるかを見ることができるように、いくつかのコードを次に示します::

ArrayList aRes1 = new ArrayList();
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("SELECT catchyname FROM computersystems");
        System.out.printf("Computer sytems:\n");
        while (rs.next()) {
            String answer = rs.getString("catchyname");
            aRes1.add(answer);
        }

        // Cases
        ArrayList aRes2 = new ArrayList();
        rs = st.executeQuery("SELECT cases FROM computersystems");
        while (rs.next()) {
            String answer = rs.getString("cases");
            aRes2.add(answer);
        }
        ArrayList<Integer> casesQuant = new ArrayList<Integer>();
        for (int i=0;i<aRes2.size();i++){
            ResultSet rs2 = st.executeQuery("SELECT currentquantity FROM components "
                    + "WHERE name ="+"'"+aRes2.get(i)+"'");
            while (rs2.next()) {
                int answer2 = rs2.getInt("currentquantity");
                casesQuant.add(answer2);
            }
        }
4

4 に答える 4

1

配列リストのいずれかに7つの要素があります。行番号547と322を確認してみてください。あなたはどれがどれかについての考えを得るでしょう。

于 2012-03-23T21:49:53.133 に答える
1

Java はインデックス 0 から始まり、上に向かっていきます。サイズ 7 はインデックス 6 を意味します。 変更: (int i = 0; i < aRes1.size(); i++) 変更: (int i = 0; i < aRes1.size()-1; i++) 1 を引く問題を修正します。

于 2012-03-23T21:53:36.540 に答える
0

すべてが同じサイズではない複数の配列を使用していますが、すべての配列で1つの配列のインデックスを使用しています。これが例外の原因です。

于 2012-03-24T16:31:42.750 に答える
0

242 行目は " int var = Math.min(casesQuant.get(i), mainboardQuant.get(i));"

その前に次の行を追加します。

System.out.printf("Expected: #s, Cases: #s, Mainboards: #s#n", aRes1.size(), 
      casesQuant.get(i), mainboardQuant.get(i));

1 つの数値は、期待値より小さくなければなりません。

于 2012-03-23T22:14:07.053 に答える