Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java程序显示无关输出_Java_Math_Println - Fatal编程技术网

Java程序显示无关输出

Java程序显示无关输出,java,math,println,Java,Math,Println,我在做简单的java编程。但是我找不到为什么我的代码不显示exect输出。它应该打印给定数字的sqrt,但输出为0 import java.lang.*; class Calculator{ double i; double x=Math.sqrt(i); } public class MultipleObject { public static void main(String[] args) { // TODO Auto-gener

我在做简单的java编程。但是我找不到为什么我的代码不显示exect输出。它应该打印给定数字的sqrt,但输出为0

import java.lang.*;
class Calculator{
    double i;
    double x=Math.sqrt(i);
    
}
public class MultipleObject {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Calculator a=new Calculator();
        a.i = 16;
        System.out.println(a.x);

    }

}
您没有将x(Math.sqrt(i))设置在正确的位置

import java.lang.*;
class Calculator{
    double i;
//  double x=Math.sqrt(i); // won't work here
    double x;
    
}
public class MultipleObject {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Calculator a=new Calculator();
        a.i = 16;
      // you could do it here
        a.x = Math.sqrt(a.i);
        System.out.println(a.x);

    }

}
或者你可以做的不是把它变成一个变量,而是把它变成一个方法

  public double getX() {
    return Math.sqrt(this.i);
  }

当您创建
计算器
的实例时,将计算
x
,此时它是
0.0

您应该通过构造函数传递
i
,并在构造函数或方法中计算
x

class Calculator {
   public final double x; 
   Calculator(double i) {
      this.x = Math.sqrt(i);
   }
}
> new Calculator(100).x
$1 ==> 10.0

我想你应该看看一些基本的Java教程,很简单:当你调用
a.I=16时,你不会改变
x的值
x
设置为
sqrt(0)
。为什么
double x=Math.sqrt(i)在实例字段级别不起作用?它会。@GiorgiTsiklauri它不会,因为我还没有初始化。实例字段总是初始化:)@ControlAltDel这是另一点,但它会在运行时崩溃。我的意思是,语义上没有错
i
可以通过构造函数初始化,因为它不是静态绑定的,构造函数将在调用
Math.sqrt
之前执行。@AlexRudenko如果您的意思是初始化为null或0,那么是的。但这对给定代码的对话没有帮助