预期令牌上的语法错误

时间:2014-04-13 23:45:51

标签: java swing compiler-errors syntax-error

我正在尝试使用

解决问题
  

令牌“}”上的语法错误,{预期。

该计划应该能够计算输入金额的税。

import javax.swing.JOptionPane;
public class Accounting {

/**
 * @param args
 */

public static void main(String[] args) {
    // TODO Auto-generated method stub

    //declare variables 
    int accountNumber;
    int age=0;
    int months=0;
    double amount=0.0;
    double increasedAmount=0.0;
    double incomeTax=0.0;
    double newAmount=0.0;
    char letter;
    double rate=0.03;
    double interest=0.0;
    double tax=0.40;
    double income=0.0;


    //get input 
    accountNumber=Integer.parseInt(JOptionPane.showInputDialog(null, "Please enter the account number (Type 999 to exit "));
    age=Integer.parseInt(JOptionPane.showInputDialog(null, "Enter the age "));
    amount=Double.parseDouble(JOptionPane.showInputDialog(null, "Enter the amount "));
    months=Integer.parseInt(JOptionPane.showInputDialog(null, "Enter the number of months "));

    letter=(JOptionPane.showInputDialog(null, "--- --- Main Menu --- --- --- " + 
    "\n A. Seniors Account " + "\n B. Income Tax " + "\n C. Special Accounts " + 
            "\n Please select a letter from the menu ( Type X to exit the Menu)")).charAt(0);



    //call function

    interest=amount*rate*months;

    income=amount*tax;

    increasedAmount=calcSenior(amount, interest);

    incomeTax=calcTax(amount, income );


    //display results 
    JOptionPane.showMessageDialog(null, "The increased amount is " + increasedAmount);
    JOptionPane.showMessageDialog(null, "The income tax is " + incomeTax);}



    public static void displayHeading()
    {
        JOptionPane.showMessageDialog(null, "############################# ");  
        JOptionPane.showMessageDialog(null, "Als Accounting Services       ");
        JOptionPane.showMessageDialog(null, "Your success is our business. ");
        JOptionPane.showMessageDialog(null, "############################# ");

    }



// code methods 

    //case 1:
    public static double calcSenior (double amt, double intest)
    {
        double cost; 
        cost=amt+intest;
        return cost;

    }

    //case 2:
    public static double calcTax(double amot, double inc)
    {
        double cost1;
        cost1=amot+inc;
        return cost1;

    }

    //case 3:
    public static void makeDeductions (int age, double amount)
    {
        double newAmount;
        if (age > 40)
        {
          newAmount=amount-100;
          JOptionPane.showMessageDialog(null, "Amount " + amount);
        }
        else 
        {
            JOptionPane.showMessageDialog(null, "No deductions at this time ");
        }
                 }
           } - error

    while (accountNumber != 999)
       {
          Accounting.displayHeading();

          switch (accountNumber)
          {
          case 1:
              calcSenior();
             break;

          case 2:
          calcTax();
          break;    

          case 3:
              makeDeductions();
              break;
              default: JOptionPane.showMessageDialog(null, "Bye! Have a nice day ");

          }//end switch

       }
      }
      }

4 个答案:

答案 0 :(得分:3)

问题是,你的while循环超出了类定义的主体......

public class Accounting {
    //...
} // End of class..

while...

这在Java中是非法的。您必须将while循环放在执行上下文中,例如方法或静态初始化块...

答案 1 :(得分:2)

您的代码布局异乎寻常。你的顶部和底部都有一块main

这是快速(编译)修复:

  • 删除JOptionPane.showMessageDialog(null, "The income tax is " + incomeTax);}末尾的大括号。

  • while循环移至该行后面。

  • 修复while循环中的方法调用,以便他们使用的参数正确无误。

不可否认,这并没有说明你的程序的正确性,只是说它会更接近于编译。

答案 2 :(得分:1)

makeDeductions (int age, double amount)方法的最后,你有这个:

 }
           } - error

第一个}关闭方法体,并且以下}关闭了类体,因此在Java中留下了- error外部类体,非法语法。此外,之后还有一个while,也是非法的外部方法体(当然还有非法的体外团体)

如果删除这两行(数字100和101,代码复制代码),问题就解决了(虽然- error可能会做某事,即使我无法弄清楚是什么,所以当小心时要小心删除它)。但还有一个:

  • 现在将成为makeDeductions (int age, double amount)方法体的一部分,您现在引用变量accountNumber,该变量在main(String[] args)方法中声明,因此在此上下文中不存在< / LI>
  • 当超载不存在时,您调用calcSenior(),您声明的唯一一个是calcSenior (double amt, double intest)(注意这两个参数)
  • calcTax()相同,您只声明了calcTax(double amot, double inc)
  • 然而makeDeductions ()的情况却相同,只声明了makeDeductions (int age, double amount)。但请注意,请记住,我假设您删除了我在开头指定的那些喜欢,因此此代码位于makeDeductions (int age, double amount) BODY中,这意味着如果使用int和double参数调用makeDeductions,则实际上是在调用这个方法,如果你没有停止条件来避免方法无限地调用自身(导致堆栈溢出),这会导致无限循环。

这就是我能找到的一切。我希望这对你有用:)

答案 3 :(得分:0)

也许您正在使用Eclipse作为IDE并尝试运行无法编译的代码。检查Eclipse中的Problems视图,并在执行应用程序之前修复编译错误。