【问题标题】:Why are all my if statements firing at once? (Java) [duplicate]为什么我所有的 if 语句都会同时触发? (Java)[重复]
【发布时间】:2017-02-24 06:17:14
【问题描述】:

我的 java 小程序分配有问题。由于某种我无法弄清楚的原因,每当我选中一个复选框时,我的所有 if 语句都会立即触发。该程序应该更新总价格并在每次按下框时通知用户。我们必须使用复选框而不是单选按钮或 JCheckBox,并且程序必须编写为小程序。这是我的代码的链接。

// Classes
import java.awt.*;                                                                                              
import java.applet.*;                                                                                           
import java.awt.event.*;                                                                                         


@SuppressWarnings("serial")                                                                                     
public class ReasonableComputersChristiansen extends Applet implements ItemListener                             
{
// Variables
        Image logo;                                                                                              
        double basePrice;                                                                                       

        Label companyLabel = new Label("Reasonable Computers");                                                 
        Label instructionLabel = new Label("Please select your desired peripherals from the list below");       
        Label outputLabel = new Label("TOTAL PRICE: ");                                                         

        Checkbox printerBox = new Checkbox("Ink Waster 9000");                                                  
        Checkbox monitorBox = new Checkbox("EvilCorp Monitor");                                                 
        Checkbox keyboardBox = new Checkbox("Clickity-Clackity Keyboard");                                      
        Checkbox mouseBox = new Checkbox("Worst-Aim Laser Gaming Mouse");                                       
        Checkbox joystickBox = new Checkbox("Crash and Burn X-2 Joystick");                                     
        Checkbox webcamBox = new Checkbox("Not-So-Anonymous Webcam");                                           


// Components
    public void init()                                                                                          
        {
        add(companyLabel);                                                                                      
        add(instructionLabel);                                                                                  
        add(printerBox);                                                                                        
        printerBox.addItemListener(this);                                                                       
        add(monitorBox);                                                                                        
        monitorBox.addItemListener(this);                                                                       
        add(keyboardBox);                                                                                       
        keyboardBox.addItemListener(this);                                                                      
        add(mouseBox);                                                                                          
        mouseBox.addItemListener(this);                                                                         
        add(joystickBox);                                                                                       
        joystickBox.addItemListener(this);                                                                      
        add(webcamBox);                                                                                         
        webcamBox.addItemListener(this);                                                                        
        add(outputLabel);                                                                                       
        logo = getImage(getDocumentBase(), "logo.gif");                                                         
        }

// Actions
    public void itemStateChanged(ItemEvent e)                                                                   
        {
        basePrice = 575.00;                                                                                     

        if (printerBox.getState());                                                                             
            {
            basePrice += 69.99;                                                                                 
            System.out.println("Printer added!");                                                               
            }
        if (monitorBox.getState());                                                                             
            {
            basePrice += 125.49;                                                                                
            System.out.println("Monitor added!");                                                               
            }
        if (keyboardBox.getState());                                                                            
            {
            basePrice += 55.59;                                                                                 
            System.out.println("Keyboard added!");                                                              
            }
        if (mouseBox.getState());                                                                               
            {
            basePrice += 19.99;                                                                                 
            System.out.println("Mouse added!");                                                                 
            }
        if (joystickBox.getState());                                                                            
            {
            basePrice += 224.97;                                                                                
            System.out.println("Joystick added!");                                                              
            }
        if (webcamBox.getState());                                                                              
            {
            basePrice += 99.19;                                                                                 
            System.out.println("Webcam added!");                                                                
            }
        }
// Output
    public void output()                                                                                        
        {
            outputLabel.setText("TOTAL PRICE: $" + (basePrice));                                                
    }
}

【问题讨论】:

  • 检查你的;s

标签: java applet


【解决方案1】:

if 语句后不应有分号。

更正的代码:

public void itemStateChanged(ItemEvent e)                                                                   
    {
    basePrice = 575.00;                                                                                     

    if (printerBox.getState())                                                                            
        {
        basePrice += 69.99;                                                                                 
        System.out.println("Printer added!");                                                               
        }
    if (monitorBox.getState())                                                                            
        {
        basePrice += 125.49;                                                                                
        System.out.println("Monitor added!");                                                               
        }
    if (keyboardBox.getState())                                                                         
        {
        basePrice += 55.59;                                                                                 
        System.out.println("Keyboard added!");                                                              
        }
    if (mouseBox.getState())                                                                            
        {
        basePrice += 19.99;                                                                                
        System.out.println("Mouse added!");                                                                 
        }
    if (joystickBox.getState())                                                                         
        {
        basePrice += 224.97;                                                                                
        System.out.println("Joystick added!");                                                              
        }
    if (webcamBox.getState())                                                                            
        {
        basePrice += 99.19;                                                                                 
        System.out.println("Webcam added!");                                                                
        }
    }

分号结束您的if 语句,因此它们实际上不会影响代码运行的内容。

等等,但是花括号不会导致语法错误吗?

不。就 Java 而言,您可以仅使用花括号进行组织,它们不会引发语法错误。在大多数情况下应该你这样做?不,但你能做到吗?从技术上讲,是的。

(“在大多数情况下”的警告是当您需要有意将变量放在特定范围内时,正如 Andy Turner 所提到的)

【讨论】:

  • “你应该这样做吗?不。”除非您想将变量包含在一个紧凑的范围内。
  • 哦,普通花括号创建了一个新范围?棒极了。我没有意识到这一点。
  • 非常感谢!我花了大约 4 个小时在网上搜索这个答案哈哈!
  • 没问题!我什至无法告诉你我处理过多少次类似的问题。不能。解决。
  • “我什至无法告诉你我处理过多少次类似的问题” 然后改进你的编译器工具。 Errorprone would catch this as a compiler error.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
相关资源
最近更新 更多