合并2个数组

时间:2014-02-20 03:40:31

标签: java arrays

所以我正在编写一个打印出合并序列的程序,假设只有两个输入。打印序列后,打印空白行。此外,程序打印合并的数组,每行一个字符串。数组的大小不超过10.这是我到目前为止的代码:

import java.util.Scanner;
public class Demo {
    public static int readInput(Scanner myScanner, String[] input) {
        boolean streamEnded = false;
        int index = 0;

        while (!streamEnded && myScanner.hasNext()) {

            String value = myScanner.nextLine();

            if (value.length() == 0)  {
                streamEnded = true;
                input[index] = value;
            } else {
                input[index] = value;
                index++;

            }
        } 
    return index;

    }
    public static void printArray(String[] values, int size) {
            for (int index = 0; index < size; index++) {
                System.out.println(values[index]);
    }

    public static void main(String[] args) {
        int size = 10;
        String[] input1 = new String[size];
        String[] input2 = new String[size];
        String[] merge = new String[size*2];

        Scanner aScanner = new Scanner(System.in);

        readInput(aScanner, input1);

        readInput (aScanner, input2);

        readInput (aScanner, merge);

        for (int i = 0; i < input1.length; i++) {
            System.out.println(input1[i]);
        }

        for (int i = 0; i < input2.length; i++) {
            System.out.println(input2[i]);
        }

        for (int i = 0; i < merge.length; i++) {
            if(i % 2 == 0) {
                merge[i] = input1[i / 2];
                            System.out.println(store[i]);
            } else {
                merge[i] = input2[i / 2];
                            System.out.println(store[i]);
            }

        }

    }

}

我的意见:

1

2

3

4


5

6

7

8

所以输出应该是:

1

5

2

6

3

7

4

8

这是我的输出。任何人都可以帮我解决这个问题吗?感谢

1
2
3
4

5
6
7
8

1
2
3
4

null
null
null
null
null
5
6
7
8
null
null
null
null
null
null
1
6
3
8
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
    at Demo.main(Demo.java:47)

null
null
null
null
null

2 个答案:

答案 0 :(得分:0)

我不会给你正确的代码,但这应该会让你思考正确的方向。这是您的代码的一部分:

    for (int i = 0; i < merge.length; i++) {
        if(i % 2 == 0) {
            merge[i] = input1[i];
        } else {
            merge[i] = input2[i];
        }

这段代码有什么办法可以将input2[2](例如)放在输出中吗?您使用input2[2]的唯一方法是i==2。但是后来i%2 == 0所以只有if的第一个分支才被执行。同样,input1[3]可以使用吗?

答案 1 :(得分:0)

尝试使用以下内容:

  if(i % 2 == 0) {
                merge[i] = input1[i/2];
            } else {
                merge[i] = input2[i/2];
            }

对于更新的代码,

readInput(aScanner, input1); 

应该成为

int index1 = readInput(aScanner, input1); 

对于所有readInputs然后输出循环

for (int i = 0; i < input1.length; i++) {
            System.out.println(input1[i]);
        }

应该成为

 for (int i = 0; i < index1; i++) {
            System.out.println(input1[i]);
        }

表示所有输出循环(注意,您需要为所有3个输入和循环使用不同的索引变量,即index1,index2和index3。