Java 确定简单程序的输出
b的输出,从读取代码中,预期输出为0,而我得到1。 有人能解释一下如何得出这个结果吗Java 确定简单程序的输出,java,Java,b的输出,从读取代码中,预期输出为0,而我得到1。 有人能解释一下如何得出这个结果吗 int a=5, b=6, c=1; double x=0.5, y=1.0, z=1.5; c = fcn1(a, b); y = fcn2(y, a); b = fcn3(x, y); z = fcn3(c, b); System.out.println("a="+a+", b="+b+", c="+c); System.out.println("x="+x+", y="+y
int a=5, b=6, c=1;
double x=0.5, y=1.0, z=1.5;
c = fcn1(a, b);
y = fcn2(y, a);
b = fcn3(x, y);
z = fcn3(c, b);
System.out.println("a="+a+", b="+b+", c="+c);
System.out.println("x="+x+", y="+y+", z="+z);
}
static int fcn1(int i, int j){
int k = i-j;
return (++k);
}
static double fcn2(double t, int n){
return (t*n);
}
static int fcn3(double u, double v){
return fcn1((int)(u*v), 2);
}
static double fcn3(int r, int s){
return fcn2(r,s);
输出:
a=5,b=1,c=0
x=0.5,y=5.0,z=0.0
代码
我给你一个提示,你会明白的:
当您将双精度转换为int时,您将只获得自然部分,例如:
double d = 2.5;
int i = (int) d;
//i in this case equal to 2 and not 2.5
这种情况在这种方法中发生:
static int fcn3(double u, double v) {
return fcn1((int) (u * v), 2);//u = 0.5 v = 5.0 ## 0.5 * 5.0 = 2.5 ## (int) 2.5 = 2
//-----------------------------------^^------^^-----------------^^----------------^
}
这一点之后的所有计算都很简单:
static int fcn1(int i, int j) {
int k = i - j; // i = 2 ## j = 2 ## 2 - 2 = 0
return (++k);//++0 = 1 <--------------------b
}
b我得到1你怎么得到0?欢迎来到堆栈溢出!看起来您需要学习使用调试器。请随便吃点。如果您以后仍然有问题,请随时返回,并提供一个演示您的问题的示例。@YCF_L哦,不,我是说,仅通过阅读代码,我就得到了0。。。这里缺了点,但不知道在哪里……啊!我发现我忘了使用y的新值,而是使用了1.0!非常感谢。
static int fcn1(int i, int j) {
int k = i - j; // i = 2 ## j = 2 ## 2 - 2 = 0
return (++k);//++0 = 1 <--------------------b
}