答案 0 :(得分:0)
您的代码存在一些基本问题,所有内容都集中在这一行:
b[bookChosen].price() = new newPrice;
首先,new newPrice
没有做任何事情,甚至不会编译。 new
是用于创建新对象的关键字,必须跟随类的构造函数的调用 - newPrice
不是类,也不是类的调用&#39 ; s构造函数。
其次,您尝试分配对象方法的调用。您无法分配对象方法的调用 - 您只能分配名称。
你可能想做的事情是:
b[bookChosen].setPrice(newPrice);
这使用setter设置b[bookChosen]
中包含的对象的价格。使用setter来更改对象的属性是Java中非常常见的约定。如果您使用的是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 :(得分:0)
new newPrice;
新关键字始终用于创建新对象而不分配新值(这是我在您的代码中所说明的内容)
b[bookChosen].price()
什么类
b
是其中的数组。您正在为索引bookChosen
分配值。
如果您使用的是方法,则不会将值分配给方法,则会通过参数将值发送到方法。 比如
b[bookChosen].price(newPrice)
;如果价格是该类别的字段,那么如果它在同一个包中,则必须是公共的或受保护的。然后是类的变量 没有
()
张贴。它们被分配为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);
最好的运气。