[英]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);
new newPrice;
new關鍵字始終用於創建新對象而不分配新值(這是我從您的代碼中了解的內容)
b[bookChosen].price()
b
類是該數組的數組。 您正在為indexbookChosen
的值分配一個值。
如果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.