在if语句中使用未分配的变量(Java)

时间:2015-04-24 01:54:07

标签: java variables object if-statement

这是我在编程时遇到的一个非常常见的问题,而且我是初学者因此无论出于何种原因它都会让我感到困惑。这是我的代码: boolean valid = false;         做{             双倍新价格;             System.out.print(“输入新价格:$”);             newPrice = scan.nextDouble();             if(newPrice> 0){                 b [bookChosen] .price()= new newPrice;                 有效=真;             }         }而(有效!); 无法找到if语句中的newPrice double,我知道为什么,我只是想不出能够查看用户输入是否可行的方法。 提前致谢。

2 个答案:

答案 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)

  1. new newPrice;
  2.   

    关键字始终用于创建新对象而不分配新值(这是我在您的代码中所说明的内容)

    1. b[bookChosen].price()
    2.   

      什么类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);  
      

      最好的运气。