2014-11-06 69 views
1

我很难理解如何去做我的程序。该程序应该看起来像这样:使用二维数组创建一个年级计算器

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 

我在介绍Java课程,所以我刚刚学习了本周的数组。

我的代码看起来像这样到目前为止。

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) 

我使用Eclipse,如果这是如何帮助也给出一个因素。

+0

阵列('numbers')与长度= ** 3 **具有以下元素:'号码[0]','号码[1]',和'号码[2]'。 – 2014-11-06 02:34:15

回答

0

数组索引从0开始。由于name是一个可容纳3个元素的String数组,因此有效索引为0-2。您尝试在name[3]中存储Stringstudentnames),这是一个无效的位置。因此,你会得到一个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 2014-11-06 02:31:01

+0

@丹尼尔,对不起,延迟。我编辑了代码。问题是,当你做'String students = new String [students];'如果'students'是3,那么有效的位置是'students [0]'''students [1] '和'学生'而不是'学生'[3]'。这是因为我的答案中提到了数组索引从0开始而不是1。你访问'学生[3]'这是一个无效的位置,因此,你会得到ArrayOutOfBounds异常。 除此之外,您必须使用循环来接受输入值,因为当输入3以外的任何数字时,您的代码将不起作用 – 2014-11-06 11:16:58

+0

非常感谢帮助我使用该代码。我想知道如何去输出代码呢?我不知道如何平均我的成绩,我的程序仍然无法正常工作,因为我的输出方法不正确。 – Daniel 2014-11-11 19:10:19