Java 方法返回不正确的值

Java 方法返回不正确的值,java,class,methods,Java,Class,Methods,我在课堂上犯了一个奇怪的错误。我有一个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, S

我在课堂上犯了一个奇怪的错误。我有一个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");
}
这是我的编译器项目。这是在我创建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=thisNode.returnOP1();op2=thisNode.returnOP2();凤凰社3= 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()
被写入返回
$s
,而不是
op2
,或者
op2
被设置为
$s
,而
returnOP3()
被写入返回
op2


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

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

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=thisNode.returnOP1();op2=thisNode.returnOP2();凤凰社3= 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()
被写入返回
$s
,而不是
op2
,或者
op2
被设置为
$s
,而
returnOP3()
被写入返回
op2


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

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

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=thisNode.returnOP1();op2=thisNode.returnOP2();凤凰社3= 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()
被写入返回
$s
,而不是
op2
,或者
op2
被设置为
$s
,而
returnOP3()
被写入返回
op2


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

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

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=thisNode.returnOP1();op2=thisNode.returnOP2();凤凰社3= thisNode.returnOP3();这里,我得到了前面提到的op1、op2和op3。什么时候 返回,I c