0

クラスの課題に取り組んでいます。基本的に、学生の名前、現在の成績、および科目を表示するには、1 次元配列を使用する必要があります。コードは次のとおりです。

import java.util.*;
import java.util.Arrays;

public class sortStudents {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the number of students: ");
        int numofstudents = input.nextInt();
        String[] names = new String[numofstudents];
        int[] array = new int[numofstudents];
        String[] subject = new String[numofstudents];
        for(int i = 0; i < numofstudents; i++) {
            System.out.print("Enter the student's name: ");
            names[i] = input.next();
            System.out.print("Enter the student's score: ");
            array[i] = input.nextInt();
            System.out.print("Enter the subject: ");
            subject[i] = input.next();
        }
        selectionSort(names, array, subject);
        System.out.println(names[i] + array[i] + subject[i]);

    }
    public static void selectionSort(String[] names, int[] array, String[] subject) {
        for(int i = array.length - 1; i >= 1; i--) {
            String temp;
            String classTemp = " ";
            int currentMax = array[0];
            int currentMaxIndex = 0;
            for(int j = 1; j <= i; j++) {
                if (currentMax > array[j]) {
                    currentMax = array[j];
                    currentMaxIndex = j;
                }
            }       
                if (currentMaxIndex != i) {
                    temp = names[currentMaxIndex];
                    names[currentMaxIndex] = names[i];
                    names[i] = temp;
                    array[currentMaxIndex] = array[i];
                    array[i] = currentMax;
                    subject[currentMaxIndex] = subject[i];
                    subject[i] = classTemp;
                }
        }       
    }
}

22行目でコンパイル中にエラーが発生します。変数「i」がループ外で初期化されていないことが原因だと思います。しかし、変数「i」をループの外側に配置すると、配列が範囲外エラーになります。これを修正するための助けがあれば大歓迎です:)

PS 初めてのサイトなので、間違っていたらすみません。

4

2 に答える 2

0

これを行うとき:

System.out.println(names[i] + array[i] + subject[i]);

変数が存在する for ループの直後にあるため、i変数は存在しません。

あなたができることは、その周りに別の for ループを置くだけです:

for(int p =0; p < numOfStudents; p++)
{
 System.out.println(names[p] + array[p] + subject[p]);
}
于 2013-07-16T21:55:49.553 に答える
-1

到達すると、スコープに変数 System.out.println(names[i] + array[i] + subject[i]);はありません。i

  1. 入力するたびに情報を出力しようとしている場合は、そのコードを既存のforループ内に配置します。
  2. 最後に並べ替えられたリストを印刷しようとしている場合は、for別の変数を使用して別のループを作成し、配列を実行する必要があります。

    for(int j = 0; j < numOfStudents; j++) {
        System.out.println(names[i] + array[i] + subject[i]);
    }
    
于 2013-07-16T21:55:00.220 に答える