返回错误值的方法

阿迪亚

我在课堂上遇到这个奇怪的错误。我有这个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列表之后。

*****编辑******实际上发现这是一个愚蠢的错误。但是我现在面临另一个奇怪的错误。

op1 = thisNode.returnOP1();
op2 = thisNode.returnOP2();
op3 = thisNode.returnOP3();

在这里,我像之前一样得到op1,op2和op3。返回时,我检查了返回正确的值。例如,对于STOREI 20 a,我返回op1 = 20,而op2 = a

但是当我在那三行代码之后收到它时,我得到的值是错误的。我得到op1 = 20,op2 = $ s,op3 = a

为什么会这样呢?

虚无

我在此示例中看到的唯一问题是:

if (o1 != null) System.out.format(" ",o1);

这些行中的每一行都应包含%s在空字符串中:

if (o1 != null) System.out.format(" %s",o1);
if (o2 != null) System.out.format(" %s",o2);
if (o3 != null) System.out.format(" %s",o3);

没有它,您将不会打印任何内容。

输出:

OP1: 20, OP2: a, OP3: null
;STOREI 20 a

您可能还需要考虑以下几点:

System.out.format("%n");

而不是使用\n,请%n在格式化的字符串中使用换行符。它与平台无关。

*****编辑******实际上发现这是一个愚蠢的错误。但是我现在面临另一个奇怪的错误。

op1 = thisNode.returnOP1(); op2 = thisNode.returnOP2(); op3 = thisNode.returnOP3(); 在这里,我像之前一样得到op1,op2和op3。返回时,我检查了返回正确的值。例如,对于STOREI 20 a,我返回op1 = 20,而op2 = a

但是当我在那三行代码之后收到它时,我得到的值是错误的。我得到op1 = 20,op2 = $ s,op3 = a

为什么会这样呢?

如果没有用于您returnOP方法的代码,这很难说,但是基于上一个问题,我敢打赌这个问题是相似的。

鉴于这种:

public String returnOP1() { return op1; }
public String returnOP2() { return op2; }
public String returnOP3() { return op3; }

和这个:

    System.out.println(irNode.returnOP1());
    System.out.println(irNode.returnOP2());
    System.out.println(irNode.returnOP3());

我得到这个:

20
a
null

那告诉我,对您来说,它returnOP2()被写成return$s而不是op2或被op2设置为$s,并且returnOP3()被写成return op2

但是,如果没有代码,就无法确定。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章