2013-07-21 5 views
0

Так что я ОЧЕНЬ новичок в программировании. Я беру онлайн-курс, и я понимаю код, который я ввел, но он работает неправильно. Я постоянно получаю ошибку «index out of bounds», которая не имеет смысла, поскольку я сохранил только 5 значений от 0 до 4. Вы можете определить проблему? Благодаря!Программа Java Array для реализации пузырьковой сортировки

public class LEGGO 
{ 
public static void main(String args[]) 
{ 
    int j, i, l, m; 
    int This[] = new int[5]; 
    This[0] = 8; 
    This[1] = 4; 
    This[2] = 24; 
    This[3] = 14; 
    This[4] = 56; 
    for (j=1; j<5; j++) 
    { 
     for(l=0; l<5-j; l++) 
     { 
      if (This[l]<This[l+1]) 
      { 
       i=This[l]; 
       This[l]=This[l+1]; 
       This[l+1]=i; 
      } 
     } 
    } 
    for(m=0; m<5; m++); 
     System.out.print(This[m]); 
    } 
} 

ответ

0

У вас есть точка с запятой после последней для контура delcaration, удалите его, и он будет работать ....

for(m=0; m<5; m++) 
1

Ваша трассировка стека покажет вам строку, которая вызывает исключение.

Редактировать: Проблема - это точка с запятой в конце цикла for и отсутствие '{'. Когда вы выполняете m ++, он увеличит m до 5 и затем будет использоваться в вашем println.

Вы также можете избежать этих проблем, используя ограниченный диапазон переменных. Если вы инициализируете m внутри цикла for, это не было бы в пределах области действия в следующей строке.

Кроме того, в соответствии с обычаями Java кода для лучшей читаемости: http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html

0

Добро пожаловать к программированию, я надеюсь, что вы наслаждаетесь проблемой.

Вы сделали синтаксическую ошибку. Линия для (m = 0; m < 5; m ++); должно быть действительно для (m = 0; m < 5; m ++) { a вы пропустили замыкающую скобу }.

Это очень неудачно, потому что это означает, что программа ведет себя совсем по-другому, чем вы могли ожидать, но компилятор java делает то, что сказано.

В java (и многих других языках программирования) полутолла означает «конец оператора». Это означает, что, поскольку вы поставили один из циклов for, что происходит, это то, что он просто выполняет цикл for, не делая ничего другого. Это означает, что переменная m подсчитывается до 5. После этого программа затем пытается попробовать прочитать массив ->Это [m], которое равно Это [5]. В качестве массива Это пять элементов длиной, а массивы начинают отсчет в нуле. Элемент Этот [4] является последним элементом вашего массива.

Я использовал комментарии для обозначения закрывающих фигурных скобок в вашей программе, чтобы было легче увидеть, что было не так. Если вы используете java IDE, это упрощает просмотр таких проблем.

Это, однако, сомнительный урок программирования - поскольку, пока он учит вас, как используются массивы и для утверждений, уже давно признано, что вы не должны кодировать подобное, поскольку это вызывает такие проблемы. Опытный программист, не являющийся новичком в программировании, мог бы избежать этой ошибки, используя [api] коллекции Java (http://docs.oracle.com/javase/7/docs/technotes/guides/collections/overview.html).

public class LEGGO{ 
    public static void main(String args[]){ 
      int j, i, l, m; 
      int This[] = new int[5]; 
      This[0] = 8; 
      This[1] = 4; 
      This[2] = 24; 
      This[3] = 14; 
      This[4] = 56; 

      for (j=1; j<5; j++){ 
       for(l=0; l<5-j; l++){ 
         if (This[l]<This[l+1]){ 
          i=This[l]; 
          This[l]=This[l+1]; 
          This[l+1]=i; 
         }// end if 
       } //end for l 
      } //end for j 

      for(m=0;m<5;m++){ 
       System.out.print(This[m]); 
      }// end for m 
    }//end main 
}//end class 

Счастливый хак хаки.

+0

ПРИМЕЧАНИЕ: этот приносит слезы на глаза. Назначение для подразделения Engineering Computing 101 в 1989 году состояло в том, чтобы написать пузырьковый корабль в Фортрее на VAX. –

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