コードにいくつか問題があります。これがプログラムの全体的な目標です。
あなたの教授の 1 人が、あなたがプログラミングの専門知識を身に付けていると聞いて、採点に役立てるために使用できる単一のプログラムを作成するように依頼しました。教授は 3 つの 50 点の試験と 1 つの 100 点の最終試験を行います。あなたのプログラムは、学生の名前、Firstname Lastname (つまり、Bob Smith)、学生の 3 つの試験の点数、および 1 つの最終的な試験の点数 (すべて整数) として入力するようにユーザーに要求します。クラスのサイズは学期ごとに異なりますが、100 が上限です (定数として宣言します)。
計算を行ったり出力を表示したりする前に、すべての生徒の情報を読み込みます。3 つの試験の点数が 0 ~ 50 点で、最終が 0 ~ 100 点であることを確認してください。必要に応じて簡単に更新できるように、最小値と最大値を定数として宣言しました。無効な場合は、エラー メッセージを表示し、ユーザーがその無効なスコアを再入力できるようにします。すべての学生情報が読み込まれたら、各学生の名前を LASTNAME、FIRSTNAME (すべて大文字) の形式で表示し、学生の試験のパーセンテージ (すべての試験の合計と最終 / 可能な合計) を小数第 1 位まで表示し、学生の最終成績を表示します。
これは私が持っているものです:
import java.util.*;
import java.text.*;
public class Proj4 {
public static void main(String[] args){
Scanner s= new Scanner(System.in);
String input;
String again = "y";
final int MAX_STUDENTS = 100;
final int MIN_EXAM = 0;
final int MAX_EXAM = 50;
final int MIN_FINAL = 0;
final int MAX_FINAL = 100;
String[] names = new String[MAX_STUDENTS];
int [] exams = new int[MAX_STUDENTS * 4];
int student = 1;
do
{
System.out.print("PLease enter the name of student " + student + ": " );
for (int k = 0; k < 1; k++) {
names[k] = s.nextLine().toUpperCase();
}
for ( int i = 0; i < 4; i++){
if(i==3){
System.out.print("Please enter score for Final Exam: ");
exams[i] = s.nextInt();
}
else{
System.out.print("Please enter score for Exam " + (i+1) + ": ");
exams[i] = s.nextInt();
if((exams[0]<MIN_EXAM||exams[0]>MAX_EXAM)||(exams[1]<MIN_EXAM||exams[1]>MAX_EXAM)||(exams[2]<MIN_EXAM||exams[2]>MAX_EXAM)){
System.out.println("Invalid enter 0-50 only...");
System.out.print("Please re-enter score: ");
exams[i] = s.nextInt();
}
else if(exams[3]<MIN_FINAL||exams[3]>MAX_FINAL){
System.out.println("Invalid enter 0-100 only...");
System.out.print("Please re-enter score: ");
exams[i] = s.nextInt();
}
}
}
System.out.print("do you wish to enter another? (y or n) ");
again = s.next();
if(again!="y")
student++;
}while (again.equalsIgnoreCase ("y"));
System.out.println("***Class Results***");
System.out.println(names[1] + "," + names[0] + " " + "Exam Percentage: "+ ((exams[0]+exams[1]+exams[2]+exams[3])/(MAX_EXAM*3+MAX_FINAL)));
}
}
私が抱えている問題は次のとおりです。
- 最初の生徒だけでなく、ユーザーが入力したテストのスコアを割り当てる方法を考え出すと、1 人だけに正しく設定されていると思いますが、2 番目の生徒に移ると問題が発生します。
何故か線引きが出来ない
System.out.print("do you wish to enter another? (y or n) "); again = s.next();
では何も入力できません。y ではなく n ではありません。そのため、プログラムは実質的にそこで終了します。以前とまったく同じように実行したことがあり、機能しているため、意味がありません。
それ以外に、私のコードで見られる他の問題がある場合は、それらを指摘すると非常に役立ちます。
ありがとうございました
編集-
に変更した後、私が抱えている新しい問題
if(!again.equalsIgnoreCase("y"))
student++;
}while (again.equalsIgnoreCase ("y"));
今は入力できますが、 y を入力すると、次の行が次のように出力されます
生徒 1 の名前を入力してください: 試験 1 のスコアを入力してください:
なぜ、または何を変更して修正する必要があるのか わかりません。何か提案はありますか?