【发布时间】:2018-08-13 19:26:48
【问题描述】:
在我的一个程序中,我无法合并两个不同的列表并将其放入一个数组中并从最小到最大排序。一位助教说我可以硬编码让它变得更容易,或者用更好的方式来做,很难做到。我想以更好的方式做到这一点,这样我就可以思考/变得更好地编码。助教说它在一个 for 循环中是可行的。现在已经思考和尝试了大约 5 个小时,然后放弃了。有什么建议?
import java.util.Scanner;
public class Lab10Part1 {
public static void main(String[] args) {
int[] list1, list2;
Scanner input = new Scanner(System.in);
System.out.print("Enter list1 size and contents: ");
int len1 = input.nextInt();
list1 = new int[len1];
for(int i = 0; i < list1.length; i++) {
list1[i] = input.nextInt();
}
System.out.print("Enter list2 size and contents: ");
int len2 = input.nextInt();
list2 = new int[len2];
for(int i = 0; i < list2.length; i++) {
list2[i] = input.nextInt();
}
input.close();
System.out.print("List1 is ");
for(int i = 0; i < list1.length; i++) {
System.out.print(list1[i] + " ");
}
System.out.println();
System.out.print("List2 is ");
for(int i = 0; i < list2.length; i++) {
System.out.print(list2[i] + " ");
}
System.out.println();
System.out.print("The merged list is ");
for(int i = 0; i < merge(list1, list2).length; i++) {
System.out.print(merge(list1, list2)[i] + " ");
}
}
public static int[] merge(int[] list1, int[] list2) {
int[] merge = new int[list1.length + list2.length];
int min = Math.min(list1.length, list2.length);
for(int i = 0, j = 0, k = 0; i < merge.length; k++) {
if (min <= list1.length || min <= list2.length) {
if(list2[j] <= list1[i]) {
merge[k] = list2[j];
j++;
}
else {
merge[k] = list1[i];
i++;
}
min++;
}
else if(list2.length >= list1.length) {
if(list1[i] <= list2[j]) {
merge[k] = list1[i];
i++;
}
else {
merge[k] = list2[j];
j++;
}
}
}
return merge;
}
}
【问题讨论】:
-
你应该将合并的结果存储在一个局部变量中。
-
那么,我的逻辑和语法正确吗?我需要做的就是把 int[] merge;进入不同的 int 数组变量?
-
我并没有真正深入阅读该方法中的代码,但在调用站点您应该执行
int[] merge = merge(list1, list2)之类的操作,而不是重复调用该方法。 -
list1 和 list2 是否保证已经排序?
-
@IanMc 不,用户可以输入他们想要的大小,并随机输入任何数字。