Java - 全局变量或其他东西

时间:2011-10-14 16:03:34

标签: java variables interface

我在理解Java中的赋值时遇到了问题。基本上我们正在写一个翻译,应该很简单。我已经两年没用Java了,所以几乎所有的知识都被遗忘了。

基本上,我需要创建的类看起来像theese。

    public interface Handler {
            void interpret(); 
    }


    public class Program implements Handler{
    @Override
        public void interpret() {
        // write the interpret logic here
        }
    }


    public class Stmt implements Handler {
    @Override
        public void interpret() {
            // write the interpret logic here
        }
    }

    public class Move extends Stmt implements Handler {

        public void interpret() {
        // write the interpret logic here
        }
    }
    public class Right extends Move implements Handler {
        public Right( Exp i )
        {
        interpret();
        }
        public void interpret() {
        // write the interpret logic here
        }
    }

测试程序需要像这样:

Program pro_inst = new Program();
pro_inst.addStmt(new Start(new Exp(new Numbers(23)), new Exp(new Numbers(
pro_inst.addStmt(new Forward(new Exp(new Numbers(15)) ) );
        ... ...
pro_inst.addStmt( new Stop());
... ..
我愚弄了几个小时,但我努力奋斗。例如,我在哪里分配变量以及如何使用解释器编辑它们?我看到我在测试程序中一直在创建新对象,我应该返回值还是什么?我需要在某处有一个变量x和y,它们都需要由解释器编辑。

谢谢你,如果你读到目前为止!

2 个答案:

答案 0 :(得分:0)

听起来你需要了解范围的想法。

您的程序类正在添加不同的操作(启动,停止,移动等等),每个操作都由“处理程序”封装。

每个处理程序都有所作为。由您来定义解释代码块。

因此,要使程序正常工作,必须将变量添加到Program类中,并在explain()方法中修改这些变量。

答案 1 :(得分:0)

不确定你的意思。但是当您实例化任何对象时,您应该使用构造函数 -

将数据存储在对象中
public class Numbers extends Expr{
  double value = 0;
  public Numbers(double x){
   this.value = x;
  }
  public Object evaluate(){
   return value;
  }
}

public class Start extends Stmt{
  Vector<Expr> expressions = new Vector<Expr>();
  public Stmt(Expr x1, Expr x2){
   expressions.add(x1);
   expressions.add(x2);
  }
  public void interpret(){
   // do something with your list of 'expressions'
  }
}

在执行测试程序时实例化的对象应该存储在构造函数中传递的值,如上所述。

例如,如果你想要一个作业,那么应该构建这样的东西

class Assignment extends Stmt{
 String lhs;
 Expr rhs;
 public Assignment(String lhs, Expr rhs){
  this.rhs=rhs; this.lhs=lhs;
 }
 public void interpret(Map context){
    context.put(lhs, rhs.evaluate());
 }
}
class VariableExpr extends Expr{
  String name;
  public VariableExpr(String name){ 
   this.name=name;
  }
  public Object evaluate(Map context){
   return context.get(name);
  }
}

在解释时,您需要为每个语句都有一个上下文。 如果您想要一个全局上下文,只需从空白HashMap开始,并将相同的地图传递给interpret方法的每次调用。

很抱歉,如果这不是您的要求!