2

このラボでは、負でない (0 以上の) 整数の 2 つの配列をマージするプログラムを作成します。プログラムは、各配列をキーボードからの入力として受け入れます。入力される値の数は前もってわかりませんが、各配列の最大長は 10,000 要素であると想定できます。値の入力を停止するには、負の数を入力します。負の数値の入力は無視して、配列に格納しないでください。2 つの入力配列の要素は昇順でなければなりません。つまり、各配列要素には、前の要素値以上の値が必要です。配列には繰り返し要素が含まれる場合があります。2 つの配列が入力された後、プログラムは各配列の要素が順番に入力されていることを確認する必要があります。順不同の要素が見つかった場合、「エラー: 配列が正しい順序ではありません」というメッセージを出力します。あなたの仕事は、2 つの入力配列を新しい配列にマージすることです。すべての要素を最低から最高の順に並べます。入力された元の配列のそれぞれを印刷し、続いてマージされた配列を印刷します。プログラムは、各数値の間に正確に 1 つのスペースを含む配列を出力する必要があることに注意してください。サンプル ラン 1: 最初の配列の値を最大 10000 まで入力し、負の数を入力して終了します

3
3
5
6
8
9
-1

2 番目の配列の値を 10000 まで入力してください。終了するには負の数を入力してください

3
4
5
6
-5

最初の配列:

3 3 5 6 8 9 

2 番目の配列:

3 4 5 6 

マージされた配列:

3 3 3 4 5 5 6 6 8 9

サンプル実行 2: 最初の配列の値を最大 10000 値まで入力し、負の数を入力して終了します

4
5
7
2
-1

2 番目の配列の値を 10000 まで入力してください。終了するには負の数を入力してください

3
3
3
3
3
3
-100

最初の配列:

4 5 7 2 

2 番目の配列:

3 3 3 3 3 3 

エラー: 配列の順序が正しくありません

import java.io.*;
import static java.lang.System.*;

import java.util.Scanner;
import java.lang.Math;
import java.lang.Object;

import java.util.Arrays;
import java.util.ArrayList;
import org.apache.commons.lang3.ArrayUtils;



class Main
{

 public static void main (String str[]) throws IOException {
    {
        Scanner scan = new Scanner(System.in);

        int[] arrayone = new int[10000];
        int[] arraytwo = new int[10000];
        int [] mergeQ = new int[arrayone.length + arraytwo.length];
        int integers = 0;
        int inte = 0;


        System.out.println("\nEnter the values for the first array, up to 10000 values, enter a negative number to quit");

         for (int i = 0; i < arrayone.length; i++)
        {
            arrayone[i] = scan.nextInt();
            if (arrayone[i] < 0){
              break;
            } else {integers ++;}
        }


        System.out.println("\nEnter the values for the second array, up to 10000 values, enter a negative number to quit");
        for (int i=0; i<arraytwo.length; i++)
        {
            arraytwo[i] = scan.nextInt();

            if (arraytwo[i] < 0)
            {
                break;
            } {inte ++;}
        }


        System.out.println("First Array:");
        for (int i=0; i< integers; i++)
        {
          System.out.print(arrayone[i] + " ");
        }


        System.out.println("\nSecond Array:");
        for (int i=0; i< inte; i++)
        {
            System.out.print(arraytwo[i] + " ");
        }

      System.out.println("\nMerged Array:");{


        String[] both = ArrayUtils.addAll(arrayone[integer], arraytwo[inte]);
          Arrays.sort(both);

        }

        }
      }
    }
4

1 に答える 1

2
you were adding elements but not the arrays themselves.

あなたの2番目のループで

}{ inte++; }

これをに変更

}else {inte ++;}

1つの解決策は

int[] both = ArrayUtils.addAll(Arrays.copyOf(arrayone, integers), Arrays.copyOf(arraytwo,inte));
Arrays.sort(both);
for (int i=0; i< both.length; i++){
      System.out.print(both[i] + " ");

それを行うには非常に悪い方法です..しかし、CSクラスで機能します

for (int i=0; i< integers; i++){
   mergeQ[i] = arrayone[i];
}
for (int i=integers; i< inte + integers; i++){
   mergeQ[i] = arraytwo[i - integers];
}
int both[] = Arrays.copyOf(mergeQ,integers+inte);
Arrays.sort(both);
for (int i=0; i< both.length; i++){
    System.out.print(both[i] + " ");
}

注:この方法はかなり悪い..メモリが非効率的です..など..

これは、少しきれいですが、上記のものとほぼ同じパフォーマンスを持つ別の方法です..

System.arraycopy(arrayone, 0, mergeQ, 0, integers);
System.arraycopy(arraytwo, 0, mergeQ, integers, inte);
int both[] = Arrays.copyOf(mergeQ,integers+inte);
Arrays.sort(both);
for (int i=0; i< both.length; i++){
    System.out.print(both[i] + " ");
}
于 2015-11-20T05:39:28.310 に答える