0

この質問が何百万回も聞かれていることを私は知っています。そして、数時間じっと見つめていない人には、解決策がかなり明白になると思います. しかし、範囲外の例外の頭や尾を作ることはできません。エラーは次のとおりです。

exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 207493, Size: 207493
    at java.util.ArrayList.rangeCheck(ArrayList.java:604)
    at java.util.ArrayList.get(ArrayList.java:382)
    at affysureselect.AffySureSelect.main(AffySureSelect.java:92)
Java Result: 1

おそらくこれはarraylistのサイズが原因で発生しているのではないかと考えていましたが、その場合は、取得ではなく追加時にエラーが発生すると予想していました。死にかけているコードは次のとおりです。

    String chrompos;
    ArrayList<String> chromnum = new ArrayList<String>();
    while ((input2 = sbuff.readLine()) != null) {
        prse = input2.split("\t");
        chromnum.add(prse[0]);
        ...
        chrompos = prse[7];
     }
    int cnt = 0;
    int cnt2 = 0;
    if (chromnum.get(cnt).equals(chrompos)) { // line causing my untimely death
      end = Integer.parseInt(chromposend.get(cnt2));
      start = Integer.parseInt(chromposstart.get(cnt2));
       ...

私も追加しようとしました:

if (cnt <= chromnum.size()) { //this line
  if (chromnum.get(cnt).equals(chrompos)) { /before the dying line

しかし、とにかく、追加ではなく、取得時に死亡します。私は何が欠けていますか?

4

7 に答える 7

1

cnt をインクリメントする場合は、常に chromnum.size() よりも小さいことを確認してください。

そのはず-

if (cnt < chromnum.size())
于 2013-04-05T03:48:43.703 に答える
0

Pascal のように 1 ベース: 米国、英語圏のカナダ。
C/Java のような 0 ベース: ケベック、(ほとんどの?) ヨーロッパ。

それが答えです。問題は、エレベータのフロアがどのようにインデックス化されているかです。

于 2013-04-05T05:34:26.193 に答える
0

リストは 0 から始まることに注意してください。したがって、N 項目のリストがある場合、最後の項目は N - 1 になります (0 が最初の要素で、1 が 2 番目などなので)。

だからあなたは書くべきです

if (cnt < chromnum.size()) {

それ以外の

if (cnt <= chromnum.size()) {
于 2013-04-05T04:02:56.677 に答える
0

索引 i が存在しません。まで常に繰り返す必要がありますlist.size() - 1

于 2013-04-05T03:49:08.060 に答える
0

iのサイズも の場合ArrayList、インデックスにアクセスできませんi。アクセス可能な最大インデックスはi-1です。したがって、のサイズが であっても、番目のインデックスIndexOutOfBoundsExceptionにアクセスしようとしています。207493List207493

cntのサイズ以下に制限するには、チェックを入れてくださいlist

于 2013-04-05T03:49:30.107 に答える
0

コードによると、次のように見えるため、ifループで

 chromnum.get(cnt) and cnt is initialized to 0.

そのため、最も可能性の高い問題は、コードが while ループに入らず、while ループの後に SOP を配置し、arraylist のサイズをチェックすることです。

于 2013-04-05T03:50:17.687 に答える
0

等号を削除し、

if (cnt < chromnum.size()) { //this line
      if (chromnum.get(cnt).equals(chrompos)) {

お役に立てれば幸いです:)

于 2013-04-05T03:51:40.630 に答える