这个错误有什么问题? ----令牌上的语法错误";",{此令牌后的预期

时间:2011-12-02 02:00:49

标签: java

Syntax error on token ";", { expected after this token. 

我在第11行和第19行遇到了这个错误。有人能告诉我它有什么问题吗?

import java.util.*;
class veding_machine{
    State st;
    veding_machine vm;
    private int price;
    private int k;
    private int k1;
    private int t;
    private int s;
    State Ls[]=new State[7]; // 11th line

    Ls[0]=idle;
    Ls[1]=coins_inserted;
    Ls[2]=sugar;
    LS[3]=nsc;
    Ls[4]=nlc;
    Ls[5]=et;
    Ls[6]=st; // 19th line

 public veding_machine(){        k=0;        k1=0;       t=0;        price=0;
            }

    public void setK(int k){
         this.k=k;
    }

3 个答案:

答案 0 :(得分:1)

在构造函数中初始化该数组,不能像这样初始化它们,在声明数组时初始化它们,或者在构造函数或初始化块中初始化它们。并纠正拼写错误。看看这个tutorial

Ls[0]=idle;
Ls[1]=coins_inserted;
Ls[2]=sugar;
Ls[3]=nsc;
Ls[4]=nlc;
Ls[5]=et;
Ls[6]=st

答案 1 :(得分:0)

Ls的初始化应该在vending_machine构造函数中,并且应该创建类“idle”和“coins_inserted”等的实例...

Ls[0] = new idle();
Ls[1] = new coins_inserted();
Ls[2] = new sugar();
Ls[3] = new nsc();
Ls[4] = new nlc();
Ls[5] = new et();
Ls[6] = new st();

这些类需要扩展State类

class idle extends State {
  // ...
}

他们内部不需要状态实例。

    // removed, State st;
    public coins_inserted(){
      // removed, st=new State();
    }

答案 2 :(得分:0)

State Ls[]=new State[7]; // 11th line

这是一个实例化的数组。您应该将它放在构造函数或初始化块中。最好以Java方式初始化引用:

State[] Ls = new State[7];

LS[3]=nsc;

应该是

Ls[3]=nsc;

再次在构造函数或init块中初始化这些元素。

另外,我知道这不能回答这个问题,但我只想谈谈命名和风格。请将Vending_machine类命名为VendingMachine,并为其他对象提供更具描述性的名称,而不是模糊的字母。以下约定有助于您在一周/一个月/一年后回到您的代码并避免您试图弄清楚您到底在做什么。即使这只是学校中的一个小项目,也是您学习和实践这些惯例最重要的地方。

此外,当代码在美学上令人愉悦时,这很好。