2017-02-17 3 views
-1

最近、ハッカーの挑戦にぶつかり、特定の配列のintのペアを見つけなければなりません。 ArrayListをアプローチとして使用します。 誰でもこのコードのエラーを修正できますか?ArrayList内の整数のペアの数を見つける

がエラー:スレッドの例外 "メイン" java.lang.IndexOutOfBoundsException:インデックス:10、サイズ:9 java.util.ArrayList.rangeCheckで

(ArrayList.java:653)は、Javaで

.util.ArrayList.remove(ArrayList.java:492)Solution.main(Solution.java:32)

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     int n = in.nextInt(); 
     int c[] = new int[n]; 
     for(int c_i=0; c_i < n; c_i++){ 
      c[c_i] = in.nextInt(); 
     } 
     int count=0; 

     Arrays.sort(c); 

     ArrayList<Integer> ch = new ArrayList<>(); 

     for(int c_i=0; c_i < n; c_i++){ 
      ch.add(c[c_i]); 
     } 

     for(int i=0;i<ch.size();i++){ 
      int a = ch.get(i); 
      int b=ch.indexOf(a); 
      if(b<0) 
       continue; 
      else{ 
       ch.remove(a); 
       ch.remove(b); 
       count++; 
       for (int j=0;j<ch.size()-2;j++){ 
        ch.add(j,ch.get(j+2)); 

       } 
      } 
      System.out.println(count); 
     } 

    } 

そのを発見しながら、上記のアプローチを編集およびはaのインデックスを提供し、常に1つの要素しか削除しないので、arrayListが空になるまで、最初の要素が何であっても削除され、次に一致するペア要素を検索するというアプローチを試みました。

while(ch.size()!=0){ 
     int a = ch.get(0); 
     ch.remove(0); 
     int b = ch.indexOf(a); 
     if(b<0){ 

      for (int j=0;j<ch.size()-1;j++) 
       ch.add(j,ch.get(j+1)); 
      continue; 
      } 
     else{ 

      ch.remove(b); 
      count++; 
      for (int j=0;j<ch.size()-2;j++) 
       ch.add(j,ch.get(j+2)); 
      } 
    } 



Error: Terminated due to timeout 
+1

'a = ch.get(i)'ならば、 'b'は' i'と等しくなります。 –

+0

この 'ch.remove(a);でエラーが発生します。プログラムの' a'は 'Arraylist'のサイズより大きい数値です。 – BeginnersSake

+0

配列から要素を削除し、検索に支障をきたさないようにする他の方法があります。また、私は要素を削除しているので、別の再帰的なペアの方法で来ることはありません。 –

答えて

1
int a = ch.get(i); 

これは、このインデックスaに格納された値を削除しますI

ch.remove(a); 

位置で値を取得します。値aは、ArrayListサイズよりも大きい可能性があります。

これはあなたが間違っているところです。それをコメントアウトしてみてください。

+0

私は、ペアの要素がある場合、そのペアを削除して、検索と削除のプロセスを再び開始するというアプローチを使用しています。このようにして、再帰的な対を見つける可能性が排除される。 –

関連する問題