-1

私のプログラムには、Surname、Forename、および結果の 3 つの配列があり、並べ替え配列を作成する必要があります Surname: Chris Forename: Charleton: Result: 54 Surname: Annett: forename: Lyle: result 67 姓のアルファベット順で並べ替えたい場合、姓だけでなく、すべてのフィールドを移動する必要があります。これは私が取り組んでいるバブルソートコードです

    int swap;
    boolean swapflag = true;
    //outer loop
    while (swapflag == true)
    {
        swapflag = false;
        //inner loop
        for (int index=0; index < (nums.length - 1); index++)
        {
            //swap routine
            if (nums[index]> nums[index + 1])
            {   //swap routine
                swap = nums[index];
                nums[index] = nums[index + 1];
                nums[index + 1] = swap;
                swapflag = true;
            }
        }//end inner
    }//end outer

    System.out.println ("\nArray Contents after sorting"
            + "\n*************");

    for (int index=0; index < nums.length; index ++)
    {  
        System.out.println("Array element " 
                + index + ": " + nums[index]);  
    }
}

}

   `     package projStudent;
import java.util.Scanner;
public class UnitResults 
{
    //delcare Scanner as keyb
    static Scanner keyb = new Scanner (System.in);
    //declare fields
    static String studentForename [];
    static String studentSurname [];
    static int [] studentResult;

    static int pointer;

    //constructor
    UnitResults(int sizeofclass)
    {//start of constructor
        studentForename = new String [sizeofclass];
        studentSurname = new String [sizeofclass];
        studentResult = new int [sizeofclass];
        pointer = 0;
    }//end of constructor

    public boolean add(String studentForename[], String studentSurname[],
             int studentResult[])
    {//start of add method
        if (pointer == studentResult.length )
        {//start of if statement
            System.out.println("Sorry Array is full");
            return false;
            studentResult[pointer] = studentResult[];
            pointer ++;
        }//end of if statement


    }//end of add method
    public boolean delete(int element)
    {//start of delete method
        element = element - 1;
        if ((element >= 0) && ( element < pointer))
        {//start of if statement
            for(int index = (element + 1); index < pointer; index++)
            {//start of for statement
                studentResult[index - 1] = studentResult[index];   
            }//end of for statement
            pointer--;
            return true;
        }//end of if statement
        else
        {//start of else statement
            return false;
        }//end of else statement  
    }//end of delete method

       public String find()
    {//start of display
        String strOutput="";
        strOutput = strOutput + "Students";
        if (pointer==0)
        {//start of if statement
            strOutput = strOutput + "There are no records in this Array";
            return strOutput;
        }//end of if statement

    for (int index=0; index < pointer; index++)
    {//start of for method
        strOutput = strOutput + "Student Name" + studentSurname[index] + studentForename + 
                "Student Result" + studentResult +"\n";
    }//end of for method

    return strOutput;
}//display
   public int sort (int UnitResults)

   {//start of sort
       int sort;
       boolean swapflag = true;
       while (swapflag == true)
       {//start of while loop
           swapflag = false;
           for (int index=0; index < (UnitResults - 1); index++)
           {
               if (studentResult[index]> studentResult[index + 1])
            {   //swap routine
                sort = studentResult[index];
                studentResult[index] = studentResult[index + 1];
                studentResult[index + 1] = sort;

                swapflag = true;
            }


           }

       }//end of while loop

   }//end of sort

}`

4

5 に答える 5

1

残念ながら、並べ替えている現在の配列は何かなど、いくつかのものが含まれていないため、投稿は混乱しています。それでも、あなたの質問を正しく理解していれば...

言語に関係なく、戦略には、要素を交換する方法の変更が含まれます。配列が複合データで構成されている場合は、スワップで割り当てるだけで問題ありません。データが分散している場合、スワップは各変数を交換する必要があります。配列のインデックスを別の配列に並べ替えてから、その配列を使用して最初の配列を間接的に参照し、並べ替えられたアクセスを行うことができます。

