在ATM机上我的if语句出了问题

时间:2018-06-18 02:33:00

标签: java

我是编码的新手,我需要一些帮助。我在过去的3天里尝试过这段代码,我无法让它工作,所以非常感谢任何帮助。我在代码中间遇到了很多错误,我不确定原因。

class Account extends JPanel    {
    public Account(ATMBuilder frame)    {
        guiBuilder = frame;

    static void setIsSavings()  {
        if(checkingRadio == checkingBtn)    {   
            isSavings= false;
        }else(checkingRadio == savingsBtn)  {
            isSavings =true;
        }
    }
}

Object command = e.getSource();
public void MyAccount(ATMBuilder frame) {
    double resultsCalc =0;
    double result = Math.round(result*1000000)/1000000;

        if(isSavings==false)    {
            resultTxt.setText(String.valueof((int)Math.floor(result)));
        }
        else if(isSavings==true)    {
            resultTxt.setText(String.valueof((int)Math.floor(result)));
        }
        else if (command == resetButton) {
            withdrawAmount.setText("");
            depositAmount.setText("");
            transferToAmount.setText("");
            balanceAmount.setText("");
            resultTxt.setText("");
        }
        else if (command == acceptButton) {
            try {
                fundsAvalable = Double.parseDouble(funds.getText());
            }catch (Exception ex) {
                    funds.setText("Invalid Amount of Funds");
                    return;
            }
        }
}
        //resultsCalc(funds);

    private void resultsCalc(double funds) {
        funds.setText(String.valueOf(funds));
        double amount = 0;
            try {
                amount = Double.parseDouble(withdarawAmount.getText());
            }catch (Exception ex) {
                funds.setText("Invalid Amount");
                return;
            }
        }
}

正如您所看到的,我遇到了一些严重问题。我需要确保所有提款都来自支票或储蓄账户。我不断得到"而不是声明"或"';'预期的错误。错误发生在第一个和第二个if / else if语句周围。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

1-首先,您可以在下面调整此方法,使其更短,更准确:
从这个:

static void setIsSavings()  {
  if(checkingRadio == checkingBtn)    {   
    isSavings= false;
  } else(checkingRadio == savingsBtn) {
    isSavings = true;
  }
}

对此:

static void setIsSavings() {
  isSavings = checkingRadio.equals(savingsBtn);
}

2-接下来,此块将导致您流程中的主要问题:

if(isSavings==false)    {
  resultTxt.setText(String.valueof((int)Math.floor(result)));
} else if(isSavings==true) {
  resultTxt.setText(String.valueof((int)Math.floor(result)));
} 

您不应将布尔变量与false或true进行比较。 您可以将其转换为:

if(isSavings) {
  resultTxt.setText(String.valueof((int)Math.floor(result)));
} else {
  resultTxt.setText(String.valueof((int)Math.floor(result)));
} 

再进一步,我们可以看到if和else执行相同的确切代码,因此我们可以完全摆脱if / else结构:

resultTxt.setText(String.valueof((int)Math.floor(result)));

然后,由于您要依次比较false和true,因此不会执行其他elseif。 您可能应该从行中删除else: 来自:

else if (command == resetButton) {

收件人:

if (command == resetButton) {

由于我们在进行此操作,因此请勿将非原始类型的对象与==进行比较,因为这在许多情况下将不起作用。您可以为此使用equals方法:

if (command.equals(resetButton)) {
  ....

最后但并非最不重要的一点,请务必查看有关如何格式化源代码的Java样式指南,我强烈建议您使用Google Java样式指南。您可以下载一个XML文件,该文件可以安装在IDE(Intellij或Eclipse)上,并且每次保存文件时都会自动为您设置代码格式。 https://google.github.io/styleguide/javaguide.html