2017-11-28 1 views
-3

私は1つの配列に結合しようとしている2つの文字列の配列を持っています。 2つの配列はアルファベット順に並べられています。私はそれらをアルファベット順に組み合わせなければなりません。私がこれをやろうとしたのは、最初のリストと2番目のリストの組み合わせリストを作成して並べ替えることでした。残念ながら、私のクラスのインストラクターは、compareToメソッドを使用して1つのステップでそれらを結合してソートしてほしいと言います。以下は私のコードですが、これをどのように達成するのですか?ダン2つの文字列をアルファベット順に組み合わせる

LIST1 = {「アルフレッド」、「ベヴ」、「カール」、」: 最初の2つの配列がユーザので、例えば、ヌルとして残りの最大10,000語のアルファベット順の値を入力されます」、NULLなど)

LIST2 = { "ボブ"、 "クレイグ"、 "部長"、 "フラン" 等、NULL)

LIST3目標:{ "アルフレッド"、 "ベヴ" 、 "ボブ"、 "カール"、クレイグ」、 "ダン"、 "ディーン"、 "フラン"}

for (int b = 0; b < list3.length; b++)//adds list1 to merged array 
    { 
     if (list1[b] != null) { 
      list3[b] = list1[b]; 
      f++; 
     } 

    } 
    int x = 0; 
    for (int y = f; y < list3.length; y++)//adds list2 to merged array 
    { 
     if (list2[x] != null) { 
      list3[y] = list2[x]; 
      x++; 
     } 
    } 

    for (int q = 0; q < list3.length; q++)//Merged array in alphabetical order 
    { 
     if (list3[q] != null) { 
      for (int b = q; b < list3.length; b++) { 
       if (list3[b] != null) { 
        if (list3[q].compareTo(list3[b]) > 0) { 
         String s = list3[q]; 
         list3[q] = list3[b]; 
         list3[b] = s; 

        } 

       } 
      } 
     } 

    } 

これは初めてのスタックエクスチェンジを使用しているので、うまくいけばすべてが正しくフォーマットされています。ご迷惑をおかけいたします。

+0

インデントの欠如は従って、あなたのコードは非常に困難にします。 – shmosel

+0

リスト1を追加し、リスト2を追加して集計リストをソートする古いコードを表示したようです。 「1つのステップでそれらを結合して並べ替える」ように書いたコードはどこにありますか? – jarmod

+0

StackOverflowへようこそ、回答/質問がアップビューに役立つ場合、回答があなたの質問を解決した場合は、それを受け入れたものとしてマークしてください。 –

答えて

0

同時にマージして並べ替えたい場合は、文字列配列を保持するクラスにInsertionSortを実装することができます(新しい配列を追加するときにサイズが大きくなるか、最後の長さで開始する)。

あなたのステップがありますように。そして、マージソートのために

start with a array of lenght = list1.lenght + list2.lenght (called result here) 
for each value on list1 and list2 
compare if its lesser of the first element on the result array 
if it is, add it before it and swap all list to the next position 
if it is not, compare to the second and insert as its place if lesser and so on 

Ssorting使用は、Arrays.sort(String []型)

そしてまた、あなたは配列の内容をコピーすることができますSystem.arraycopyメソッドを使用します。

あなたのコードはのように簡単になりますあなたが望む結果を持ってLIST3ここ

String[] list3 = new String[list1.lenght + list2.lenght]; 
System.arraycopy(list1, 0, list3, 0, list1.lenght); 
System.arraycopy(list2, 0, list3, list1.lenght, list2.lenght); 
Arrays.sort(list3); 

0

コレクションを使用することができれば、このようなことができます。コレクションを使用できない場合は、私に知らせてください。私は代替ソリューションを提供します。

String[] array1 = new String[] { "Alfred", "Bev", "Carl", "Dan" }; 
    String[] array2 = new String[] { "Bob", "Craig", "Dean", "Fran" }; 

    List<String> list1 = Arrays.asList(array1); 
    List<String> list2 = Arrays.asList(array2); 

    List<String> combined = new ArrayList<String>(); 
    combined.addAll(list1); 
    combined.addAll(list2); 

    System.out.println("Unsorted list: "+ combined.toString()); 

    Collections.sort(combined); 

    System.out.println("Sorted list: "+ combined.toString()); 

出力:

Unsorted list: [Alfred, Bev, Carl, Dan, Bob, Craig, Dean, Fran] 

Sorted list: [Alfred, Bev, Bob, Carl, Craig, Dan, Dean, Fran] 
関連する問題