在编码bat的Java AP-1部分中列出了我的代码 -
public String[] mergeTwo(String[] a, String[] b, int n) {
String[] newArray = new String[n];
int i = 0;
int j = 0;
for(int x = 0; x < n; x++){
if(a[i].compareTo(b[j]) < 0){
newArray[x] = a[i++];
}
else if(a[i].compareTo(b[j]) > 0){
newArray[x] = b[j++];
}
else if(a[i].compareTo(b[j]) == 0){
newArray[x] = a[i++];
}
}
return newArray;
}
出于某种原因,这不起作用。在查看其他人的代码时,它应该做同样的事情,但它只返回两个正确的答案。当我更改else if时,代码拒绝运行。我尝试使用while循环和int r作为索引号(现在它是当前的x)然后没有任何变化。我不确定有什么不同之处。如果有人能解释为什么我会非常感激。
答案 0 :(得分:0)
我怀疑问题是你没有处理如果代码运行所有的一个String []并且只有另一个String []中剩下的数字会发生什么。如果i或j没有引用字符串数组中的合法索引,则需要解决会发生什么。
此外,似乎参数“n”应该是两个数组中字符串的总数。最好在MergeTwo类中计算n:
public String[] mergeTwo(String[] a, String[] b) {
n = a.length + b.length;
String[] newArray = new String[n];