合并两个排序的用户输入数组时遇到麻烦



编写代码,从用户定义的长度的用户中读取两个已经排序的数组,然后将它们排序到一个仍然排序的列表中。由于某种原因,我不能让它排序到前三位数之后?它看起来可能是一些非常简单的东西,我错过了,但我已经摆弄了一段时间,没有找到任何东西。什么好主意吗?

Sample Run:
How long are the lists?: 3
Enter list A:
1: 1.0
2: 2.0
3: 3.0
Enter list B:
1: 2.0
2: 3.0
3: 4.0
Merged List: 1.0, 2.0, 2.0, 3.0, 3.0, 4.0
代码:

import java.util.Scanner; //import scanner

public class project2 {
public static void main (String[] args){
    Scanner input = new Scanner(System.in); //scanner for input
    int a = 0;
    System.out.println("How long are the lists? ");
    System.out.print("(The lists should be the same length):  ");
    a = input.nextInt();
    double [] lista = new double [a]; //create array
    double [] listb = new double [a]; //create array
    int count=1;
    System.out.println("Enter numbers for list A:");
    for(int j = 0; j < a ; j++){       //user input numbers loop into array "list"
        System.out.print(count + ": ");
        lista[j] = input.nextDouble();
        count++;
    }
    int acount = 1;
    System.out.println("Enter numbers for list B:");
    for(int j = 0; j < a ; j++){       //user input numbers loop into array "list"
        System.out.print(acount + ": ");
        listb[j] = input.nextDouble();
        acount++;
    }

    System.out.println(); // print the original lista inputed by user
    System.out.print("Your list A:   ");
    for(int j=0; j<a; j++){
        System.out.print(lista[j] + " ");
    }
    System.out.println(); // print the original listb inputed by user
    System.out.print("Your list B:   ");
    for(int j=0; j<a; j++){
        System.out.print(listb[j] + " ");
    }
    project2.merge(lista, listb);
    System.out.println(); // print the new merged listc
    System.out.print("Merged List:   ");
    for(int j=0; j<a; j++){
        System.out.print(project2.merge(lista, listb)[j] + ", ");
    }
}

public static double [] merge ( double [] list1, double [] list2){
double [] listc = new double [list1.length + list2.length]; //create array
 int i = 0, j = 0, k = 0;
    while (i < list1.length && j < list2.length)
    {
        if (list1[i] < list2[j])
        {
            listc[k] = list1[i];
            i++;
        }
        else
        {
            listc[k] = list2[j];
            j++;
        }
        k++;
    }
    while (i < list1.length)
    {
        listc[k] = list1[i];
        i++;
        k++;
    }
    while (j < list2.length)
    {
        listc[k] = list2[j];
        j++;
        k++;
    }

return listc;
}

}

您正在将两个长度为a的数组合并为长度为2 * a的数组,但您只打印出第一个a数字。修改打印合并数组的for循环条件:

for(int j=0; j< 2*a; j++){

同样,每次调用merge时,将再次合并数组。只需合并一次,然后在打印内容时引用数组。这个版本使用新合并数组的length来停止循环。

double[] listc = project2.merge(lista, listb);
System.out.println(); // print the new merged listc
System.out.print("Merged List:   ");
for(int j=0; j < listc.length; j++){
    System.out.print(merged[j] + ", ");
}

提示:由于要将两个排序列表合并为一个(输出)排序列表,请考虑根据输出列表的大小执行一个循环。并将两个输入列表中的下一个适当值放入下一个输出槽。

在这个循环中,你想比较什么来查看下一个得到的值?你如何处理一个列表在另一个列表之前耗尽的问题?你如何概括你的程序,使两个输入列表不需要是相同的长度?

(无作业代码)

为什么不直接使用jdk方法java.util.Arrays#sort(double[])而不是重新发明轮子呢?

最新更新