在java中合并两个排序数组 公共静态int[]合并(int-arr1[],int-arr2[]{ int x=arr1.length+arr2.length; int[]arr3=新的int[x]; x=0; int i=0,j=0; 而(i
短版:在java中合并两个排序数组 公共静态int[]合并(int-arr1[],int-arr2[]{ int x=arr1.length+arr2.length; int[]arr3=新的int[x]; x=0; int i=0,j=0; 而(i,java,arrays,eclipse,sorting,merge,Java,Arrays,Eclipse,Sorting,Merge,短版: public static int[] merge(int arr1[], int arr2[]) { int x = arr1.length + arr2.length; int[] arr3= new int[x]; x=0; int i =0, j=0; while ( i<arr1.length||j<arr2.length) { if(arr1[i]<arr2[j]) {
public static int[] merge(int arr1[], int arr2[]) {
int x = arr1.length + arr2.length;
int[] arr3= new int[x];
x=0;
int i =0, j=0;
while ( i<arr1.length||j<arr2.length)
{
if(arr1[i]<arr2[j])
{
arr3[x]= arr1[i];
i++;
x++;
}
else
{
arr3[x]=arr2[j];
j++;
x++;
}
}
return arr3;
}
自己实施:
public static int[] merge(int arr1[], int arr2[]) {
int x = arr1.length + arr2.length;
int[] arr3= new int[x];
x=0;
int i =0, j=0;
while ( i<arr1.length||j<arr2.length)
{
if(arr1[i]<arr2[j])
{
arr3[x]= arr1[i];
i++;
x++;
}
else
{
arr3[x]=arr2[j];
j++;
x++;
}
}
return arr3;
}
也许您应该检查其中一个数组是否为空,如果某个数组比另一个数组长,还应该移动剩余的数组。此外,在检查是否到达数组末尾时,也许您应该使用&&而不是| |,以避免出现异常
System.arraycopy(arr, 0, arr3, 0, arr.length);
System.arraycopy(arr2, 0, arr3, arr.length, arr2.length);
return Arrays.sort(arr3);
公共静态int[]合并(int-arr1[],int-arr2[]{
//检查空数组
如果(arr1==null){
返回arr2;
}
如果(arr2==null){
返回arr1;
}
int x=arr1.length+arr2.length;
int[]arr3=新的int[x];
x=0;
int i=0,j=0;
而(i短版:
public static int[] merge(int arr1[], int arr2[]) {
int x = arr1.length + arr2.length;
int[] arr3= new int[x];
x=0;
int i =0, j=0;
while ( i<arr1.length||j<arr2.length)
{
if(arr1[i]<arr2[j])
{
arr3[x]= arr1[i];
i++;
x++;
}
else
{
arr3[x]=arr2[j];
j++;
x++;
}
}
return arr3;
}
自己实施:
public static int[] merge(int arr1[], int arr2[]) {
int x = arr1.length + arr2.length;
int[] arr3= new int[x];
x=0;
int i =0, j=0;
while ( i<arr1.length||j<arr2.length)
{
if(arr1[i]<arr2[j])
{
arr3[x]= arr1[i];
i++;
x++;
}
else
{
arr3[x]=arr2[j];
j++;
x++;
}
}
return arr3;
}
也许您应该检查其中一个数组是否为空,如果某个数组比另一个数组长,还应该移动剩余的数组。此外,在检查是否到达数组末尾时,也许您应该使用&&而不是| |,以避免出现异常
System.arraycopy(arr, 0, arr3, 0, arr.length);
System.arraycopy(arr2, 0, arr3, arr.length, arr2.length);
return Arrays.sort(arr3);
公共静态int[]合并(int-arr1[],int-arr2[]{
//检查空数组
如果(arr1==null){
返回arr2;
}
如果(arr2==null){
返回arr1;
}
int x=arr1.length+arr2.length;
int[]arr3=新的int[x];
x=0;
int i=0,j=0;
while(i让我们对程序进行一次试运行。假设arr1={2}和arr2={1,3}
声明和初始化部分是正确的
public static int[] merge(int arr1[], int arr2[]) {
// Checking for null arrays
if (arr1 == null){
return arr2;
}
if (arr2 == null){
return arr1;
}
int x = arr1.length + arr2.length;
int[] arr3= new int[x];
x=0;
int i =0, j=0;
while (i<arr1.length && j<arr2.length) // This is where your exception occurs
{
if(arr1[i]<arr2[j])
{
arr3[x]= arr1[i];
i++;
x++;
}
else
{
arr3[x]=arr2[j];
j++;
x++;
}
}
// Copying leftovers
if (i < arr1.length){
while(i < arr1.length){
arr3[i + j] = arr1[i];
i++;
}
}
if (j < arr2.length){
while (j < arr2.length){
arr3[j + i] = arr2[j];
j++;
}
}
return arr3;
}
现在控制传递到循环
//All correct here
int x = arr1.length + arr2.length;
int[] arr3= new int[x];
x=0;
int i =0, j=0;
现在,循环中的下一次i=0,j=1,x=1。记住这一点,if条件被检查。这一次它的2<3。返回true,然后执行下面的部分
if(arr1[i] < arr2[j]) //2 < 1 returns false
arr3[x]=arr2[j];
j++;
x++;
现在,这一次在循环中,i=1,j=1和x=2的值。这里是问题的开始。
arr3[x]= arr1[i];
i++;
x++;
希望我能帮助你。让我们对你的程序进行一次试运行。假设arr1={2}和arr2={1,3}
声明和初始化部分是正确的
public static int[] merge(int arr1[], int arr2[]) {
// Checking for null arrays
if (arr1 == null){
return arr2;
}
if (arr2 == null){
return arr1;
}
int x = arr1.length + arr2.length;
int[] arr3= new int[x];
x=0;
int i =0, j=0;
while (i<arr1.length && j<arr2.length) // This is where your exception occurs
{
if(arr1[i]<arr2[j])
{
arr3[x]= arr1[i];
i++;
x++;
}
else
{
arr3[x]=arr2[j];
j++;
x++;
}
}
// Copying leftovers
if (i < arr1.length){
while(i < arr1.length){
arr3[i + j] = arr1[i];
i++;
}
}
if (j < arr2.length){
while (j < arr2.length){
arr3[j + i] = arr2[j];
j++;
}
}
return arr3;
}
现在控制传递到循环
//All correct here
int x = arr1.length + arr2.length;
int[] arr3= new int[x];
x=0;
int i =0, j=0;
现在,循环中的下一次i=0,j=1,x=1。记住这一点,if条件被检查。这一次它的2<3。返回true,然后执行下面的部分
if(arr1[i] < arr2[j]) //2 < 1 returns false
arr3[x]=arr2[j];
j++;
x++;
现在,这一次在循环中,i=1,j=1和x=2的值。这里是问题的开始。
arr3[x]= arr1[i];
i++;
x++;
希望我能帮到你。请展示你的单元测试。大多数情况下的运行时错误:ArrayOutofBoundsException这些应该为你指出正确的方向。为什么你认为你得到了ArrayOutofBoundsException?请展示你的单元测试。大多数情况下的运行时错误:ArrayOutofBoundsException这些应该为你指出正确的方向ct方向为什么你们认为你们得到了边界感知的排列?