0

これは私が持っているものです:

import java.util.*;
import java.text.*;

public class Proj4 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        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;

        DecimalFormat df = new DecimalFormat("#0.0");

        do {
            System.out.print("Please enter the name of student " + student
                    + ": ");
            String line;
            line = s.nextLine().toUpperCase();
            names = line.split(" ");
            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 (student == 1) {
                        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();
                        }
                    } else if (student == 2) {
                        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 + 4] = 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 + 4] = s.nextInt();
                        }
                    }
                }
            }
            System.out.print("do you wish to enter another? (y or n) ");
            again = s.next();
            if (again.equalsIgnoreCase("y"))
                student++;
        } while (again.equalsIgnoreCase("y"));

        System.out.println("***Class Results***");
        System.out
                .println(names[1]
                        + ","
                        + names[0]
                        + "   "
                        + "Exam Percentage: "
                        + ((float) (exams[0] + exams[1] + exams[2] + exams[3]) / (MAX_EXAM * 3 + MAX_FINAL))
                        * 100 + "%");
        if (student == 2)
            ;
        System.out
                .println(names[3]
                        + ","
                        + names[2]
                        + "   "
                        + "Exam Percentage: "
                        + ((float) (exams[4] + exams[5] + exams[6] + exams[7]) / (MAX_EXAM * 3 + MAX_FINAL))
                        * 100 + "%");
        if (student == 3)
            ;
        System.out
                .println(names[5]
                        + ","
                        + names[4]
                        + "   "
                        + "Exam Percentage: "
                        + ((float) (exams[8] + exams[9] + exams[10] + exams[11]) / (MAX_EXAM * 3 + MAX_FINAL))
                        * 100 + "%");
        if (student == 4)
            ;
        System.out
                .println(names[7]
                        + ","
                        + names[6]
                        + "   "
                        + "Exam Percentage: "
                        + ((float) (exams[12] + exams[13] + exams[14] + exams[15]) / (MAX_EXAM * 3 + MAX_FINAL))
                        * 100 + "%");
    }
}

私のプログラムは私が望む/必要な方法で正確に実行されているようですが、唯一の問題は、プログラムを再度実行できるようにすると、次のように同じ行に2つの文字列が出力されることです。

Please enter the name of student 2: Please enter score for Exam 1:

これを修正するために何をすべきかわかりません。私のコードには、2回目、おそらく3回目と4回目だけで混乱するものがありますか?

4

2 に答える 2

1

ifsの後にセミコロンを削除します

if (student == 3)
            ; // <- remove it
    System.out.println(//...

Javaはそれを次のように理解しているからです

if (student == 3){}
System.out.println(//...

変化する

System.out.print("do you wish to enter another? (y or n) ");
again = s.next();

System.out.print("do you wish to enter another? (y or n) ");
again = s.nextLine();

nextは改行マークを消費しないので、後で使用するnextLinenext、この改行マークのみが消費され、別の命令に進みます。同じルールがに適用されnextIntます。


学生名の配列を格納するには、文字列の2次元配列を使用できます

String[][] names = new String[MAX_STUDENTS][];

学生番号に基づいて各行に学生名を保存します

names[student] = line.split(" ");

最初の学生の名を取得するには、このフォームを使用する必要があります

names[0][0]; //you probably know that indexes in array starts from zero

すべての生徒の名前を取得するには、各行を繰り返し、次に列を繰り返すことができます

for(int stId=0; stId<student; stId++){
   for(int nameNumber=0; nameNumber<names[stId].length; nameNumber++){
      // print names[stId][nameNumber]`
于 2013-03-01T23:35:39.093 に答える
0

文字列を新しい行に印刷する場合は、printの代わりにprintlnを使用するか、文字列に改行文字を含めます。

于 2013-03-01T23:39:54.773 に答える