プログラムがこのforループに到達して実行しようとすると、エラーが発生します
for (int m = 0; m < students; m++){
allScores = allScores + scores[m];
学生はintとして宣言され、allScoresはscores[]配列と同様にdoubleとして宣言されました。
これはエラーメッセージです:
スレッド「main」の例外java.lang.ArrayIndexOutOfBoundsException:2 at Lab4.main(Lab4.java:51)
51行目はfor(int m = 0;m<学生;m++)行です
編集:
これは私のコード全体です。scores[]配列を正しく実行していない可能性があります。
import java.util.*;
import java.text.*;
public class Lab4 {
public static void main(String[] args){
Scanner s= new Scanner(System.in);
String input;
int students;
int d=1;
double allScores = 0;
char [] answerKey= { 'B' , 'D' , 'A' , 'A' , 'C' , 'A' , 'B' , 'A' , 'C' , 'D' , 'B' , 'A' };
char [] userAnswers = new char[answerKey.length];
DecimalFormat df = new DecimalFormat("#0.0");
System.out.print("how many students are in the class? ");
input = s.nextLine();
students=Integer.parseInt(input);
String [] name = new String[students];
double [] scores = new double[students];
for (int j = 0; j < students; ++j)
{
int correctAnswers=0;
System.out.print("Enter name of student " + (j + 1) + ": ");
name[j] = s.nextLine();
System.out.print("Enter quiz score answers :");
String line = s.nextLine().toUpperCase();
for (int k = 0; k < answerKey.length; k++) {
userAnswers[k] = line.charAt(k);
}
for (int i = 0; i < userAnswers.length; i++)
{
if(userAnswers[i] == answerKey[i])
{
correctAnswers++;
}
}
System.out.println(name[j]);
System.out.println((df.format((((float)(correctAnswers) / answerKey.length)) * 100)) + "%");
scores [d] = ((float)((correctAnswers) / answerKey.length) * 100);
d++;
}
System.out.println("the high score is " + "and the low score is " );
for (int m = 0; m < scores.length; m++){
allScores = allScores + scores[m];
}
System.out.println("Average is:" + ((allScores/students)));
}
}
編集:
申し訳ありませんが、51行目が間違っていました
scores [d] = ((float)((correctAnswers) / answerKey.length) * 100);
編集:
新しいコードでエラーメッセージが表示されなくなりましたが、スコアの平均化が機能していないようです。
import java.util.*;
import java.text.*;
public class Lab4 {
public static void main(String[] args){
Scanner s= new Scanner(System.in);
String input;
int students;
int d=1;
double allScores = 0;
char [] answerKey= { 'B' , 'D' , 'A' , 'A' , 'C' , 'A' , 'B' , 'A' , 'C' , 'D' , 'B' , 'A' };
char [] userAnswers = new char[answerKey.length];
DecimalFormat df = new DecimalFormat("#0.0");
System.out.print("how many students are in the class? ");
input = s.nextLine();
students=Integer.parseInt(input);
String [] name = new String[students];
double [] scores = new double[students + 1];
for (int j = 0; j < students; ++j)
{
int correctAnswers=0;
System.out.print("Enter name of student " + (j + 1) + ": ");
name[j] = s.nextLine();
System.out.print("Enter quiz score answers :");
String line = s.nextLine().toUpperCase();
for (int k = 0; k < answerKey.length; k++) {
userAnswers[k] = line.charAt(k);
}
for (int i = 0; i < userAnswers.length; i++)
{
if(userAnswers[i] == answerKey[i])
{
correctAnswers++;
}
}
System.out.println(name[j]);
System.out.println((df.format((((float)(correctAnswers) / answerKey.length)) * 100)) + "%");
scores [d] = ((float)((correctAnswers) / answerKey.length) * 100);
d++;
}
System.out.println("the high score is " + "and the low score is " );
for (int m = 0; m < scores.length; m++){
allScores = allScores + scores[m];
}
System.out.println("Average is:" + ((allScores/students)));
}
}