2015-11-12 2 views
1

, поэтому моя цель - написать цикл, который устанавливает newScores в oldScores, сдвинутый один раз влево, при этом элемент 0 скопирован в конец.Как решить этот массив и цикл? правильный вывод, но

edit1: так что моя главная проблема i инициализирована newScores [3] = oldScores [0]; но дело в том, что цикл for делает i = 4, когда нет oldScores [4] или newScores [4], но так как i intialized newScores [3] для oldScores [0] он компилируется и запускается, но проблема в том, что [4] не в массиве вообще ... как я могу избавиться от этой проблемы им так близко, но так далеко он пристанет мне

Ex:

If oldScores = {10, 20, 30, 40}, then newScores = {20, 30, 40, 10} 

забавная вещь, у меня есть правильный вывод, но на учебный веб-сайт im, использующий его, говорит мне, что у меня есть правильный вывод, но он также отображает эту «Ошибка выполнения (обычно из-за недопустимого доступа к массиву/вектору, деление на 0 и т. д.). Тесты прерваны».

public class StudentScores { 
    public static void main (String [] args) { 
     final int SCORES_SIZE = 4; 
     int[] oldScores = new int[SCORES_SIZE]; 
     int[] newScores = new int[SCORES_SIZE]; 
     int i = 0; 

     oldScores[0] = 10; 
     oldScores[1] = 20; 
     oldScores[2] = 30; 
     oldScores[3] = 40; 
     newScores[3] = oldScores[0]; 
     for(i=0; i<SCORES_SIZE-1; i++){ 
     newScores[i] = oldScores[i +1]; 
     } 

     for (i = 0; i < SCORES_SIZE; ++i) { 
     System.out.print(newScores[i] + " "); 
     } 
     System.out.println(); 

     return; 
    } 
} 
+0

Пожалуйста, поставите вопрос на соответствующем языке –

+0

Пожалуйста, отметьте ответ, который решил проблему. – Nate

ответ

0

В вашем втором цикл, вы приращение I до его использования, т.е. ++ я

Что это означает, я буду увеличен до вашего System.out в петле. Поскольку вы проиндексировали i до 0, первый индекс, который он будет печатать, имеет 1 (не 0). Он попытается распечатать

newScores[1] 
newScores[2] 
newScores[3] 
newScores[4] 

Последнее приведет к исключению (недопустимый индекс). Измените цикл для

for (i = 0; i < SCORES_SIZE; i++) { 

(где я инкрементируется после использования)

+0

О, ребята, я забыл упомянуть об этом упражнении.Единственное место, где я могу разместить свое решение сразу после строки oldScores [3] = 40; и перед строкой для (i = 0; i silversk8terz

+0

Я получаю правильный ответ, и он компилируется и запускается на моей IDE на jGrasp, но на веб-сайте обучения, в котором им используется (zybooks), он говорит, что у меня есть правильный ответ, но «Runtime error (обычно из-за недопустимого доступа к массиву/вектору, деление на 0 и т. д.). Тесты прерваны». поэтому в основном программа соответствует и работает по назначению, но учебный веб-сайт в основном говорит, что им что-то делать неправильно – silversk8terz

1

Вопрос находится во втором цикле, где у вас есть ++ я. i ++ и ++ у меня два разных значения. Вот ссылка, чтобы описать значения для вас. What is the difference between ++i and i++?. Если вы измените это, вы больше не должны получать ошибку. Ниже приведено изменение вашего кода.

public class StudentScores { 
    public static void main (String [] args) { 
    final int SCORES_SIZE = 4; 
    int[] oldScores = new int[SCORES_SIZE]; 
    int[] newScores = new int[SCORES_SIZE]; 
    int i = 0; 

    oldScores[0] = 10; 
    oldScores[1] = 20; 
    oldScores[2] = 30; 
    oldScores[3] = 40; 
    newScores[3] = oldScores[0]; 
    for(i=0; i<SCORES_SIZE-1; i++){ 
    newScores[i] = oldScores[i +1]; 
    } 

    for (i = 0; i < SCORES_SIZE; i++) { 
    System.out.print(newScores[i] + " "); 
    } 
    System.out.println(); 

    return; 
    } 
} 
0

Я заметил, что вы используете i ++ и ++ i неправильно.
Первый цикл: индекс массива newScores от 0 до 2 и каждый раз увеличивается 1 раз.
Второй цикл: вы пытаетесь напечатать newScores, но цикл использует ++ i. Это означает, что индекс newScores будет печататься от 1 до 3. => ошибка в индексе 3. Решение: заменить второй цикл по
for (i = 0; i < SCORES_SIZE - 1; i++)

0

Простое изменение, чтобы сделать ваш код работать

oldScores[0] = 10; 
     oldScores[1] = 20; 
     oldScores[2] = 30; 
     oldScores[3] = 40; 
     newScores[3] = oldScores[0]; 
     for(i=0; i<SCORES_SIZE-1; i++){ 
     newScores[i] = oldScores[i +1]; 
     } 
/* REMOVE THIS PART 
      for (i = 0; i < SCORES_SIZE; ++i) { 
      System.out.print(newScores[i] + " "); 
      } 
*/TILL HERE 

// USE THE FOLLOWING 
for (i = 0; i < SCORES_SIZE; i++) { 
    System.out.print(newScores[i] + " "); 
    } 
    System.out.println(); 

Поскольку вы увеличиваете значение до его использования, которое вызывает ошибку.

0

Чтобы преодолеть «Runtime error (обычно из-за недопустимого доступа к массиву/вектору, делить на 0 и т. Д.). Тесты прерваны». Я использовал инструкцию if/else:

for (i = 0; i < SCORES_SIZE; i++) 
    { 
     if (i == (SCORES_SIZE - 1)) 
     { 
     newScores[i] = oldScores[0]; 
     } 
     else 
     { 
     newScores[i] = oldScores[i + 1]; 
     } 
    }