2016-12-21 5 views
1

プログラミングとJavaの試しに新しい私はこの配列を作成し、私にこのエラーを与えます。タスクはすべての正と負の数を数え、pArrとnArrという新しい配列に置きます。その後、重複を数え、それらを何回繰り返して書くのか、誰かが私を助けることができますか?java.lang.ArrayIndexOutOfBoundsException:8

public static void main(String[] args) { 
     int[] array = {12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87}; 
     int brPoz=0, brNeg=0; 

     for(int a=0; a<array.length; a++){ 
      if(array[a]>0) 
       brPoz++; 
      else if (array[a]<0) 
       brNeg++; 
     } 
     int[] pArr = new int[brPoz]; 
     int[] nArr = new int[brNeg];  

     for (int i = 0; i < array.length; i++) { 
      if (array[i] > 0) { 
       pArr[i] = array[i]; 
      } 
     } 

     for (int i = 0; i < array.length; i++) { 
      if (array[i] < 0) { 
       nArr[i] = array[i]; 
      } 
     } 


     Arrays.sort(array); 
     Arrays.sort(pArr); 
     Arrays.sort(nArr); 
     System.out.println(java.util.Arrays.toString(array)); 
     System.out.println(java.util.Arrays.toString(pArr)); 
     System.out.println(java.util.Arrays.toString(nArr)); 


      for (int i = 0; i < array.length; i++) { 
      for (int j = i + 1; j < array.length; j++) { 
       if ((array[j])==array[i]) { 
        System.out.println("Duplikati su: "+array[j]); 
       } 
      } 
     } 
+0

で達成することができました'pArr [i]'は範囲外です。 – Zircon

+0

'ArrayList'を使用すると、これはずっと簡単になります –

答えて

1

まず、すべての正と負の数を計算します(BTW:0を無視します...正の数ですか)。次に、それらのカウントに基づいて新しい配列を作成します。

brPozとbrNegは元の配列の要素数より少なくなります。そのため、結果の配列で既存のインデックスのみを使用するようにする必要があります。

これは `array`を使用するので、それらの両方よりも大きいので、あなたは、` pArr`と `nArr`のインデックスを追跡するための規則を考え出す必要があります

int pArrIndex = 0; 
    for (int i = 0; i < array.length; i++) { 
     if (array[i] > 0) { 
      pArr[pArrIndex++] = array[i]; 
     } 
    } 

    int nArrIndex = 0; 
    for (int i = 0; i < array.length; i++) { 
     if (array[i] < 0) { 
      nArr[nArrIndex++] = array[i]; 
     } 
    } 
+0

今、私は望んでいた値を保存してくれてありがとう、ちょっと残っている問題を助けてくれてありがとう、私は何回も重複した回数を書き出す必要があります。 – LjubisaK

関連する問題