在for循环内的if块之后的代码不起作用

时间:2017-08-17 21:12:20

标签: java for-loop if-statement return

我是java的新手。这是一个关于for循环中是否阻塞的问题。此代码来自算法实践。 代码是采用int数组但将其视为整数并将1添加到此整数,并将新整数转换回数组格式。如果我没有清楚地描述它,请参阅原始的here

    public static int[] plusOne(int[] digits) {

    int size = digits.length;
    for(int i=size-1; i>=0; i--) {
        if(digits[i] < 9) {
            System.out.println("tag1 digits.i = " + digits[i]);
            digits[i]++;
            System.out.println("tag2 digits.i = " + digits[i]);
            return digits; // <-- return
        }

        System.out.println("tag3 digits.i= " + digits[i]);
        digits[i] = 0; //?
        System.out.println("tag4 digits.i= " + digits[i]);
    }

    int[] intOut = new int [size+1];
    intOut[0] = 1;
    return intOut;
}

在上面的代码中,我添加了一些println()来显示digit[i]的更改方式。

当输入为{1,2,3}时,为什么digits[i] = 0行不起作用?读取我认为int[] digits中的所有int的代码都将设置为0.

如果if块中有return,那么是否意味着停止当前迭代并忽略if块后for循环中的其余代码?

更新我没有清楚地描述它。我的问题不在于如何以及如何完成代码,但是考虑到我提到的输入,为什么if语句之后的代码没有&#39;工作。现在我了解到if块最后一行的return语句意味着要做(停止当前迭代)。对不起这个愚蠢的问题..!

2 个答案:

答案 0 :(得分:4)

您的代码将一个数字添加到作为数字数组传递的数字。

因此,当您添加1到123时,您将得到124.代码从最后一位开始,查看是否小于9,然后仅将1添加到最后一位。 这种情况发生在if-block中。返回结束函数

将数字设置为0的代码仅在出现溢出时才会到达。只有在传递最后一位数为9的数字时才会发生此溢出。

要达到这种情况,您必须传递类似129(或{1,2,9})的内容。然后最后一位数字变为0,最后一位数字被检查。在这种情况下加1,返回130

要获取循环后面的代码,您必须传递一个列表,其中所有数字都设置为9.例如99(或{9,9})。

在这种情况下,最后一位数字将设置为0,第一位数字将设置为0,然后将生成一个新数据列表。最初所有数字都设置为0.然后第一个数字将设置为1.这将导致100。

return离开了函数/方法 break离开周围的循环(for,while)

所以粗体问题的答案是

答案 1 :(得分:0)

对于以下循环:

for(int i=size-1; i>=0; i--) {
    if(digits[i] < 9) {
        System.out.println("tag1 digits.i = " + digits[i]);
        digits[i]++;
        System.out.println("tag2 digits.i = " + digits[i]);
        return digits;
    }

    System.out.println("tag3 digits.i= " + digits[i]);
    digits[i] = 0; //?
    System.out.println("tag4 digits.i= " + digits[i]);
}

digit[i] < 9时刻它将进入if条件。但之后它将返回digit[]并将退出该方法。

因此,您永远不会看到digit[i] < 9,即 1到8 被设置为0。