练习4:编写一个函数windowPosSum(int[] a, int n)
,将每个元素替换a[i]
为a[i]
through 的总和a[i + n]
,但前提a[i]
是值为正。如果由于到达数组的末尾而没有足够的值,则我们仅求和多少个值。
例如,假设我们windowPosSum
使用a = {1, 2, -3, 4, 5, 4}
,和数组进行调用n = 3
。在这种情况下,我们将:
- 替换
a[0]
为a[0] + a[1] + a[2] + a[3]
。 - 替换
a[1]
为a[1] + a[2] + a[3] + a[4]
。 - 不做任何事情,
a[2]
因为它是负面的。 - 替换
a[3]
为a[3] + a[4] + a[5]
。 - 替换
a[4]
为a[4] + a[5]
。 - 不执行任何操作,
a[5]
因为之后没有值a[5]
。
因此,调用后的结果windowPosSum
将为{4, 8, -3, 13, 9, 4}
。
public class BreakContinue1{ public static void windowPosSum(int[] a,int n){ int i=0,j=0; for(i=0;i<a.length;i++){ if(a[i]<0) { continue; } for(j=i;j<i+n;j++){ if(j+1>=a.length) break; a[i]=a[i]+a[j+1]; } } } public static void main(String[] args) { int[] a = {1, 2, -3, 4, 5, 4}; int n = 3; windowPosSum(a, n); // Should print 4, 8, -3, 13, 9, 4 System.out.println(java.util.Arrays.toString(a)); } }
这个练习很好地证明了continue和break的强大,简洁明了地解决了。不用这两个关键字也可以写出来,只不过代码会比较冗余。