---
# System prepended metadata

title: CS61B HW0 - widowPosSum
tags: [Practice, Java]

---

# CS61B HW0 - widowPosSum

###### tags: `Java` `Practice`

題目：
> Write a function windowPosSum(int[] a, int n) that replaces each element a[i] with the sum of a[i] through a[i + n], but only if a[i] is positive valued. If there are not enough values because we reach the end of the array, we sum only as many values as we have.
> 
> For example, suppose we call windowPosSum with the array a = {1, 2, -3, 4, 5, 4}, and n = 3. In this case, we’d:
> 
> Replace a[0] with a[0] + a[1] + a[2] + a[3].
> Replace a[1] with a[1] + a[2] + a[3] + a[4].
> Not do anything to a[2] because it’s negative.
> Replace a[3] with a[3] + a[4] + a[5].
> Replace a[4] with a[4] + a[5].
> Not do anything with a[5] because there are no values after a[5].
> Thus, the result after calling windowPosSum would be {4, 8, -3, 13, 9, 4}.
> 
> As another example, if we called windowPosSum with the array a = {1, -1, -1, 10, 5, -1}, and n = 2, we’d get {-1, -1, -1, 14, 4, -1}.


解：
```
public class BreakContinue {
	
	public static void windowPosSum(int[] a, int n) {
		
		for (int i = 0; i < a.length; i++) {
			
			if (a[i] < 0) {
				continue;
			}
			
			if (i == a.length - 1) {
				break;
			}
			
			for (int j = 1; j <= n; j++) {
				
					if (i + j >= a.length) {
						break;
						
					}
					else {
					a[i] = a[i] + a[i + j];
					}
				}
			}
		}
        
	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));
		

	}

}

```
1. 迴圈1先解決elements為負數以及撞到陣列尾巴的情況：負數的情況跳過(continue), 撞到尾巴的情況break
2. 迴圈2開始計算加總，loop從1開始(迴圈1的下一個位置)到間隔n為上限，如果加總的各數超過陣列範圍(包含陣列最後一個位置)就break
3. 承上，沒超過就加總，加到間隔n的位置後停止