使用Java Array问题

时间:2013-10-16 14:52:52

标签: java arrays

 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
  • 学生姓名:Wayne
  • 测验成绩:90
  • 评分:80
  • 评分:70

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

流程已完成。

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

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

编辑:我需要输出这样的内容..

  • 有多少条件? 4
  • 标准(1):测验
  • 百分比:25
  • 标准(2):出勤
  • 百分比:25
  • 标准(3):专业考试
  • 百分比:25
  • 标准(4):次要考试
  • 百分比25
  • 有多少学生的记录? 2
  • 学生姓名(1):Harold
  • 测验成绩:90
  • 出席年级:85
  • 专业考试成绩:95
  • 未成年人考试成绩:89
  • 学生姓名(2):Jane
  • 测验成绩:80
  • 出席年级:75
  • 专业考试成绩:87
  • 未成年人考试成绩:93

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

4 个答案:

答案 0 :(得分:2)

您在n上从0迭代到arrayCritr,但是您使用arrayCritr初始化n1,这两者都来自用户输入。

如果n大于n1,那么你将获得该异常。

在您的情况下,n为4,n1应为2,因此您将获得例外。


更改for循环以使用n1

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

或使用arrayCritr

初始化n
int [] arrayCritr = new int [n];

答案 1 :(得分:0)

接近结尾的那条线:

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

不应该是

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

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

答案 2 :(得分:0)

您的arrayCritr大小为n1,但您使用的索引从0到n。当你的n> n1然后你会有这个错误。更改以下代码:

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

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

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

答案 3 :(得分:0)

您正在弄清Crits = crits [i + 1];

行中的crits[i]数组

很快,所有标准都将被最后一个覆盖。你已经开始在第一个输出中看到它了:

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

当您查看代码时,您会发现您的结构并非如此。不要更改条件数组 - 仅在指向数组的位置(即索引)进行更改。

在此上下文中,使用更有意义的变量名称会很有帮助:numStudentsnumCriteriastudentIndexcriteriaIndex而不是n, n1, i, j。一旦你这样做,事情就会清理干净,问题就会明显。