import java.awt.*;
import javax.swing.*;
public class S17Exam2Q5 extends JApplet {
int x = 5, y = 100, z = 15;
public void init( {
int x = z;
char z = 'X';
x = x - 3;
System.out.println("1: x, y, and z are "+x+" "+y+" "+z);
if (x <= y) {
x = 50;
y = y - 5;
int y = x + 3;
z = 'Q';
System.out.println("2: x, y, and z are "+x+" "+y+" "+z);
}
System.out.println("3: x, y, and z are "+x+" "+y+" "+z);
procExt(int z);
System.out.println("4: x, y, and z are "+x+" "+y+" "+z);
}
public void procExt(x) {
z = 10;
int x = 20;
y = y + 1;
System.out.println("5: x, y, and z are "+x+" "+y+" "+z);
}
}
根据考试答案键,这应该是答案:
1: x, y, and z are 12, 100, X
2: x, y, and z are 50, 53, Q
3: x, y, and z are 50, 95, Q
5: x, y, and z are 20, 96, 10
4: x, y, and z are 50, 96, Q
答案只对1和2有意义,3时我感到困惑。不应该3和2是相同的,因为它们一个接一个地打印,中间没有任何事情发生?并且它不应该是相同的5和4吗?我对procExt子程序发生的事情也有点困惑我写的答案在下面(星号表示不正确的答案)
1: x, y, and z are 12, 100, X
2: x, y, and z are 50, 53, Q
3: x, y, and z are 50, *53*, Q
5: x, y, and z are 20, *54*, 10
4: x, y, and z are *20*, *54*, *10*
答案 0 :(得分:0)
init
是一种覆盖从JApplet
开发的内部所有内容的方法。那里发生的事情只是覆盖if的范围。在init上初始化现有变量时,java会将其接受为其范围内具有相同名称的新变量。
答案 1 :(得分:0)
原因2&amp; 3之所以不同,是因为#2中的“y”基于语句int y = x + 3;
,该语句仅存在于其if
语句的范围内。第3行基于语句y = y - 5;
,但它存在于if
语句的范围之外,因为它在if语句开始之前声明(代码行5)。
5&amp; 5之间的差异4是类似的,不同的范围。 #5使用x
方法中声明的procExt(x)
,这是#4中使用的x
。
答案 2 :(得分:0)
3:int y(上次使用时间)为53.这并没有覆盖y,仍然设置为95. println使用&#39; int&#39;值,但下次y被调用默认为(非int数值)95,程序仍为y保存。
#p>#4和#5:您是否将问题列为1,2,3,4,5?你有5&amp;两次都向后,所以我会按照我看到的顺序(1,2,3,5,4)来引用它们最有意义的是做#5最后,即使我以其他方式列出它们。
5:使用int = 20设置x,所以这次x的读数将是20,y = y + 1将y推到96(并保持4)和z = 10因为它被放在那里
4:记住,#3有x = 50,y = 95,z = Q.注意proc()在4之前运行。使用proc(int z)保持&#39; Q&#39; z中#3的值一次。因为调用了proc(),所以y + 1值计算一次等于96.最后z = 10,因为(int z)调用将z的内容仅保留在值Q一次,z的实际值为&# 39; INT&#39; 20至少一次。这是由于int重载以前的值。使用后会弹出值。