Я получаю эту странную ошибку в своем классе. У меня есть этот класс IRNode, где у меня есть 3 строки: op1, op2 и op3. Когда я распечатываю их, прежде чем назначать их различным строкам, а затем распечатывать их, вы получаете разные значения. Он сохраняет их как null.Методы, возвращающие неверные значения
Выходные операторы печати что-то вроде этого:
OP1: 20, OP2: a, OP3: null
;STOREI
в то время как он должен быть:
OP1: 20, OP2: a, OP3: null
;STOREI 20 a
Мой код:
public IRNode (String op, String o1, String o2, String o3) {
opcode = op;
op1 = o1;
op2 = o2;
op3 = o3;
//IRNodeNext = null;
}
public void printIR() {
System.out.format("OP1: %s, OP2: %s, OP3: %s\n",op1, op2,op3);
String o1 = this.op1;
String o2 = this.op2;
String o3 = this.op3;
System.out.print(";"+opcode);
if (o1 != null) System.out.format(" ",o1);
if (o2 != null) System.out.format(" ",o2);
if (o3 != null) System.out.format(" ",o3);
System.out.format("\n");
}
PS. это для моего проекта компиляторов. Это происходит после создания списка AST и IRNode.
***** EDIT ****** Фактически выяснилось, что это была глупая ошибка. Но теперь я сталкиваюсь с другой странной ошибкой.
op1 = thisNode.returnOP1();
op2 = thisNode.returnOP2();
op3 = thisNode.returnOP3();
Здесь я получаю op1, op2 и op3, как раньше. При возврате, я проверил, я возвращаю правильные значения. Например, Для STOREI 20а Я возвращаю ОР1 = 20 и op2 = а
, но когда я получаю это только после того, как эти 3 строки кода, я получаю неправильные значения. Я получаю op1 = 20, op2 = $ s, op3 = a
Почему это происходит?
Что вы имеете в виду под «перед тем, как назначить их различным строкам, а затем распечатать их, дает разные значения, сохраняя их как null»? Единственная проблема, которую я вижу здесь, это то, что у вас есть '' '' где ''% s'' должно быть. Может быть? – nihilon
Это изменение должно быть новым вопросом, так как на исходный вопрос был дан ответ. Честно говоря, учитывая, какова была ваша первая проблема, я не удивлюсь, если эта проблема будет другой подобной ошибкой. Я воздержусь назвать это тем, что вы сделали, просто чтобы быть вежливым. Что такое код для методов «returnOP»? Он не похож на 'returnOP2()' или 'returnOP3()' возвращает то, что вы ожидаете от них. – nihilon
Эй, ты был прав. Это была аналогичная ошибка, из-за заявлений печати я получал неправильные значения. В моих функциях returnOP я просто возвращаю соответствующую строку OP. – Aditya