当我有滚动代码时怎么可能。 当我希望它打印12时,有一种打印10的方法:
public class Opgave1d {
PrintStream out;
int p = 5;
int q = 10;
public Opgave1d() {
out = new PrintStream(System.out);
}
void methode1(int p) {
this.p = p + 2;
q = 4 * p;
out.printf("%d\n%d\n", p, q);
}
void start(){
methode1(q);
}
}
它怎么可能打印10和40,40我得到它,但为什么它不打印: 12 40 ???? 我感谢任何帮助!
答案 0 :(得分:5)
你正在隐藏你的变量。
this.p
引用实例的p
变量,而p
引用本地参数变量。
答案 1 :(得分:4)
因为它打印p
(局部变量)而不是this.p
(成员变量)。
答案 2 :(得分:2)
您实际上是使用out.printf
中的正式参数来隐藏属性。尝试打印this.p
。
我建议您在属性和形式参数之间使用不同的名称约定(属性上的前缀可能有帮助)。
答案 3 :(得分:1)
您没有更改p
的值;你改变了this.p
的价值。 这些变量不一样!
p
是methode1
中的局部变量,而this.p
是实例变量(类的成员)。如果您想引用this.p
,则必须明确指出,就像您在分配this.p = p+2
时上面两行一样。
答案 4 :(得分:1)
因为它打印了局部变量p
out.printf("%d\n%d\n", p, q);
不是会员
out.printf("%d\n%d\n", this.p, q);
答案 5 :(得分:0)
您打印的参数q是“p”的值,并且不会更改。如果你打印过self.p而不是p,它会给你12个。
答案 6 :(得分:0)
void start(){
methode1(12);
}
然后
void methode1(int 10) {
this.p = 10 + 2;
q = 4 * 10;
out.printf("%d\n%d\n", 10, 40);
}
儿子要打印12
和40
。您应该像这样引用您班级中的字段p
void methode1(int 10) {
this.p = p + 2;
q = 4 * p;
out.printf("%d\n%d\n", this.p, q);
}
当您使用关键字this
时,您会引用实例成员。
或避免使用字段和参数冲突的名称。
答案 7 :(得分:0)
你必须打印this.p才能看到所需的输出。这里的方法变量在本地范围内,所以你的p值为10