0

したがって、このプログラムでは、ユーザーが 10 個のスコアを入力し、それらのスコアを次の行に昇順に出力できるようになっています。何らかの理由でスコアを入力できますが、次の行は入力を昇順にソートするのではなく、0 で埋められています。理由はわかりませんが、どんな入力でも役に立ちます。

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);

    System.out
            .println("Enter up to 35 scores between 0 and 100, -1 to stop:");

    int[] score = new int[35];
    int count = 0;
    int sum = 0;
    String scores = "";

    for (int i = 0; i < score.length; i++) {
        score[i] = keyboard.nextInt();
        if (score[i] >= 0) {

            scores = scores + score[i] + "     ";
            count++;
            sum = sum + score[i];
        } else
            i = score.length + 1;

    }

    for (int i = 1; i < score.length; i++) {
        int x;
        int temp;

        x = score[i];
        temp = score[i];
        for (x = i - 1; x >= 0 && score[x] > temp; x--) {
            score[x + 1] = score[x];
        }
        score[x + 1] = temp;
    }

    System.out.printf("The %d scores you entered are: \n%s", count, scores);
    System.out.println();
    System.out.printf("The %d scored sorted in nondecreasing order are:\n",
            count);
    int k=1;
    for (k=1; k <= count; k++) {
        if (k % 11 == 0) {
            System.out.println();
        } else {
            System.out.printf("%5d", score[k]);
        }
    }

    for (int i = 1; i <= count; i++) {
        if (i % 11 == 0) {
            System.out.println();
        } else {
            System.out.printf("%5d", score[i]);
        }

        for (int j = 1; j < count; j++) {
            if (Integer.compare(score[i], score[j]) < 0) {
                int temp = score[i];
                score[i] = score[j];
                score[j] = temp;
            }
        }
    }
4

1 に答える 1

1

デバッグの学習に関するコメントに同意します。あなたがコードを書いた方法は、あなたが非常に初心者であることは明らかなので、ここにあなたを助ける答えがあります. あなたの質問に答えるために、あなたのプログラムにはいくつかの論理的な誤りがあります。

break を使用するだけで、最初の for ループから抜け出すことができます。そのため、else ステートメントに break; と書くだけです。i = score.length + 1; の代わりに

次に...間違いは、配列全体をソートしていることです...ただし、-1を入力する前に5または6要素しか入力していない可能性があるため、最初の5または6要素には値が含まれ、そのスコア配列の他のすべての値は0になります. 配列全体をソートすると、明らかに 0 が配列の前に、実際のスコアが配列の後ろになります。これがあなたの質問に対する答えです。i = 0 から i < カウントまで並べ替えます。これでいくつかの問題は解決しますが、他にも多くの問題があります。

他にもいくつかの問題があります。デバッグして調べていただけると幸いです。

于 2013-04-26T02:26:38.367 に答える