Java - Глобальная переменная или что-то - PullRequest
0 голосов
/ 14 октября 2011

У меня проблемы с пониманием задания в Java.В основном мы пишем переводчик и должны быть простыми.Я не использую Java более 2 лет, поэтому почти все мои знания забыты.

По сути, классы, которые мне нужно создать, выглядят как эти.

    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 голосов
/ 14 октября 2011

Не уверен, что ты имеешь ввиду.но когда вы создаете экземпляр любого объекта, вы должны хранить данные, используя объект, используя конструктор -

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.

Извините, если это не то, о чем вы просите!

0 голосов
/ 14 октября 2011

Похоже, вам нужно понять идею области действия.

Ваш программный класс добавляет различные действия (запуск, остановка, перемещение и т. Д.), Каждое из которых заключено в «Обработчик».

Каждый обработчик что-то делает.Это зависит от вас, чтобы определить блоки кода интерпретации.

Таким образом, чтобы ваша программа работала, вам нужно будет добавить переменные в класс Program и изменить эти переменные в ваших методах interpret ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...