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