在这个循环中疯狂:/

时间:2015-01-15 22:25:38

标签: java arrays for-loop

我很难弄清楚这个逻辑有什么问题。第一个循环没问题,它正确打印了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)

2 个答案:

答案 0 :(得分:3)

您正在检查array字段中的.length piloeOfPos字段,而不是.length的{​​{1}}字段。

for

......需要成为......

int[] pileOfPos = new int[array.length - 7];
for (int p = 0; p < array.length; p++) {

请注意,您实际上是通过单个int[] pileOfPos = new int[array.length - 7]; for (int p = 0; p < pileOfPos.length; p++) { 索引引用循环内的两个数组。这意味着如果情况发生逆转,您仍会收到异常。你真的需要单独检查两者的索引。换句话说,你不能遍历其中一个数组的元素,只需假设其他数组的长度相同。

答案 1 :(得分:0)

你有8个正整数,但你正在将你的pileOfPos数组初始化为6个大小。要么像这样修复它: int[] pileOfPos = new int[array.length - 5];

或更好

int[] pileOfPos = new int[array.length - pileOfNeg.length];

相关问题