java - 在java中按升序合并2个排序数组
问题描述
我正在尝试在 java 中合并 2 个升序排序数组。我是java新手,所以我无法理解。以下代码有什么问题?
import java.lang.Math;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int[] a = {10, 20, 30, 40};
int[] b = {50, 60, 70, 80};
int[] z = merge(a, b);
System.out.println(z);
}
public static int[] merge(int[] a, int[] b) {
int[] result = new int[a.length + b.length];
int indexResult = 0;
int indexA = 0;
int indexB = 0;
while (indexResult < result.length) {
if (indexB >= a.length || a[indexA] <= b[indexB])
result[indexResult++] = b[indexB++];
else
result[indexResult++] = a[indexA++];
}
return result;
}
}
我的错误是
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Main.merge(Main.java:30)
at Main.main(Main.java:15)
解决方案
indexB >= a.length
应替换为indexA >= a.length
.
以下代码可能会有所帮助
import java.lang.Math;
import java.util.Scanner;
public class Main
{
public static void main(String[] args) {
int[] a = {10, 20, 30, 40};
int[] b ={50,60,70,80};
int[] z=merge( a, b);
for(int x: z)
System.out.println(x);
}
public static int[] merge(int[] a, int[] b) {
int[] result = new int[a.length + b.length];
int indexResult = 0;
int indexA = 0;
int indexB = 0;
while (indexResult < result.length) {
if (indexA >= a.length || a[indexA] >= b[indexB])
result[indexResult++] = b[indexB++];
else
result[indexResult++] = a[indexA++];
}
return result;
}
}
输出:-
10
20
30
40
50
60
70
80
推荐阅读
- c - 如何在 C 中将 RGB565 转换为 HSL 颜色
- redhat - xdotool 无法在 redhat 上检测到 headless firefox 没有 GUI
- ios - 如何使用 SwiftUI 观察 TextField 值并结合?
- java - 我正在尝试在 java 中合并两个 JsonObjects
- javascript - 刷新页面后的粗体活动菜单
- docker - 配置文件更改为 VerneMQ docker 映像
- spring - 为什么 Querydsl 总是要求连接是事务性的?
- android - 使用 Android 9(API 级别 28)连接到 wifi 网络
- laravel-5 - 在 fieldname=>fieldvalue 键中雄辩地获取数据
- c# - 如何在不影响行为的情况下处理表单中的 wndproc calcsize 进程进行自定义