Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在这个循环中变得疯狂:/_Java_Arrays_For Loop - Fatal编程技术网

Java 在这个循环中变得疯狂:/

Java 在这个循环中变得疯狂:/,java,arrays,for-loop,Java,Arrays,For Loop,我很难找出这个逻辑有什么问题。第一个循环是正常的,它正确地打印pileOfNeg的元素。另一方面,第二个循环在线程主java.lang.ArrayIndexOutOfBoundsException中引发异常。有什么建议吗 import java.util.Arrays; public class Arrays { public static void main(String[] args) { int[] array = {22, 53, -12, 0, 23,

我很难找出这个逻辑有什么问题。第一个循环是正常的,它正确地打印pileOfNeg的元素。另一方面,第二个循环在线程主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));`
您正在检查for循环中数组的.length字段,而不是piloeOfPos的.length字段

。。。需要成为

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

请注意,您实际上是通过单个p索引引用循环中的两个数组。这意味着,如果情况发生逆转,您仍将收到异常。您确实需要分别检查这两个的索引。换句话说,您不能循环遍历其中一个数组的元素,而简单地假设其他数组具有相同的长度。

您有8个正整数,但您正在初始化pileOfPos数组,使其大小为6。通过如下方式进行修复: int[]pileOfPos=newint[array.length-5]

或者更好


int[]pileOfPos=newint[array.length-pileOfNeg.length]

。。。很明显,对我来说也是一样的pileOfNeg@PM77-1这是真的。@asteri将pint[] 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++) {