java将一个数组拆分为两个大小相等的数组
我正在eclipse中编写一个程序,将一个数组拆分为两个大小相等的数组。我的程序可以编译,但运行时会收到以下错误消息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10000 at mergeArrays.main(mergeArrays.java:28)
如果您对我为什么会出现这个错误有任何建议,我们将不胜感激。提前谢谢
这是我的密码:
import java.util.Scanner;
import java.util.Random;
public class mergeArrays {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//System.out.print("Enter an upper limit: ");
//int lim = input.nextInt();
int lim = 10000;
int halfLim;
halfLim = lim / 2;
//int data[];
//data = new int[lim];
double[] data = new double[lim];
for (int i = 0; i < lim; i++) {
data[i] = Math.random();
}
double[] a = new double[halfLim];
for (int i = 0; i < halfLim; i++) {
a[i] = data[i];
}
double[] b = new double[halfLim];
for (int i = halfLim; i < lim; i++) {
b[i] = data[i];
}
System.out.print(a);
}
}
# 1 楼答案
在第二个for循环中有两个问题:
5000
的半限制初始化了b
数组i
的初始值设置为halfLim(5000)
,该索引根本不存在,因为它太大了data[i + halfLim]
-当i的初始值设置为halfLim
时,您试图访问index 5000 + 5000
处的元素,这也超出了数据数组的范围# 2 楼答案
自
lim
>halfLim
您可以访问绑定外的元素# 3 楼答案
b[i]
实际上是b[5000]
,这是越界的。试试这个:# 4 楼答案
您的最后一个迭代器是错误的
使用以下命令:
而不是:
更好的方法是将两个循环组合起来:
# 5 楼答案
有两个问题需要解决
首先,
b[i]
不会成功地索引到任何内容b
定义为大小5000,但您已经将其设置为等于原始数组大小的一半。这将单独导致ArrayIndexOutOfBoundsException
其次,您需要确保只将一半的元素添加到另一个数组中。起始位置因偏移量
i + halfLim
不同而不同,但最终迭代必须以最大大小的一半进行因此,您需要进行两项更改:
i
必须从0开始,并且halfLim
处终止李>执行此操作的代码如下所示:
此外,请确保在顶部写入
import java.util.Arrays;
,并在要打印a
时使用Arrays.toString(a)
,否则您将只获得一个对象字符串引用# 6 楼答案
问题在以下循环中:
它应该是
data[i]
而不是data[i+halfLim]
。这是因为您已经将变量i
初始化为halfLim
的值,所以您只需从该值开始下半部分,直到< lim