如果条件整数

时间:2013-09-22 15:46:03

标签: java if-statement

我想了解这个算法的工作原理。我有一个Permute类,其方法是permute(),它打印给定数组的所有可能的排列。我尝试了{1, 2, 3}。当我使用调试器检查时,我不明白这个if语句是如何工作的if (k == arr.size() -1) 它在k == 1arr.size() == 3时评估为false,在k == 2 and arr.size() == 3时评估为true。

public class Permute
{
    static void permute(java.util.List<Integer> arr, int k){
        for(int i = k; i < arr.size(); i++){
            java.util.Collections.swap(arr, i, k);
            permute(arr, k+1);
            java.util.Collections.swap(arr, k, i);
        }
        if (k == arr.size() -1){
            System.out.println(java.util.Arrays.toString(arr.toArray()));
        }
    }
    public static void main(String[] args){
        Permute.permute(java.util.Arrays.asList(1,2,3), 0);
    }
}

2 个答案:

答案 0 :(得分:1)

arr.size() - 1 == 2当大小为3.所以这是匹配。

arr.size() - 1 == 1当大小为2时,所以它不匹配1;

检查使用-1位,因为数组索引从0开始。因此,包含5个元素的数组将为0,1,2,3,4,大小将等于5.

答案 1 :(得分:1)

如果你问为什么if(k == arr.size()-1)从给定的输入中返回true或false -

当k == 1且arr.size()== 3

时,

的计算结果为false

此处检查是1 == (3-1)?。它不相等所以返回错误。

并在k == 2和arr.size()== 3时计算结果为真。

此处如果检查为2 == (3-1)?它是相等的,因此返回true。