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

スレッド「メイン」での例外 java.lang.ArrayIndexOutOfBoundsException: 2 at Array.main(Array.java:41)

プロセスが完了しました。

(先程お世話になった方々に改めてお礼申し上げます)

こんにちは、このプログラムで別の問題が発生しました。上記の出力は多少間違っています。アレイがうまく機能していません。3年生の名前はメジャー試験のはずなのですが、なぜか動かず引っかかってしまいます。また、2 年生が成績を入力できるように値をリセットする方法を知りたいです。繰り返しになりますが、私は 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ます。どちらもユーザー入力に由来します。

その例外が発生するnよりも大きい場合。n1

あなたの場合、n4 であり、n12 であるべきなので、例外が発生します。


forループを使用するように変更するn1

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

または初期arrayCritrn

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

行= crits[i+1];`Critsで配列を台無しにしています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

コードを見ると、構造がこれにうまく従っていないことがわかります。基準配列を変更しないでください。配列内で指している場所 (つまり、インデックス) のみを変更してください。

このコンテキストでは、より意味のある変数名を使用するとnumStudents便利です。これを行うと、物事がクリーンアップされ、問題が明らかになります。numCriteriastudentIndexcriteriaIndexn, n1, i, j

于 2013-10-16T18:51:37.353 に答える
0

終わり近くのその行:

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

そうじゃないかな

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

間違った配列制限を使用しています。

于 2013-10-16T14:58:49.423 に答える