簡體   English   中英

在if語句中使用未分配的變量(Java)

[英]Using an unassigned variable in an if-statement (Java)

這是我在編程時遇到的一個非常常見的問題,而且我是初學者,因此無論出於何種原因,它都會使我感到困惑。 這是我的代碼:

boolean valid = false;  
        do {  
            double newPrice;  
            System.out.print("Enter new price: $");  
            newPrice = scan.nextDouble();  

            if(newPrice > 0){  
                b[bookChosen].price() = new newPrice;  
                valid = true;  
            }  
        }while(!valid);  

如果找不到if語句中的newPrice兩倍,我知道為什么,我只是想不出一種方法來查看用戶輸入的數字是否可行。
提前致謝。

您的代碼有幾處基本問題,全部集中在一行上:

 b[bookChosen].price() = new newPrice;  

首先, new newPrice不會做任何事情,甚至不會編譯。 new是用於創建新對象的關鍵字,並且必須緊隨其后的是對類的構造函數的調用newPrice不是類,也不是對類的構造函數的調用。

其次,您嘗試分配給對象方法的調用。 您不能分配給對象方法的調用-您只能分配給名稱。

您可能打算做的事情是這樣的:

 b[bookChosen].setPrice(newPrice);

這使用設置器來設置b[bookChosen]包含的對象的價格。 在Java中,使用setter更改對象的屬性是一種非常普遍的約定。 如果您使用的是IDE,那么您可能就不會遇到這些問題,這是任何人真正編寫現代Java的唯一方法(請輸入https://www.jetbrains.com/idea/的強制性插件),並且您會可能學到很多東西。

除此之外,您的代碼通常還不錯,盡管我認為編寫起來更簡單一些:

while (true) {
    System.out.print("Enter new price: $");  
    double newPrice = scan.nextDouble();  

    if (newPrice > 0) {  
       b[bookChosen].setPrice(newPrice);
       break;  // leave while True loop
    }
}

對我而言,另一種不太自然的控制流程是:

double newPrice = 0;
while (newPrice <= 0) {
    System.out.print("Enter new price: $");  
    double newPrice = scan.nextDouble();  
}
b[bookChosen].setPrice(newPrice);
  1. new newPrice;

new關鍵字始終用於創建新對象而不分配新值(這是我從您的代碼中了解的內容)

  1. b[bookChosen].price()

b類是該數組的數組。 您正在為index bookChosen的值分配一個值。

  • 如果price是您的方法, 則不會將值分配給method ,而是通過參數將值發送到method。 b[bookChosen].price(newPrice) ;

  • 如果price是該類別的字段,則必須在同一包中將其設為public或受保護。 那么class的變量就不會由()附加。 它們的分配方式類似於b[bookChosen].price = newPrice; 但是它不是標准的,總是讓您的bean通過私有字段訪問,然后通過setter getter進行訪問。

boolean valid = false;  
        do {  

            System.out.print("Enter new price: $");  
            double newPrice = scan.nextDouble();  

            if(newPrice > 0){  
                b[bookChosen].setPrice(newPrice) ;  
                valid = true;  
            }  
        }while(!valid);  

祝你好運。

暫無
暫無

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

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