Java数据结构学习脚印-UC Berkeley练习
练习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的强大,简洁明了地解决了。不用这两个关键字也可以写出来,只不过代码会比较冗余。
浙公网安备 33010602011771号