0
 import java.io.*;

public class Array {
public static void main(String args[]) throws IOException {
    BufferedReader
    inpt = new BufferedReader(new InputStreamReader(System. in ));

    System.out.println("How many criteria?");//ask for how many records
    int n = Integer.parseInt(inpt.readLine());// store in n

    int[] arrayCrit = new int[n];//create array with size n
    String[] crits = new String[n];

        //**as you mentioned in edit you want to take all the input before printing**      
    for (int i = 0; i < n; i++) 
    {
      System.out.print("Criteria: ");
      crits[i] = inpt.readLine();

      System.out.print("Percentage: ");
      arrayCrit[i] = Integer.parseInt(inpt.readLine());      
    }

    System.out.println("How many students' record?");
    int n1 = Integer.parseInt(inpt.readLine());

    int [] arrayCritr = new int [n1];
    String [] arraySname = new String [n1];

    for(int i=0; i<n1; i++){
    String name;
    System.out.print("Student Name: ");
    arraySname[i] = inpt.readLine();
    for(int j=0; j<n; j++){ 
    System.out.print("Grade in "+ crits[i] + ": ");
    arrayCritr[j] = Integer.parseInt(inpt.readLine());
    crits[i]=crits[i+1];
  }
  crits[i]=crits[i-i];
}
}
}
  • 多少个标准?4
  • 标准:测验
  • 百分比:25
  • 标准:Att
  • 百分比:15
  • 标准:主要考试
  • 百分比:40
  • 标准:小考试
  • 百分比:20
  • 多少学生的记录?2
  • 学生姓名:韦恩
  • 测验成绩:90
  • Att成绩:80
  • Att成绩:70

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 2 at Array.main(Array.java:41)

过程完成。

(再次感谢之前帮助过我的人)

再次您好,我遇到了这个程序的另一个问题。上面的输出有些错误。阵列运行不佳。三年级的名字应该是 Major Exam,但不知何故它一动不动,卡在那里。另外我想知道如何重置该值以便第二个学生输入成绩。再一次,我需要你的帮助,因为我是 Java 新手并且我正在学习它。谢谢你。

编辑:我需要输出这样的东西..

  • 多少个标准?4
  • 标准(1):测验
  • 百分比:25
  • 标准(2):出勤率
  • 百分比:25
  • 标准(3):主要考试
  • 百分比:25
  • 标准(4):小考试
  • 百分比 25
  • 多少学生的记录?2
  • 学生姓名(1):哈罗德
  • 测验成绩:90
  • 出勤等级:85
  • 专业考试成绩:95
  • 小试成绩:89
  • 学生姓名(2):简
  • 测验成绩:80
  • 出勤等级:75
  • 专业考试成绩:87
  • 小试成绩:93

这正是我需要展示的......我是否要求做一件不可能的事情?

4

4 回答 4

2

您从 0 迭代到non arrayCritr,但您使用 进行初始化arrayCritrn1这两者都来自用户输入。

if比你会得到那个例外n更大。n1

在你的情况下,n是 4,n1应该是 2,所以你会得到一个例外。


要么改变你的 for 循环使用n1

for(int j=0; j<n1; j++){ 

arrayCritr或初始化n

int [] arrayCritr = new int [n];
于 2013-10-16T14:56:33.017 回答
0

接近尾声的那条线:

for(int j=0; j<n; j++){ 

难道不应该

for(int j=0; j<n1; j++){ 

您使用了错误的数组限制。

于 2013-10-16T14:58:49.423 回答
0

您的 arrayCritr 大小为 n1,但您使用的索引从 0 到 n。当您的 n > n1 时,您将遇到此错误。更改以下代码:

arrayCritr[j] = Integer.parseInt(inpt.readLine());

arrayCritr[i] = Integer.parseInt(inpt.readLine());

在嵌套循环中也有 arrayCritr 没有意义,所以你最好把它移得更高。

于 2013-10-16T15:12:48.513 回答
0

Crits你把你的数组弄乱了crits[i]= crits[i+1];`

很快,所有条件都将被最后一个条件覆盖。您已经开始在输出的第一个位中看到这一点:

Student Name: Wayne
Grade in Quiz: 90
Grade in Att: 80
Grade in Att: 70

但实际上,您需要清楚每个数组的含义,每个循环计数器的含义。使用伪代码执行此操作很有帮助:

get number of criteria

get each criteria as input

get number of students

for each student in students:
  output student name
  for each c in criteria:
    output criteria for this student

当您查看您的代码时,您会发现您的结构并没有很好地遵循这一点。不要更改条件数组 - 仅更改您在数组中指向的位置(即索引)。

在这种情况下,使用更有意义的变量名会很有帮助:numStudentsand numCriteria, studentIndexandcriteriaIndex代替n, n1, i, j. 一旦你这样做了,事情就会清理干净,问题就会变得明显。

于 2013-10-16T18:51:37.353 回答