Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 即使条件不再满足,while循环仍将继续_Java - Fatal编程技术网

Java 即使条件不再满足,while循环仍将继续

Java 即使条件不再满足,while循环仍将继续,java,Java,我想得到两个数字的索引,这两个数字加起来就是目标 但是当它进入循环时,即使index1和index2都不是-1,它仍然保持循环问题是在递归调用之后,您的函数不会返回,因此循环执行两次。这就是为什么即使条件变为false,循环似乎仍在执行 您需要返回递归调用的结果 public class SumOfTwoNum { public int[] twoSum(int[] numbers, int target) { int med = numbers.length/2;

我想得到两个数字的索引,这两个数字加起来就是目标
但是当它进入循环时,即使index1和index2都不是-1,它仍然保持循环

问题是在递归调用之后,您的函数不会返回,因此循环执行两次。这就是为什么即使条件变为false,循环似乎仍在执行

您需要返回递归调用的结果

public class SumOfTwoNum {
    public int[] twoSum(int[] numbers, int target) {
        int med = numbers.length/2;
        if (numbers[med] > target) {
            twoSum(Arrays.copyOfRange(numbers,0,med), target);
        }
        int remainNum;
        int index1 = -1;
        int index2 = -1;
        while (index1 == -1 && index2 == -1) {
            remainNum = target-numbers[med];
            if (remainNum > numbers[med]) {
                index2 = Arrays.binarySearch(numbers,med,numbers.length,remainNum);
                index1 = med;
            } else {
                index1 = Arrays.binarySearch(numbers,0,med,remainNum);
                index2 = med;
            }
            //here I get index1=0 and index2=1, but the loop doesn't stop
            med --;

        }
        return new int[] {index1, index2};
    }

    public static void main(String[] args) {
        SumOfTwoNum s = new SumOfTwoNum();
        System.out.println(Arrays.toString(s.twoSum(new int[] {2,7,11,15},9)));
        //what I hope to get here is {0,1}, but it returns {-1,2}
    }
}

问题是在递归调用之后,函数不会返回,所以循环执行两次。这就是为什么即使条件变为false,循环似乎仍在执行

您需要返回递归调用的结果

public class SumOfTwoNum {
    public int[] twoSum(int[] numbers, int target) {
        int med = numbers.length/2;
        if (numbers[med] > target) {
            twoSum(Arrays.copyOfRange(numbers,0,med), target);
        }
        int remainNum;
        int index1 = -1;
        int index2 = -1;
        while (index1 == -1 && index2 == -1) {
            remainNum = target-numbers[med];
            if (remainNum > numbers[med]) {
                index2 = Arrays.binarySearch(numbers,med,numbers.length,remainNum);
                index1 = med;
            } else {
                index1 = Arrays.binarySearch(numbers,0,med,remainNum);
                index2 = med;
            }
            //here I get index1=0 and index2=1, but the loop doesn't stop
            med --;

        }
        return new int[] {index1, index2};
    }

    public static void main(String[] args) {
        SumOfTwoNum s = new SumOfTwoNum();
        System.out.println(Arrays.toString(s.twoSum(new int[] {2,7,11,15},9)));
        //what I hope to get here is {0,1}, but it returns {-1,2}
    }
}

你可以为它创建一个布尔标志吗?基本上,
boolean finished=false
在您的while
while(!finished)
上,然后在while块的底部或您认为更好的地方添加
finished=index1!=-1&&index2!=-1
。您可以为此创建一个布尔标志吗?基本上,
boolean finished=false
在您的while
while(!finished)
上,然后在while块的底部或您认为更好的地方添加
finished=index1!=-1&&index2!=-1