Java 确定简单程序的输出

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

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+", 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
}