2011-12-02 91 views
-3

我的代码是一个简单的自动贩卖机。我使用集中parttern编码。但是,我发现了一些错误,比如在课堂上veding_machine,某些东西不能被解析为类型

Ls[3]=new nosmall_cups(); 
Ls[4]=new nolarge_cups(); 
Ls[5]=new exit(); 
Ls[6]=new start(); 

这些错误都是一样的: - 我用LS [当每次“在这一行 多个标志nosmall_cups不能被解析为一个类型” 并且还]在类veding_machine,总有退出错误“LS不能被解析为一个变量”,例如在下面的代码:

public void small_cup(){ 
     st.small_cup(); 
     if(st.getId()==1){ 
      //s=2; 
      st=Ls[1]; 
     } 
     if(st.getId()==2){ 
      //s=2; 
      st=Ls[2]; 
     } 
    } 

这种自动售货机的整个代码如下:

import java.util.*; 
class veding_machine{ 
    State st; 
    private int price; 
    private int k; 
    private int k1; 
    private int t; 
    private int s; 
     public veding_machine(){ 

     State[] Ls=new State[7]; 
     Ls[0]=new idle(); 
     Ls[1]=new coins_inserted(); 
     Ls[2]=new sugar(); 
     Ls[3]=new nosmall_cups(); 
     Ls[4]=new nolarge_cups(); 
     Ls[5]=new exit(); 
     Ls[6]=new start(); 
     k=0; 
     k1=0; 
     t=0; 
     price=0; 

    } 
    public void setK(int k){ 
     this.k=k; 
    } 
    public int getK(){ 
     return k; 
    } 
    public void setT(int t){ 
     this.t=t; 
    } 
    public int getT(){ 
     return t; 
    } 
    public void setK1(int k1){ 
     this.k1=k1; 
    } 
    public int getK1(){ 
     return k1; 
    } 
    public void setPrice(int price){ 
     this.price=price; 
    } 
    public int getPrice(){ 
     return price; 
    } 
    public void setS(int s){ 
     this.s=s; 
    } 
    public int getS(){ 
     return s; 
    } 

    public void coin(){ 
     st.coin(); 
     if(st.getId()==0){ 
      if(t+25<price){ 
       // t=t+25; 
       st=Ls[0]; 
      } 
      if(t+25>=price && price>0){ 
       //s=0; 
       //t=0; 
       st=Ls[1]; 
      } 
     } 
     else if(st.getId()==1){ 
      if(k1>1 && s==2){ 
       //k1=k1-1; 
       st=Ls[0]; 
      }else{ 
       st=Ls[1]; 
      } 
     } 
     else if(st.getId()==2){ 
      st=Ls[2]; 
     } 
     else if(st.getId()==3){ 
      st=Ls[3]; 
     } 
     else if(st.getId()==4){ 
      st=Ls[4]; 
     } 
    } 
    public void small_cup(){ 
     st.small_cup(); 
     if(st.getId()==1){ 
      //s=2; 
      st=Ls[1]; 
     } 
     if(st.getId()==2){ 
      //s=2; 
      st=Ls[2]; 
     } 
    } 
    public void large_cup(){ 
     st.large_cup(); 
     if(st.getId()==1){ 
      //s=1; 
      st=Ls[1]; 
     } 
     if(st.getId()==2){ 
      //s=2; 
      st=Ls[2]; 
     } 
    } 
    public void sugar(){ 
     st.sugar(); 
     if(st.getId()==1){ 
      st=Ls[2]; 
     } 
     if(st.getId()==2){ 
      st=Ls[1]; 
     } 
    } 
    public void tea(){ 
     st.tea(); 
     if(st.getId()==1){ 
      if(k>1&&s==1){ 
       //k=k-1; 
       st=Ls[0]; 
      } 
      if(k1>1&&s==2){ 
       //k1=k1-1; 
       st=Ls[0]; 
      } 
      if(k==1&&s==1){ 
       //k=k-1; 
       st=Ls[3]; 
      } 
      if(k1==1&&s==2){ 
       //k1=k1-1; 
       st=Ls[4]; 
      } 
     } 
     if(st.getId()==2){ 
      if(k==1&&s==1){ 
       //k=k-1; 
       st=Ls[3]; 
      } 
      if(k1==1&&s==2){ 
       //k1=k1-1; 
       st=Ls[4]; 
      } 
      if(k1>1&&s==2){ 
       //k1=k1-1; 
       st=Ls[0]; 
      } 
      if(k>1&&s==1){ 
       //k=k-1; 
       st=Ls[0]; 
      } 
     } 
    } 
    public void insert_large_cups(int n){ 
     st.insert_large_cups(n); 
     if(st.getId()==0){ 
      if(n>0){ 
      //k=k+n; 
      st=Ls[0]; 
      } 
     } 
     if(st.getId()==3){ 
      if(n>0){ 
       //k=n; 
       st=Ls[0]; 
      } 
     } 
    } 
    public void insert_small_cups(int n){ 
     st.insert_small_cups(n); 
     if(st.getId()==0){ 
      if(n>0){ 
       //k1=k1+n; 
       st=Ls[0]; 
      } 
     } 
     if(st.getId()==4){ 
      if(n>0){ 
       //k1=n; 
       st=Ls[0]; 
      } 
     } 
    } 
    public void set_price(int p){ 
     st.set_price(p); 
     if(st.getId()==0){ 
      if(p>0){ 
       //price=p; 
       st=Ls[0]; 
      } 
     } 

    } 
    public void cancle(){ 
     st.cancle(); 
     if(st.getId()==1){ 
      st=Ls[0]; 
     } 
     if(st.getId()==2){ 
      st=Ls[0]; 
     } 
    } 
    public void dispose(){ 
     st.dispose(); 
     if(st.getId()==0){ 
      st=Ls[5]; 
     } 
    } 
} 
class State{ 

