繁体   English   中英

使用Java Array问题

[英]Issue using Java Array

 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在Array.main(Array.java:41)

流程已完成。

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

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

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

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

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

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

如果n大于n1 ,那么你会得到那个例外。

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


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

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

或用n初始化arrayCritr

int [] arrayCritr = new int [n];

那条线接近尾声:

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

不应该

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

您正在使用错误的数组限制。

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

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

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

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

你在Crits crits[i] = crits [i + 1];`行中弄乱你的Crits数组

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

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 一旦你这样做,事情就会清理干净,问题就会变得明显。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM