4

2 つの配列を作成する必要があるプロジェクトがあります。1 つは生徒の名前を保持し、もう 1 つは生徒のスコアを保持します。ユーザーは配列のサイズを入力し、BubbleSort を使用して配列を並べ替える必要があります (ハイスコアを一番上に配置します)。プロジェクトを開始し、スコアの最初の配列を作成しました。バブル ソートを正常に実行し、成績をソートしました。名前の配列を作成する方法がわかりません。名前の配列を Grades 配列の BubbleSort に対応させるにはどうすればよいですか?

ここに私がこれまでに持っているコードがあります。

import java.util.Scanner;

public class Grades {

public static void main(String[]args){

{
Scanner GradeIn = new Scanner(System.in);
Scanner NameIn = new Scanner(System.in);
System.out.print( "How many students are there? " );
int[]GradeArray = new int[GradeIn.nextInt()];
String[]nameArray = new String[GradeIn.nextInt()];

for( int i=0 ; i<GradeArray.length ; i++ ) 
{
System.out.print( "Enter Grade for Student " + (i+1) + ": " );
GradeArray[i] = GradeIn.nextInt();
System.out.print( "Enter Name of Student " + (i+1) + ": " );
nameArray[i] = NameIn.nextLine();
}

bubbleSort(GradeArray, nameArray);


for( int i : GradeArray ) System.out.println( i );
System.out.println();

}
}

private static void bubbleSort(int[]GradeArray, String[] nameArray){

int n = GradeArray.length;
int temp = 0;
String temp2;

for(int i=0; i<n; i++){
 for(int j=1; j<(n-i);j++){

  if(GradeArray[j-1]<GradeArray[j]){
   //swap
   temp=GradeArray[j-1];
   GradeArray[j-1]=GradeArray[j];
   GradeArray[j]=temp;

    temp2=nameArray[j-1];
    nameArray[j=1]=nameArray[j];
    nameArray[j]=temp2;


   }
  }
 }
}
}

また、成績をダブルに変更するにはどうすればよいですか? Int から始めて、すべてを double に変更しようとすると、「Found Double、expected Int」というエラーが表示されます。

教授が求めていること: 学生の数、学生の名前、およびスコアを入力するようにユーザーに促し、スコアに従って降順で名前を出力するプログラムを作成してください。

追加情報:

2 つのアレイが必要になります。ひもを保持するための 1 つ。学生のスコアを保持する別の。(ダブルス)

配列のサイズはユーザーが入力します。

main() メソッドで配列をソートする必要があります。BubbleSort (http://www.java-examples.com/java-bubble-sort-example) を使用することをお勧めしますが、別の方法としてではありません。ヒント: grades 配列をソートする際に、グレードに従って names 配列をソートする必要があります。

最後に、names 配列を並べ替えた後に出力するメソッド (void printAnswer(String [] names)) を含める必要があります。

4

1 に答える 1

2

カスタム オブジェクトを作成します。これがオブジェクト指向プログラミングの全体的な考え方です。名前と学年はありません。名前学年を持つStudent人がいます。次に、あなたが適切だと思う方法で生徒を操作します。

public class Student {
    private String name;
    private int grade;

    public Student(String name, int grade) {
        this.name = name;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }
    public int getGrade() {
        return grade;
    }
}

次に、あなたが持っている場所

int[]GradeArray = new int[UserIn.nextInt()];

代わりにこれを行います:

Student[] studentArray = new Student[UserIn.nextInt()];

残りの変更は、それがどのように機能するかに慣れるための演習として残しておきます。ただし、データを読み込むたびに a を作成する必要があるため、 aStudent[]は でいっぱいであることに注意してください。nullnew Student(name, grade)


代替ソリューション

上記はこれを行う正しい方法です。以下の回答から何も学ばないでください。Java を学習する目的全体が無効になるためです。上記の解決策が受け入れられる場合は、教授にメールを送信します。

String nameそうは言っても、各グレードスワップを行うと、配列でまったく同じスワップを行うことができます。

// change method signature
private static void bubbleSort(int[] gradeArray, String[] nameArray){

  int n = gradeArray.length;
  int temp = 0;
  String temp2;

  for(int i=0; i<n; i++){
    for(int j=1; j<(n-i);j++){

      if(gradeArray[j-1]<gradeArray[j]){
        //swap
        temp=gradeArray[j-1];
        gradeArray[j-1]=gradeArray[j];
        gradeArray[j]=temp;

        // New code begin
        temp2=nameArray[j-1];
        nameArray[j-1]=nameArray[j];
        nameArray[j]=temp2;
        // New code end
      }
    }
  }
}

繰り返しますが、学校を卒業した後は、現実の世界でこれを行わないでください。それははるかに遅く、はるかに混乱します。

于 2012-11-28T23:06:15.813 に答える