0

要素に一致するようにいくつかの文字列配列リストをループしようとしていますが、配列の長さが同じではないというエラーが発生します。たくさんのサンプルを含む1つの配列リストと、ほんの数個のサンプルを含む2番目の配列リストがあります。最初の配列リストを検索して、2番目の配列リストの値と比較および照合したいと思います。2つの配列リストが一致する場所を見つけたら、最初のインデックスを取得して3番目に適用します。これは、サンプルとの座標を保持する手段を保持します(リマインダーとして最初に格納されます)。問題が発生する場所に至るまでのコードが含まれていますが、可能な限り簡潔に保つようにしています。基本的に、私は誰かが私が得ているエラー、またはそれらを比較するためのより良い方法のいずれかを説明できることを望んでいます。

//this is how they are declared
ArrayList<String> pit = new ArrayList<String>(); int h =0;
...etc...
//a file is read in
while((sLine=inpt.readLine())!=null){
      splitn=sLine.split(delim2);
      //splits the file into two different ArrayLists, names and means
      pit.add(splitn[0]); pit2.add(splitn[2]);
}
String b="mean"; int pitn = 0;
//remove column titles from those two lists
while(pitn<pit.size()){
     if(pit2.get(pitn).equals(b)){
        pit.remove(pitn); pit2.remove(pitn);
     }
     else{
          ++pitn;
     }
}
//match a pattern to the file names that were entered
ArrayList<String> sampleNum = new ArrayList<String>();          
for(String inp : filenames) {
     Matcher matt=patt.matcher(inp);
     while(matt.find()){
           if(matt.groupCount() >= 2) {
              //match the first part of the file name
              samplenum = matt.group(1);
              //match the second grouping to paneltype
              paneltype = matt.group(2);
           }
           //add sample names to another arraylist
           sampleNum.add(samplenum);
     }
    **//I wish to search through the pit values for a place where it matches sampleNum
    //Problematically I am getting an error
    //for the length of pit** 
     for(int inx=0;inx<pit.size();inx++){
        //if the value of pit equals the value of sampleNum
        if(pit.get(inx).equals(sampleNum.get(h))){
           //add the value, of the same index, from pit2 to the mncov arraylist
           mncov.add(pit2.get(inx));
           h++;
        }
     }

java.lang.IndexOutOfBoundsException:インデックス:2、サイズ:2

sampleNumはファイル名から取得されるため、2つのファイルを入力しているので、これは理にかなっています。2つのファイル=2つのファイル名

at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at consistentbelow.ConsistentBelow.main(ConsistentBelow.java:**72**) 

72行目は次の行です。

(pit.get(inx).equals(sampleNum.get(h))){

ですから、ここで何が問題なのか全くわかりません。何か明らかなものが欠けているような気がしますが、失明するまでそれを熟考しています。私は助けを得るのに十分な情報を与えたと思いますが、それが役立つのであれば、それ以上与えることを嘆くことはありません。

4

1 に答える 1

1

あなたの問題はのサイズの問題ではなく、のサイズの問題だと思いpitますsampleNum。一致するものが見つかるたびにインクリメントhしていますが、hがsampleNumの全長よりも長くインクリメントするのを止めるものは何もありません(つまり、すべてが一致し、一致しようとし続けます)。簡単な修正は次のようなものかもしれません

for(int inx=0; inx<pit.size() && h < sampleNum.size(); inx++){
    if(pit.get(inx).equals(sampleNum.get(h))){
       //add the value, of the same index, from pit2 to the mncov arraylist
       mncov.add(pit2.get(inx));
       h++;
    }
}

最も洗練された修正ではありませんが、私が信じるエラーを排除する必要があります。また、これはあなたが期待している出力を正確に持っていないかもしれないと思いますが、あなたが何をしようとしているのかについてのより良い考えなしに言うのは難しいです。

于 2012-09-04T20:02:20.720 に答える