我的代码是一台简单的自动售货机。我使用集中式parttern来编码。但是我发现了一些错误,例如在类veding_machine中,
Ls[3]=new nosmall_cups();
Ls[4]=new nolarge_cups();
Ls[5]=new exit();
Ls[6]=new start();
这些错误是相同的:“此行的多个标记 - 无法将nosmall_cups解析为“ 而且每当我在类veding_machine中使用Ls []时,总会出现错误“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 ");
}
}
}
}
答案 0 :(得分:1)
您的Ls变量超出了其他方法的可见范围,因为它仅在veding_machine构造函数中声明。使它成为一个字段,以便其他方法也可以看到它。
答案 1 :(得分:1)
你忘了关闭你的糖类(最后丢失)。因此,您的Sugar以下课程无法识别。
任何体面的IDE中的体面格式都在眨眼间就显露出来了。
答案 2 :(得分:0)
声明为“nosmall_cups”变量的编译时类型的类不存在,与使用它的类不在同一个包中,或者您忘记导入它。