2015-11-20 3 views
2

В этой лаборатории вы создадите программу, которая объединяет два массива неотрицательных (равных или больших 0) целых чисел. Ваша программа будет принимать каждый массив в качестве ввода с клавиатуры. Вы заранее не знаете, сколько значений будет введено, но вы можете предположить, что каждый массив будет иметь максимальную длину в 10 000 элементов. Для прекращения ввода значений введите отрицательное число. Вы можете игнорировать любые отрицательные числа и не хранить их в массиве. Элементы двух входных массивов должны быть в порядке возрастания. Другими словами, каждый элемент массива должен иметь значение, которое больше или равно предыдущему значению элемента. Массив может содержать повторяющиеся элементы. После ввода двух массивов ваша программа должна проверить, чтобы элементы каждого массива были введены по порядку. Если обнаружен элемент вне порядка, напечатайте сообщение «ОШИБКА: массив не в правильном порядке». Ваша задача состоит в объединении двух входных массивов в новый массив со всеми элементами в порядке, от самого низкого до самого высокого. Распечатайте каждый из исходных массивов, за которым следует объединенный массив. Обратите внимание, что ваша программа должна выводить массивы с ровно одним пробелом между каждым из чисел. Sample Run 1: Введите значения для первого массива, до 10000 значений, введите отрицательное число, чтобы броситьЯ пытаюсь объединить целые строки, но Dr. Java, которую я использую, не позволит мне использовать ArrayUtils?

3 
3 
5 
6 
8 
9 
-1 

Введите значения для второго массива, до 10000 значений, введите отрицательное число бросить

3 
4 
5 
6 
-5 

Первый массив:

3 3 5 6 8 9 

Второй массив:

3 4 5 6 

Merged Массив:

3 3 3 4 5 5 6 6 8 9 

Sample Run 2: Введите значения для первого массива, до 10000 значений, введите отрицательное число, чтобы бросить

4 
5 
7 
2 
-1 

Введите значения для второй массив, до 10000 значений, введите отрицательное число для выхода

3 
3 
3 
3 
3 
3 
-100 

Первый массив:

4 5 7 2 

Второй массив:

3 3 3 3 3 3 

ОШИБКА: Array не в правильном порядке

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); 

     } 

     } 
     } 
    } 
+0

сделать 'INT [] и = ArrayUtils.addAll (Arrays.copyOfRange (arrayone, 0, целое число-1), Массивы .copyOfRange (arraytwo, 0, inte-1)); ' – Minato

+0

Это исправлено ... Мне просто пришлось изменить« целое »на« целые числа »... Спасибо за помощь !! –

+0

'int [] both = ArrayUtils.addAll (Arrayys.copyOf (arrayone, integers-1), Arrays.copyOf (arraytwo, inte-1));' try this – Minato

ответ

2
you were adding elements but not the arrays themselves. 

В вас второй цикл

}{ inte++; } 

изменить это

}else {inte ++;} 

одно решение может быть

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] + " "); 
} 
+0

Код, который вы использовали, компилируется, но я получаю это как вывод [I @ 5b4bc4e6 –

+0

@WilliamGuyton вы можете поделиться первым массивом: и второй: ? – Minato

+0

Ну, как вы можете видеть из исходного кода сверху, каждый массив вводится пользователем вручную. Массив прерывается, когда пользователь вводит отрицательное число, а затем второй массив начинает принимать введенные пользователем данные. Предполагается, что два массива будут сначала напечатаны, а затем объединены в числовом порядке. –