Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在if语句中使用未赋值变量(Java)_Java_Variables_Object_If Statement - Fatal编程技术网

在if语句中使用未赋值变量(Java)

在if语句中使用未赋值变量(Java),java,variables,object,if-statement,Java,Variables,Object,If Statement,这是我编程时遇到的一个非常常见的问题,我是一个初学者,所以无论出于什么原因,它都会困扰我。这是我的密码: boolean valid = false; do { double newPrice; System.out.print("Enter new price: $"); newPrice = scan.nextDouble(); if(newPrice >

这是我编程时遇到的一个非常常见的问题,我是一个初学者,所以无论出于什么原因,它都会困扰我。这是我的密码:

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 double,我知道为什么,我只是想不出一种方法来查看用户的输入是否是一个可行的数字。
提前感谢。

您的代码有两个基本错误,都集中在这一行:

 b[bookChosen].price() = new newPrice;  
首先,newPrice不做任何事情,甚至不会编译。new是用于创建新对象的关键字,后面必须跟一个类的构造函数调用-newPrice不是一个类,也不是一个类的构造函数调用

其次,您正试图分配给对象方法的调用。您不能分配给对象方法的调用-只能分配给名称

您可能想做的是:

 b[bookChosen].setPrice(newPrice);
这使用setter设置包含在b[BookSelected]中的对象的价格。在Java中,使用setter更改对象的属性是一种非常常见的约定。如果使用IDE,您可能不会遇到这些问题,这是任何人真正编写现代Java插件的唯一方式,您可能会学到很多东西

除此之外,您的代码一般都很好,尽管我认为它编写起来有点简单:

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关键字总是用来创建一个新对象,而不是指定一个新值。这是我从你的代码中了解到的

b[已选书]。价格 b类的数组。您正在为所选索引处的值赋值

若价格是您的方法,那个么值并没有分配给方法,而是通过参数发送给方法。 像b[BookSelected]。pricenewPrice

如果price是该类的字段,那么如果它在同一个包中,那么它必须是public或protected。然后类的变量是 没有邮件被挂起。它们的赋值方式类似于b[BookSelected]。price=newPrice; 但它并不总是通过私有字段和setter-getter访问您的bean

祝你好运。

新价格是什么?为什么不像b[BookSelected].setPricenewPrice;?为什么不能使用double newPrice=scan.nextDouble;?您的意思是b[BookSelected]。price=newPrice还是更好的b[BookSelected]。setnewprice newPrice您还需要增加BookSelected吗?
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);