    veding_machine vm; 

    int id; 

    public void coin(){} 
    public void small_cup(){} 
    public void large_cup(){} 
    public void sugar(){} 
    public void tea(){} 
    public void insert_large_cups(int n){} 
    public void insert_small_cups(int n){} 
    public void set_price(int p){} 
    public void cancle(){} 
    public void dispose(){} 
    public int getId(){ 
     return id; 
     } 

} 
// operation of idle class 
class idle extends State{ 
// idle i; 
    veding_machine vm; 
    public void coin(){ 
     if(vm.getT()+25<vm.getPrice()){ 
      vm.setT(vm.getT()+25); 
     } 
     if((vm.getT()+25>=vm.getPrice())&&(vm.getPrice()>0)){ 
      vm.setS(0); 
      vm.setT(0); 
     } 
    } 
    public void insert_small_cups(int n){ 
     if(n>0){ 
      vm.setK1(vm.getK1()+n); 
     } 
    } 
    public void insert_large_cups(int n){ 
     if(n>0){ 
      vm.setK(vm.getK()+n); 
     } 
    } 
    public void set_price(int p){ 
     if(p>0){ 
      vm.setPrice(p); 
     } 
    } 
    public void dispose(){ 
     System.exit(0); 
    } 
} 
//operation of coins_inserted class 
class coins_inserted extends State{ 
    veding_machine vm; 

    public void coin(){ 
     vm.setT(0); 
     System.out.println("return coins"); 
    } 
    public void cancel(){ 
     vm.setT(0); 
     System.out.println("return coins"); 
    } 
    public void sugar(){ 

    } 
    public void small_cup(){ 
     vm.setS(2); 
    } 
    public void large_cup(){ 
     vm.setS(1); 
    } 
    public void tea(){ 
     if(vm.getK()==1&&vm.getS()==1){ 
      vm.setK(vm.getK()-1); 
      System.out.println("dispose large cup of tea;"); 
     } 
     if(vm.getK1()==1&&vm.getS()==2){ 
      vm.setK1(vm.getK1()-1); 
      System.out.println("dispose small cup of tea;"); 
     } 
     if(vm.getK()>1&&vm.getS()==1){ 
      vm.setK(vm.getK()-1); 
      System.out.println("dispose large cup of tea;"); 
     } 
     if(vm.getK1()>1&&vm.getS()==2){ 
      vm.setK1(vm.getK1()-1); 
      System.out.println("dispose small cup of tea;"); 
     } 
    } 
    public void cancle(){ 
      vm.setT(0); 
      System.out.println("return coins"); 
    } 
} 
//operation of sugar class 
class sugar extends State{ 
    veding_machine vm; 

