2015-02-13 7 views
-3

Я только начинаю java, но я не совсем понимаю, что случилось. Я предполагаю, что это связано с моим массивом строк. Когда я запускаю его, после первого ввода, я получаю сообщение об ошибке:Проблема с массивами и строками

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 
    at CurveBreaker.main(CurveBreaker.java:13) 

Любая помощь будет очень признательна.

import java.util.Scanner; 

public class CurveBreaker { 
    public static void main(String[]args){ 
     Scanner input = new Scanner(System.in); 

     System.out.println("Enter the number of students."); 
     int i = input.nextInt(); 
     int[] StudentGrades = new int[i]; 

     String[] Students = new String[i]; 

     System.out.println("Enter the name of the student."); 
     Students [i] = input.next(); 
     System.out.println("Enter the student's score."); 
     StudentGrades[i] = input.nextInt(); 
     String Best = Students [i]; 
     int BestNumb = StudentGrades [i]; 
     i--; 
     for(i=i; i>0;i--){ 
      System.out.println("Enter the name of the student."); 
      Students [i] = input.next(); 
      System.out.println("Enter the student's score."); 
      StudentGrades[i] = input.nextInt(); 
      if(StudentGrades[i] > BestNumb){ 
       BestNumb = StudentGrades[i]; 
       Best = Students [i]; 
      } 

     } 

     System.out.println("The highest score was " + BestNumb + " which was  achieved by " + Best); 
    } 
} 
+0

Какие значения вы указали? – Ascalonian

+1

Проверьте, что это 'for (i = i; i> 0; i--) {' делает ... – MadProgrammer

+0

Ошибка, похоже, исходит от 'Students [i] = input.toString();'. Эта строка не имеет никакого смысла. Если кто-то ввел '10', самым большим индексом, который вы можете использовать, является' 9' – Ascalonian

ответ

1

Java массивы имеют индексы от 0 к i-1. Вы пытаетесь использовать 1 для i

+0

О, Боже мой, спасибо !!! –

1

Таким образом, вы запрашиваете у пользователя числа элементов ...

System.out.println("Enter the number of students."); 
int i = input.nextInt(); 
int[] StudentGrades = new int[i]; 

String[] Students = new String[i]; 

Хорошо, это круто, но тогда вы ...

System.out.println("Enter the name of the student."); 
Students[i] = input.toString(); 

Теперь нет двух вещей, связанных с этим, один, input.toString() не хочет запрашивать у пользователя ввода, он просто собирается присвоить результаты toString классу студентов у элемента i

2, i по-прежнему равен значению, введенному пользователем для начала. Например, если они входят 5, вы пытаетесь присвоить значение элементу 5, который не существует, так как Java массивы 0 основе (0-4)

Лучшее решение могло бы сделать что-то вроде ...

System.out.println("Enter the number of students."); 
int i = input.nextInt(); 
input.nextLine(); // This is important, it clears the carriage return from the buffer 
int[] StudentGrades = new int[i]; 
String[] Students = new String[i]; 

for (int index = 0; index < i; index++) { 
    System.out.println("Enter the name of the student."); 
    Students[i] = input.nextLine(); 
    System.out.println("Enter the student's score."); 
    StudentGrades[i] = input.nextInt(); 
    input.nextLine(); 
    // calculate stuff here... 
} 

Но, вы, кажется, хотите, чтобы ввести их в обратном порядке, в порядке, использовать что-то вроде ...

for (int index = i - 1; index >= 0; index--) { 

вместо ...

Вы также можете посмотреть The Arrays tutorial

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