2016-04-25 8 views
1

文字列をアルファベット順にソートする必要があるという問題に直面しています。私は1つの配列をソートすることができますが、最初の配列に対応する2つの配列がある場合に問題が発生します。情報を混乱させないために、各配列の各値は同じ場所にある必要があります。 array1をソートした後、それはアルファベット順ですが、array2array3からどのように値を作るかわからないので、並べ替えが完了した後にarray1のように同じ位置を変更します。これまでJava BubbleSort

私のコードは次のとおりです。

public void sort() 
{ 

    boolean finish = false; 

    while(finish == false){ 

     finish = true; 

     for(int i=0;i<Country.length-1;i++) 

     { 
      int num = 0; 
      if(Country[i] != null && Country[i + 1] != null) 
      { 
       String name1=Country[i]; String name2=Country[i+1]; 
       num=name1.compareTo(name2); 
      } 
      else if(Country[i] == null && Country[i + 1] == null){ 
       num = 0; 
      } 
      else if(Country[i] == null){ 
       num = 1; 
      } 
      else { 
       num = -1; 
      } 
      if(num>0) 
      { 
       String temp=Country[i]; 

       Country[i]=Country[i+1]; 
       Country[i+1]=temp; 
       finish=false; 
      } 
     } 
    } 
+0

たとえば、国の配列の値は{z、a}です。都市配列は国配列をソートした後に{2,1}ですシティ配列が国の配列でスワップされたのと同じ位置に値を入れ替えるようにします –

+0

すべてのデータを保持するカスタムの同等のオブジェクトクラスを作成できますか?そうすれば、複数の配列ではなく1つの配列をソートするだけで済みます。 –

+0

申し訳ありませんが、間違いですが、私は3アレイのものに基づいてGUIを作成し始めました。変更したい場合は、プログラム全体とデザインを変更する必要があります。だからこそ私は少なくとも何らかのヒントを得て、時間を節約しようとしています。 –

答えて

1

あなたのプログラムを再設計し、関連するすべての項目を1つのクラスに配置することが最も推奨される方法です。結局のところ、これはオブジェクトのためのものです。次にオブジェクトComparableを作成し、compareToメソッドを付けてソートします。

本当にできない場合は、ソート配列で2つのアイテムを交換するときは必ず、他の配列の対応するアイテムを交換してください。

String temp=country[i]; 

    country[i]=country[i+1]; 
    country[i+1]=temp; 

    temp=capital[i]; 
    capital[i]=capital[i+1]; 
    capital[i+1]=temp; 

    temp=headOfState[i]; 
    headOfState[i]=headOfState[i+1]; 
    headOfState[i+1]=temp; 

この方法で、あなたはあなたのメインアレイに何かを移動するたび、あなたはまた、移動することがあります:あなたは配列countrycapitalheadOfStateを持っている場合

だから、あなたは次のように記述する必要があります他の配列のそれぞれの項目は、一緒になって保持されます。

ただし、プログラムを再設計した方がより好ましいでしょう。

Java言語の規則にも注意してください - 変数名は大文字で始めるべきではなく、型名のみが必要です。

+0

合意後の都市と人口の数字は、再設計のアドバイスと混乱してきています。 OPは本当に関連するデータを保持する新しいオブジェクトを作成する必要があります。 –

+0

ありがとうございます!これは私のために働く。私はあなたと同意し、私はこのバージョンを終了するとすぐにそれを再設計し、それぞれの方法で長所と短所を比較することができます。とにかくありがとうございました!! –

1

あなたはすべての配列は、国配列にあなたがした比較に基づいてswapedしたい場合。 1つの比較の後に複数の配列をスワップすることができます。

If(array1[i] > array1[i+1]){ 
    Swap(array1[i],array1[i+1) 
    Swap(array2[i],array2[i+1]) 
} 

スワップ機能を使用することで、より簡単にスワップすることができます。

0

CountryCityの配列を同時にスワップする必要があります。

public class BubbleSortTmp { 
    public String[] Country = {"z", "h", "a"}; 
    public int[] City = {3, 2, 1}; 

    public void printCountry() { 
     for (String s : Country) { 
      System.out.printf("%s ", s); 
     } 
     System.out.println(); 
    } 

    public void printCity() { 
     for (int s : City) { 
      System.out.printf("%s ", s); 
     } 
     System.out.println(); 
    } 

    public void sort() { 
     for (int outer = Country.length - 1; outer > 0; outer--) { 
      for (int inner = 0; inner < outer; inner++) { 
       if (Country[inner].compareTo(Country[inner+1]) > 0) { 
        swapCountry(inner, inner+1); 
        swapCity(inner, inner+1); 
       } 
      } 
     } 
    } 

    private void swapCountry(int first, int second) { 
     String tmp = Country[first]; 
     Country[first] = Country[second]; 
     Country[second] = tmp; 
    } 

    private void swapCity(int first, int second) { 
     int tmp = City[first]; 
     City[first] = City[second]; 
     City[second] = tmp; 
    } 

    public static void main(String[] args) { 
     BubbleSortTmp bs = new BubbleSortTmp(); 

     System.out.println("Before: "); 
     bs.printCountry(); 
     bs.printCity(); 

     bs.sort(); 

     System.out.println("After: "); 
     bs.printCountry(); 
     bs.printCity(); 
    } 
} 
関連する問題