w22116972
11/14/2015 - 10:29 AM

hw4.java

// 介面只是用來宣告你會用到什麼方法,所以並不用去實作它
// 在介面裡的方法 預設都是Public和Abstract 所以不必特地加上去
interface Calculator {
    long XXX(int x);
    // ...
}
// 再來是你的class必須去繼承hw2 所以用extends
// 然後你要實作上面的interface 所以用 implements
public class Progression2_0450742 extends Progression_0450742 implements Calculator {
    // 繼承的用法是你可以藉由super去使用hw2的方法以及建構子
    // 所以我們可以使用super(m, n)來呼叫hw2的建構子i.e. Progression_0450742(int m, int n)
    public Progression2_0450742(final int m, final int n) {
        super(m, n);
    }
    // 因為我們"實作"了 Calculator 所以必須在這個class裡把所有interface裡面宣告的方法都要寫出來
    // 我這裡寫的final 可以不用加 這只是遵照checkStyle的習慣而已
    // throws 是這禮拜才上到的,所以hw4應該還不用加
    public final long sum(final int r) throws ArrayIndexOutOfBoundsException, ArithmeticException {
        // 這裡要先檢查輸入進去的 r 有沒有小於0或是大於陣列的上限
        // 要獲得陣列的方法有好幾種: 
        // 1. 因為我們有用繼承,所以可以直接使用super.returnRow來得到陣列的row 
        // 2. 用this.returnRow也可以
        // 3. 如果你的hw2是用public來寫ProgressionArray的話 就可以直接存取使用了(老師說的)
        // 在加總的過程中要記得防呆,如果加總後的值小於加總前的值就是overflow了
        // 小提示 for each 的用法 快速使用陣列裡的每一個值,row就是returnRow得到的
        for (long i : row) { ... }
    }
    public final double avg(final int r) throws ArrayIndexOutOfBoundsException, ArithmeticException {
        // 記得用double
    }
}

// hw2
// 因為在同一個檔案 只能有一個public (必須與檔名相同),所以hw2的class前面不用加public
class Progression_0450742 { ... }