    public void coin(){ 
     vm.setT(0); 
     System.out.println("return coins"); 
    } 
    public void small_cup(){ 
     vm.setS(2); 
    } 
    public void large_cup(){ 
     vm.setS(1); 
    } 
    public void sugar(){ 

    } 
    public void tea(){ 
     if(vm.getK()==1&&vm.getS()==1){ 
      vm.setK(vm.getK()-1); 
      System.out.println("dispose large cup of tea;"); 
     } 
     if(vm.getK1()==1&&vm.getS()==2){ 
      vm.setK1(vm.getK1()-1); 
      System.out.println("dispose small cup of tea;"); 
     } 
     if(vm.getK()>1&&vm.getS()==1){ 
      vm.setK(vm.getK()-1); 
      System.out.println("dispose large cup of tea with sugar;"); 
    } 
     if(vm.getK1()>1&&vm.getS()==2){ 
      vm.setK1(vm.getK1()-1); 
      System.out.println("dispose small cup of tea with sugar;"); 
     } 
} 
//operation of nolarge_cups class 
class nolarge_cups extends State{ 
    veding_machine vm; 
    public void coin(){ 
     vm.setT(0); 
     System.out.println("return coins"); 
    } 
    public void insert_large_cups(int n){ 
     if(n>0){ 
      vm.setK(n); 
     } 
    } 
} 
//operation of nosmall_cups class 
class nosmall_cups extends State{ 
    veding_machine vm; 

    public void coin(){ 
     vm.setT(0); 
     System.out.println("return coins"); 
    } 
    public void insert_small_cups(int n){ 
     if(n>0){ 
      vm.setK1(n); 
     } 
    } 
} 

//operation of start class 
class start extends State{ 
    public void veding_machine(){ 
     int k=0; 
     int t=0; 
     int price=0; 
     int k1=0; 
    } 
} 
//operation of exit class 
class exit extends State{} 
public static void main(String[] args) { 
    //idle i; 
    //coins_inserted ci; 
    //sugar sg; 
    //nosmall_cups nsc; 
    //nolarge_cups nlc; 
    //exit et; 
    //start st; 
    int b; 
    char ch1; 

    System.out.println("*****CS589 Fall 2010***** \n"+ 
         "******PROJECT********\n"+ 
         "******DEMO******\n"); 
    // PutLines(3); 
    veding_machine vm; 
      ch1='1'; 
      while(ch1!='q'){ 
       System.out.println("DRIVE for the vending machine\n"); 
       System.out.println("  0. coin() \n"); 
       System.out.println("  1. small_cup() \n"); 
       System.out.println("  2. large_cup() \n"); 
       System.out.println("   3. sugar() \n"); 
       System.out.println("   4. tea() \n"); 
       System.out.println("   5. insert_large_cups(int n) \n"); 
       System.out.println("   6. insert_small_cups(int n) \n"); 
       System.out.println("   7. set_Price(int p) \n"); 
       System.out.println("   8. cancle() \n"); 
       System.out.println("   9. dispose() j\n"); 

       System.out.println("   Testing-related methods\n"); 
       System.out.println("   a. show_variables() \n"); 
       System.out.println("   q. Quit Vending Machine class driver \n"); 

       Scanner scan=new Scanner(System.in); 
       ch1=(char)scan.nextInt(); 

       switch(ch1){ 

       case 'a': 
         System.out.println(" show_variables() testing-related method "); 

       } 


      } 

    } 

} 
+2

Ah..stick with Java naming conventions !!!!!它使您的代码非常难以读取,因此很难排除故障。 – mre

+0

等等,你是不是应该把它们放在各自的文件中? – Viruzzo

+0

我强烈建议您阅读Java的类,变量,方法和包的命名约定。没有编译代码,我猜它试图将Ls解析为一个类型,因为它以大写字母开头。 – DPM

回答

1

您的Ls变量对于其他方法而言是超出可见范围的,因为它仅在veding_machine构造函数中声明。让它成为一个领域,以便其他方法也可以看到它。

0

声明为“nosmall_cups”变量的编译时类型的类不存在,与使用它的类不在同一个包中,或者您忘记导入它。

1

你忘了关闭你的糖类(最后缺少)。因此,您在Sugar下的课程无法识别。

在任何体面的IDE中体面的格式化在眨眼之间就已经显露出来了。