2017-02-02 3 views
0

プログラムは、12ヶ月と24ヶ月後に2つのアカウントの利息を計算することになっています。これは正常に動作します。私の問題は、金利のgetter/setterが機能しないため、金利が別のクラスの私的変数に0.1として保存されているとき、私はメインクラスからそれを印刷することができません。オブジェクト指向プログラミングで、ゲッターが別のクラスからプライベート変数を取得していない

public class testAccountIntrest{ 
    //main method 
    public static void main(String[] args) { 
     //creating objects 
     Account account1 = new Account(500); 
     Account account2 = new Account(100); 


     //printing data 
     System.out.println(""); 
     System.out.println("The intrest paid on account 1 after 12 months is " + account1.computeIntrest(12)); 
     System.out.println(""); 
     System.out.println("The intrest paid on account 1 after 24 months is " + account1.computeIntrest(24)); 
     System.out.println(""); 
     System.out.println(""); 
     System.out.println("The intrest paid on account 2 after 12 months is " + account2.computeIntrest(12)); 
     System.out.println(""); 
     System.out.println("The intrest paid on account 2 after 24 months is " + account2.computeIntrest(24)); 
     System.out.println(""); 
     System.out.println("The intrest rate is " + getIntrest()); 


     }//end main method 
    }//end main class 

class Account { 
    //instance variables 
    private double balance; 
    private double intrestRate = 0.1; 

    //constructor 
    public Account(double initialBalance) { 
     balance = initialBalance; 
    } 

    //instance methods 
    public void withdraw(double amount) { 
     balance -= amount; 
    } 
    public void deposit(double amount) { 
     balance += amount; 
    } 
    public double getBalance() { 
     return balance; 
    } 
    public void setIntrest(double rate) { 
     intrestRate = rate; 
    } 

    public double getIntrest() { 
     return intrestRate; 
    } 

    public int computeIntrest(int n) { 
     double intrest = balance*Math.pow((1+intrestRate),(n/12)); 
     return (int)intrest; 
    } 
} 

答えて

5

を呼び出す必要があり、コンパイラは間違いなくあなたを語っていると、あなたのtestAccountIntrestクラスがgetInterest()というメソッドを持っていませありません。だから、これだけでは、そのクラスのコンテキストで何もすることはできません。

getInterest() 

しかし、あなたのAccountクラスは、そのメソッドを持っています。あなたは、基本的に

account2.getInterest() 

:だから、あなたはそれらのオブジェクトにそのメソッドを呼び出すことができます

Account account1 = new Account(500); 
Account account2 = new Account(100); 

account1.getInterest() 

かを、あなたは2つのAccountオブジェクトそのスコープ内を持っていますメソッドを呼び出すオブジェクトをコードに伝える必要があります。それはそれ自身でそれを理解することはできません。

2

getIntrest()メンバメソッドである、したがって、あなたは

System.out.println("The intrest rate for account 1 is " + account1.getIntrest()); 
System.out.println("The intrest rate for account 2 is " + account2.getIntrest()); 
1

別のクラスのメソッドを呼び出すには、別のクラスのオブジェクトが必要です。

getIntrestを呼び出すには、accountのインスタンスが必要です。

private static double intrestRate = 0.1; 

public static double getIntrest() { 
    return intrestRate; 
} 

静的フィールドはクラスに属し、あなたがアクセスを特定のインスタンスを必要としない:金利はすべてのアカウントに対して同じである

System.out.println("The intrest rate for account 1 is " + account1.getIntrest()); 

場合は、それを静的にすることができます。たとえばそれ:

System.out.println("The intrest rate for all accounts is " + Account.getIntrest()); 
関連する問題