编写一个代码,该代码应该从用户定义的长度的用户读取两个已经排序的数组,然后将它们排序为一个仍然排序的列表。出于某种原因,我不能让它排过前三位数?看起来它可能是一件非常简单的东西,我很想念但是我已经习惯了一段时间而没有找到任何东西。有什么想法吗?
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;
}
}
答案 0 :(得分:3)
您正在将两个长度为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] + ", ");
}
答案 1 :(得分:2)
提示:由于您将两个已排序的列表合并为一个(输出)排序列表,因此请考虑为输出列表的大小执行的循环...并将每个列表的下一个适当值放入下一个输出槽中。两个输入列表。
在该循环中,你想要比较什么,看看你接下来会得到什么值? 你会如何在另一个之前处理一个清单呢? 如何推广你的程序,这样两个输入列表的长度不需要相同?
(没有作业代码)
答案 2 :(得分:0)
为什么你不只是使用JDK方法java.util.Arrays#sort(double[])
而不是重新发明轮子?