簡體   English   中英

如何從同一類的另一個方法中調用一個方法(java)

[英]How to call a method from another method in the same class (java)

我一直在嘗試通過閱讀“ Java如何編程早期對象”來理解如何從同一個類的另一個方法內部調用一個方法。

此刻我完全迷失了,這本書中使用的類比使可視化變得容易。 但是,將其轉換為代碼具有挑戰性。

我已經嘗試了很多次以解決這個問題並走了很遠: PS 為了簡單起見,我排除了一些我認為對我的問題不重要的代碼...

import java.util.Scanner;

public class BuyAHouseInc
{
    private int housePrice;
    private int amountOfHouses;
    private int houseCounter;

    // method to enter the amount of houses on sale
    public void setAmountOfHouses()
    {
        // do stuff etc.
    }

    // method that sets the house price
    public void setHousePrice()
    {
        // do stuff etc.

        calculateFees(this.housePrice); // this is where I'm not sure...
    }

    //method to calculate fees and taxes
    public void calculateFees(int housePrice) // does this receive this.housePrice?
    {
      // do some stuff
    }

測試人員代碼:

public class BuyAHouseIncTester
{
    public static void main(String[] args)
    {
        BuyAHouseInc client1 = new BuyAHouseInc("John","Doyle","15 Newton Drive\nDublin 5\n", 550000) // Create object 
        // set amount of houses on sale to client 1
        client1.setAmountOfHouses(); 

        // set house price for each of the houses added to database
        client1.setHousePrice();
    }
}

在另一個方法中調用一個方法的代碼是什么? 是否會調用每個房屋價格的值?

您可以簡單地調用calculateFees(housePrice); 因為在調用時唯一可見的housePrice變量是instance variable private int housePrice;

假設你一個constructor調用設置housePrice根據你如何創建BuyAHouseInc

//計算費用和稅款的方法public void computeFees(int housePrice)//是否收到this.housePrice? {//做些事}

是的,這將收到housePrice通過傳遞calculateFees(housePrice);

calculateFees(int housePrice)上面定義的局部變量僅可見內部calculateFees(int housePrice){...}方法

將信息傳遞給方法或構造函數

更新:根據評論,您需要更新您的設置員以通過房價

public void setHousePrice(int housePrice)
    {
        this.housePrice = housePrice;

        calculateFees(this.housePrice); 
    }

是的,您的假設是正確的。

但是,有一些重要的注意事項。 這段代碼:

public void setHousePrice()
{
    // do stuff etc.

    calculateFees(this.housePrice); // <---This probably doesn't do what you think it does
}

// No. This doesn't receive this.housePrice. It receives the VALUE of this.housePrice. 
// It's a completely new variable
public void calculateFees(int housePrice) .
{
  // do some stuff
}

Java是按價值傳遞的。 您傳遞的是housePrice的值,但您沒有修改原始的housePrice。

因此,如果“做些事情”並修改傳入的housePrice變量,則除非保存在calculateFees內設置housePrice,否則不會保存這些更改。

在這種情況下,最好通過getter / setter來操縱任何成員變量。 順便說一句,約定是二傳手應始終取值。 這不是任意的,因為許多庫都依賴以某種方式起作用的set / get方法。

我已經對以上答案進行了更清晰的編輯。

如果我錯了,請糾正我,但這是可能的解決方法:

public void setHousePrice(int price)
{


    calculateFees(price); 
}


public void calculateFees(int housePrice) 
{
  // stuff with housePrice
}

然后做

variable.setHousePrice(variable.getHousePrice);
public class BuyAHouseInc {
    private double housePrice;
    private int amountOfHouses;
    private int houseCounter;

    public BuyAHouseInc(double housePrice, int amountOfHouses, int houseCounter) {
        this.housePrice = housePrice;
        this.amountOfHouses = amountOfHouses;
        this.houseCounter = houseCounter;
    }

    // method that sets the house price
    public void generateHousePrice() {
        // do stuff etc.
        // you could also put the logic in the set method... Had to change the method name to 
        // generate as the getters and setter where created and the setter method is named
        // exactly like your previous method
        calculateFees(housePrice); // this is were I'm not sure...
    }

    // method to calculate fees and taxes
    public void calculateFees(double housePrice) // does this receive
                                                    // this.housePrice?
    {
        // do some stuff
    }

    public double getHousePrice() {
        return housePrice;
    }

    public void setHousePrice(double housePrice) {
        this.housePrice = housePrice;
    }

    public int getAmountOfHouses() {
        return amountOfHouses;
    }

    public void setAmountOfHouses(int amountOfHouses) {
        this.amountOfHouses = amountOfHouses;
    }

    public int getHouseCounter() {
        return houseCounter;
    }

    public void setHouseCounter(int houseCounter) {
        this.houseCounter = houseCounter;
    }

    @Override
    public String toString() {
    return "BuyAHouseInc [housePrice=" + housePrice + ", amountOfHouses=" + amountOfHouses + ", houseCounter="
            + houseCounter + "]";
}


}

將兩個類分開放在不同的文件中。 要指出的另一件事是對價格使用double而不是int。 您還必須創建getter和setter才能獲取和設置屬性。 您還必須在類中添加一個構造函數。 然后,您可以在main中創建該類的實例並調用其方法。 主要方法如下所示。

public class Main {

    public static void main(String... args) {
        BuyAHouseInc test = new BuyAHouseInc(200000, 4, 2);
        test.setAmountOfHouses(6); // changed from 4 to 6
        test.generateHousePrice();
        test.calculateFees(test.getHousePrice());
        test.toString();

    }
}

希望您能找到幫助和好運! 我已經編輯了代碼,並添加了toString方法以將信息作為字符串輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM