2014-11-06 3 views
1

내 프로그램을 만드는 방법을 이해하는 데 어려움이 있습니다. 이 프로그램은 다음과 똑같아 야합니다 :2D 배열을 사용하여 학년 계산기 만들기

Number of students: 3 

Number of exams : 3 

Enter student's data (first name follow by exam scores): 

Joe 85 88 93 

Mike 90 100 97 

Bill 50 68 73 

Name E1  E2  E3  Grade 


Joe 85  88  93  88.666666666667 

Mike 90  100 97  95.666666666667 

Bill 50  68  73  63.666666666664 

저는 자바 강의를 처음 소개 했으므로 이번 주에 Arrays를 배웠습니다.

내 코드는 지금까지와 유사합니다.

import java.util.Scanner; 

public class GradeCalcWithArrays { 
    public static void main(String[] args) { 

     Scanner s = new Scanner(System.in); 
     int students = 0; 
     int exams = 0; 

     System.out.println("Number of students: "); 
     students = s.nextInt(); 
     String names[] = new String[students]; 

     System.out.println("Number of exams: "); 
     exams = s.nextInt(); 
     int scores[][] = new int[students][exams]; 

     for (int i, j = 0;;) { 
      System.out 
        .println("Enter student's data (first name followed by exams scores):"); 
      String studentnames = s.nextLine(); 
      studentnames = names[3]; 
      int e1 = s.nextInt(); 
      e1 = scores[0][0]; 
      int e2 = s.nextInt(); 
      e2 = scores[0][2]; 
      int e3 = s.nextInt(); 
      e3 = scores[0][3]; 

     } 

    } 
} 

이러한 배열에 대한 도움이 필요합니다. 나는 내가 입력하려고하는 방식으로 뭔가에 있다고 생각한다. 그러나 일단 선생님이 사용해야 할 이중 배열을 찾았 으면 나는 잃어 버렸고 배열에 입력하는 방법을 모른다. 어떤 도움이라도 대단히 감사합니다.

또한 지금까지 내 프로그램의 출력은 : 그 도움도 주어집니다 방법에 대한 요인 인 경우 이클립스를 사용하고

Number of students: 3 

Number of exams: 3 

Enter student's data (first name follow by exam scores): 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3 
    at GradeCalcWithArrays.main(GradeCalcWithArrays.java:25) 

.

+0

어레이 ('numbers') = ** 3 ** 다음 요소가'번호 [0] ','번호 [1]'및 '숫자 [2] '. –

답변

0

배열 인덱스는 0부터 시작합니다. name은 3 개 요소를 수용 할 수있는 String 배열이므로 유효한 인덱스는 0-2입니다. 잘못된 위치 인 에 String (studentnames)을 저장하려고합니다. 따라서 ArrayOutOfBounds 예외가 발생합니다.

그래서 코드가 같아야 길이

import java.util.Scanner; 

public class GradeCalcWithArrays { 
    public static void main(String[] args) { 

     Scanner s = new Scanner(System.in); 
     int students = 0; 
     int exams = 0; 

     System.out.println("Number of students: "); 
     students = s.nextInt(); 
     String names[] = new String[students]; 

     System.out.println("Number of exams: "); 
     exams = s.nextInt(); 
     int scores[][] = new int[student][exams]; 

     for (int i = 0;i<students; i++) { 
      System.out.println("Enter student "+ i+1 +" data (first name followed by exams scores):"); 
      names[i] = s.nextLine(); 

      for(int j=0;j<exams;j++) 
      { 
       scores[i][j] = s.nextInt(); 
      } 

     } 
    //Rest of your code to print the table goes here 
    } 
} 
+0

어떻게하면이 문제를 해결할 수 있습니까? 이 문제없이 내 이름을 입력 할 수 있어야합니다. 배열'String students = new String [students];를 만들면 이것이 항상 문제가되는 것입니까? – Daniel

+0

@ 대니얼, 늦어서 죄송합니다. 문제는 'String students = new String [students];를하고,'students '가 3이면 유효한 위치는'students [0] ','students [1] '이고, '와'students [2]'가 아니라'students [2]'가 될 수 있습니다. 이것은 배열 색인이 제 대답에서 언급 한 것처럼 0에서 시작하지 않기 때문입니다. 유효하지 않은 위치 인'students [3]'에 접근하므로 ArrayOutOfBounds Exception을 얻습니다. 3 이외의 숫자를 입력 할 때 코드가 작동하지 않으므로 입력 값을 받아들이려면 루프를 사용해야합니다. –

+0

해당 코드를 도와 주셔서 감사합니다. 코드를 출력하는 방법에 대해 궁금합니다. 배열을 사용하여 성적을 평균하는 방법을 알지 못합니다. 출력 방법이 올바르지 않기 때문에 프로그램이 작동하지 않습니다. – Daniel