我是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语句意味着要做(停止当前迭代)。对不起这个愚蠢的问题..!
答案 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。