于 2012-12-05T13:32:34.880 に答える
1

この目的のためにリストを使用することをお勧めします。まずオブジェクトを作成します。たとえば、「Forname」、「Surename」、「Result」のメンバーを含む「Person」。次に、リストにこれらのオブジェクトを入力し、Interface Compareable を実装して Collection.sort() メソッドを使用します。

class Person implements Comparable<Person>
{
   private String forname;
   private String surname;
   private int rating;

   public Person(String forename, String surname, int rating)
   {
         this.forname = forename;
         this.surname = surname;
         this.rating = rating 
   }

  public int compareTo(Person p) {
       if(p.rating == this.rating) 
          return 0;
       else if(p.rating < this.rating) 
            return -1;

       return 1;  
  }


}

class Test{

    public static void main(String[] args){

        List<Person> personList = new ArrayList<Person>();

         Person p1 = new Person("John","Smith",10);
         Person p2 = new Person("Max","Muster",20);
         Person p3 = new Person("Sarah","Clark",15);

         personList.add(p1);
         personList.add(p2);
         personList.add(p3);

         personList.sort();
    }

}
于 2012-12-05T13:55:55.917 に答える
0

発生している問題の解決に役立つJavaプログラミング言語の機能は多数あります。その最初の機能は、適切なデータ構造と、それらのデータ構造内のオブジェクトを操作するためのメソッドを含めることです。

何よりもまず、Javaクラスを使用して1人のエンティティを表すことをお勧めします...考えてみてください。人の情報を調べるときは、3冊の本やコンピューターの画面などを調べないでください。 、すべての情報を1か所にまとめることができる場合。たとえば、上記の人の場合、次のようなものを使用できます。

public class Person implements Comparable<Person> {
    public String firstName;
    public String lastName;
    public int result;

    public Person(String fn, String ln, int r) {
        firstName = fn;
        lastName = ln;
        result = r;
    }

    public int compareTo(Person otherPerson) {
       return lastName.compareTo(otherPerson.lastName);
    }

}

これにより、すべての個人情報を格納するオブジェクトが提供され、デフォルトでは、名前で簡単に並べ替えることができます(この動作は、ここでは説明しませんが、コンパレータを使用して変更できます)。

これで、名、名前、結果の3つの異なる配列を使用する代わりに、Personの単一の配列を使用できます。実際には、Java言語内に配列の並べ替えメカニズムがすでにあり、必要に応じて調査して使用できますが、独自の並べ替えを使用する場合は、スワップ条件を次のようなものに置き換える必要があります。

if(persons[index].compareTo(persons[index+1]) > 0) {
    ...
}
于 2012-12-05T13:51:02.523 に答える
0

お願いしたいだけです

代わりにクラスの生徒を作成する理由

class Student{
     private String studentForename;
     private String studentSurname;
     private int studentResult;
//setters and getters
}

そしてそれらをいくつかのコレクションに入れます。つまり、それらを3つの異なる配列に入れているリストですか?

リストにうまく含まれていれば、を使用するだけで並べ替えることができますCollections.sort()

于 2012-12-05T13:53:35.573 に答える
0

質問を正しく理解できません: 並べ替えアルゴリズム (バブル、クイックなど) を手動で実装する方法を探していますか、それとも単純にできる限り並べ替えたいですか? 一般的に言えば、独自の並べ替えを実装するべきではありません。なぜなら、Java はそれ自体で非常に効率的なロットを提供するからです...または、これは演習ですか? おそらく :)

私が想像できる最善の方法は、元の形式の3つの配列がインデックスでリンクされている場合、姓/インデックスマップを作成し、それを姓配列からロードし、Map.Entryをキーでソートすると、配列インデックスがソートされますあなたが望んでいた方法。詳細については、ここを確認してください: Java でマップ値をキーでソートする方法

PS演習を行っていない場合、他の人が提供するソリューションは正しく、望ましいものです:) 3つの分離されたデータよりも構造化されたオブジェクトをより適切に処理します。

于 2012-12-05T13:59:18.570 に答える