1

基本的に私が全体的にやろうとしていることは次のとおりです。

あなたの教授の 1 人が、あなたがプログラミングの専門知識を新たに獲得したと聞いて、採点に役立てるために使用できる単一のプログラムを作成するように依頼しました。教授は 3 つの 50 点の試験と 1 つの 100 点の最終試験を行います。プログラムは、生徒の名前、ファーストネーム、ラストネーム (Bob Smith など)、生徒の 3 つの試験の点数、および 1 つの最終的な試験の点数 (すべて整数) の入力を求めるプロンプトを表示します。クラスのサイズは学期ごとに異なりますが、100 が上限です (定数として宣言します)。

計算を行ったり出力を表示したりする前に、すべての生徒の情報を読み込みます。3 つの試験の点数が 0 ~ 50 点で、最終が 0 ~ 100 点であることを確認してください。必要に応じて簡単に更新できるように、最小値と最大値を定数として宣言しました。無効な場合は、エラー メッセージを表示し、ユーザーがその無効なスコアを再入力できるようにします。すべての学生情報が読み込まれたら、各学生の名前を LASTNAME、FIRSTNAME (すべて大文字) の形式で表示し、学生の試験のパーセンテージ (すべての試験の合計と最終 / 可能な合計) を小数第 1 位まで表示し、学生の最終成績を表示します。

しかし、ユーザー入力を配列に割り当てる方法を理解するのに苦労しています(または、姓と名のために2つの配列?)が、何をすべきかについてかなり迷っています。これが私が今持っているものです:

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";

int [] exams = new int[4];
int student = 1;

do
{

    String [] names = new String[student];
        System.out.print("PLease enter the name of student " + student + ": " );
        names[student-1] = s.nextLine();
        for ( int i = 0; i < exams.length; 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]<0||exams[0]>50)||(exams[1]<0||exams[1]>50)||(exams[2]<0||exams[2]>50)){
                    System.out.println("Invalid enter 0-50 only...");
                    System.out.print("Please re-enter score: ");
                    exams[i] = s.nextInt();
                }
                else if(exams[3]<0||exams[3]>100){
                    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.nextLine();
        if(again!="y")
            student++;
}while (again.equalsIgnoreCase ("y"));
}
}

私のコードにも何か問題がある場合は、それを助けてください。

4

1 に答える 1

2

まず、要件で指定されている定数を宣言します。

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.  

次に、配列の使用のみが許可されているため、2つの配列を宣言します。1つは学生の名前を保持し、もう1つはテストのスコアを保持します。このため、それらは異なるタイプになります。String配列を初期化して、学生の最大数にします。各学生は4つの試験スコアを持つため、テストスコア配列を4*MAX_STUDENTSに初期化します。

String[] student_names = new String[MAX_STUDENTS];
int[] exam_scores = new int[MAX_STUDENTS * 4];

新しい学生を読み込むときは、その学生の名前をstudent_names配列の新しいインデックスに入れます。次に、後続の各テストスコア(3つの試験、1つの最終)を読みながら、exam_scores配列を段階的に入力します。

スコアを印刷するときは、印刷されたexam_scores配列の最後のインデックスを追跡する変数を保持します。そうすれば、(配列を反復処理しているときに)別の学生に移動するときに、exam_scores配列のどこで中断したかがわかります。

これを行うには他の(より良い)方法があります(たとえば、リストを使用するのが最善ですが、配列を使用した場合でも、これよりも巧妙になる可能性があります)。これまでに何を学んだかわからなかったので、プログラムを実装するための最も基本的な方法を選択しました。

于 2013-03-01T05:35:33.650 に答える