2013-12-18 2 views
0

, поэтому я новичок в кодировании, и я использую Drjava.
Я получил задание от своего класса, чтобы попросить пользователя ввести целые числа в два массива (пользователь должен вводить целые числа от наименьшего до самого большого в каждом массиве).
Затем мне нужно объединить оба массива и заказать новый массив от наименьшего до самого большого.
Я думаю, что я понял, как это сделать, и он будет скомпилирован просто отлично, но он продолжал говорить, что после исключения кода было введено исключение OutOfBoundsException и введены некоторые числа.Почему он продолжает говорить «ArrayIndexOutOfBoundsException» в моем коде?

Почему он продолжает это делать и как его исправить?

Спасибо.

class Main{ 

    public static void main (String str[]) throws IOException { 
      Scanner scan = new Scanner (System.in); 

      System.out.println("Enter the values for the first array, up to 10000 values, enter a negative number to quit"); 

      int[] array1= new int[10000]; 
      int x=0; 
      int x1=0; 
      int v=1; 
      for(int where=1; x>=0; where++) { 
      x= scan.nextInt(); 
      array1[where]=x; 
      x1++; 
      if((array1[where]<array1[where-1])&&(x>=0)){ 
       System.out.println("ERROR: Array not in correct order"); 
       x=-326;} 
      } 

      System.out.println("Enter the values for the second array, up to 10000 values, enter a negative number to quit"); 

      int[] array2= new int[10000]; 
      int y=0; 
      int y1=0; 
      int w=1; 
      for(int wher=1; y>=0; wher++) { 
      y= scan.nextInt(); 
      array2[wher]=y; 
      y1++; 
      if((array2[wher]<array2[wher-1])&&(y>=0)){ 
       System.out.println("ERROR: Array not in correct order"); 
       y=-326;} 
      } 

      if(x!=-326) { 
      System.out.println("First Array: "); 
      int where=x1; 
      for(v=1; v<(where); v++) { 
      System.out.println(array1[v]); }} 

      if(y!=-326) { 
      System.out.println("Second Array: "); 
      int wher=y1; 
      for(w=1; w<(wher); w++) { 
      System.out.println(array2[w]); }} 

      int[] array3= new int[v+w]; 
      int a=0; 
      int b=0; 
      while((a+b)<(v+w-3)) { 
      while(array1[v-a]>array2[w-b]) { 
       array3[w+v-a-b]=array1[v-a]; 
       a++;} 
      while(array2[w-b]>=array1[v-a]) { 
       array3[v+w-a-b]=array2[w-b]; 
       b++;} 
      } 

      if((y!=-326) && (x!=-326)) { 
      System.out.println("Merged Array: "); 
      int c=0; 
      while((v+w-c)>=2){ 
      System.out.println(array3[v+w-c]); 
      c++;     } 
      } 

    } 

} 
+0

вы должны использовать более простые переменные. Я видел, что кто-то использует «где» в качестве целочисленной переменной внутри цикла for в первый раз: -P –

+0

FYI, если вы используете соответствующий тег языка (т.е. [tag: java]), блок кода выделит ваш синтаксис. – thegrinner

+0

Одна вещь, о которой вы можете подумать, - это именовать переменные чем-то логичным. Последнее, что я проверил - одна буква не является большим именем переменной, если только вы не написали алгоритм алгебры ... –

ответ

2

В ваш первый цикл, когда where = 10000, он пытается получить доступ array1[10000], который не существует. Таким образом, вы пытаетесь получить доступ к индексу, который находится «вне границ».

Вам необходимо убедиться, что вы не пытаетесь получить доступ к индексу, который не существует.

Поскольку вы определяете array1 = new int[10000], это значит, что вы можете получить доступ только к индексу 0 - 9999. Все, что прошло array1[9999], выдает ту же ошибку «ArrayIndexOutOfBounds». Думаю, это очень четкое сообщение об ошибке.

+0

@Matthew Wu FYI .... массивы нулевые индексируются. Это означает, что в вашем массиве из 10000 элементов используются индексы от 0 до 9999 – rrirower

+0

@Matthew Wu. Примите ответ, который решает вашу проблему. Этот ответ выше, по-видимому, правильный, по крайней мере, вы можете сделать это, чтобы вознаградить его принятым ответом за решение вашей проблемы .. – Rawa

Смежные вопросы