java在这个循环中变得疯狂:/
我很难找出这个逻辑有什么问题。第一个循环是正常的,它正确地打印pileOfNeg的元素。另一方面,第二个循环正在抛出"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException"
。有什么建议吗
import java.util.Arrays;
public class Arrays {
public static void main(String[] args) {
int[] array = {22, 53, -12, 0, 23, 145, -14, -85, 63, 42, 0, -599, -17};
Arrays.sort(array);
//Ok, there is 5 neg elements, print 'em out
int[] pileOfNeg = new int[array.length - 8];
for (int n = 0; n < array.length; n++) {
if (array[n] < 0) {
pileOfNeg[n] = array[n];
}
}
System.out.println("pileOfNeg: " + Arrays.toString(pileOfNeg));
//Good, now print pos ones, forget zeroes
int[] pileOfPos = new int[array.length - 7];
for (int p = 0; p < array.length; p++) {
if (array[p] > 0) {
pileOfPos[p] = array[p]; //33rd line of code
}
}
System.out.println("pileOfPos: " + Arrays.toString(pileOfPos));`
控制台:
pileOfNeg: [-599, -85, -17, -14, -12]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
at Arrays.main(Arrays.java:33)
# 1 楼答案
你有8个正整数,但是你正在初始化你的pileOfPos数组,使其大小为6。要么像这样解决它:
int[] pileOfPos = new int[array.length - 5];
或者更好
int[] pileOfPos = new int[array.length - pileOfNeg.length];
# 2 楼答案
您正在检查
array
的.length
字段,而不是piloeOfPos
循环中的.length
字段。。。需要成为
请注意,实际上是通过单个
p
索引引用循环中的两个数组。这意味着,如果情况发生逆转,您仍将收到一个例外。你真的需要分别检查这两个的索引。换句话说,你不能循环通过其中一个数组的元素,而简单地假设其他数组的长度相同