Java Android Math.sqrt返回0

Java Android Math.sqrt返回0,java,android,sqrt,Java,Android,Sqrt,x=0.965(…)y=-15.285(…)。这个abs是后来添加的,当时我正试图解决这个问题。promien总是0,我不知道为什么。我重新启动了Android Studio,没有帮助。有什么我看不见的吗 this.promien = Math.sqrt(Math.abs((this.x * this.x) + (this.y * this.y))); 我正在调试这个应用程序,所以我知道它是0。当x和y不等于0时,对数据库的请求也返回0 在这里,我举例说明: public class Pom

x=0.965(…)y=-15.285(…)。这个abs是后来添加的,当时我正试图解决这个问题。promien总是0,我不知道为什么。我重新启动了Android Studio,没有帮助。有什么我看不见的吗

this.promien = Math.sqrt(Math.abs((this.x * this.x) + (this.y * this.y)));
我正在调试这个应用程序,所以我知道它是0。当x和y不等于0时,对数据库的请求也返回0

在这里,我举例说明:

public class Pomiary {

    public Pomiary() {

    }


    public Pomiary(double x, double y, double z, Date data, int seria) {
        this.x = x;
        this.y = y;
        this.z = z;
        this.data = data;
        this.promien = Math.sqrt(Math.abs((this.x * this.x) + (this.y * this.y)));
        this.suma = Math.abs(x) + Math.abs(y) + Math.abs(z);
        this.seria = seria;


    }
    @DatabaseField(generatedId = true)
    int id;

    @DatabaseField(dataType = DataType.DATE_STRING, format = "yyyy/MM/dd HH:mm:ss.SSS")
    Date data;

    @DatabaseField
    double x;

    @DatabaseField
    double y;

    @DatabaseField
    double z;

    @DatabaseField
    double suma;

    @DatabaseField
    int seria;

    @DatabaseField
    double promien;

x,y,z是磁强计的值,你不需要abs,因为z*z总是非负的,你需要加两个非负的。你不可能得到零,因为其中一个产品是负数。很高兴看到您是如何创建此对象的

如果我这样定义Pomiary:

if (MainActivity.pomiary) {
double promien  = Math.sqrt(Math.pow(X,2) + Math.pow(Y,2));
                    Pomiary pomiary = null;
                    try {
                        pomiary =
                                new Pomiary(X, Y, Z,
                                        dateFormat.parse(dateFormat.format(new Date())), iloscZapisanychSeriiWBazie);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
这样称呼它:

public class Pomiary {
  double xx;
  double yy;
  double zz;
  Date dataa;
  double promien;
  double suma;
  int seria;

  public Pomiary()
  {

  }
    public Pomiary(double x, double y, double z, Date data, int seria) 
    {
        this.xx = x;
        this.yy = y;
        this.zz = z;
        this.dataa = data;
        this.promien = Math.sqrt(this.xx * this.xx + yy * this.yy);
        this.suma = Math.abs(x) + Math.abs(y) + Math.abs(z);
        this.seria = seria;
        System.out.println(this.promien);
    }

我得到了非零输出。

定义x和y的类型是什么?Promien是什么类型?您如何发现结果是0?您需要向我们展示一个完整的、可验证的示例。我可以向你保证,
Math.sqrt
Math.abs
两者都有效。如果你以任何方式对值进行平方运算,
abs
的意义是什么?错误模式说x和y都不是0。promien的值是什么?(注意,我编辑了我的答案。)this.promien是0,这就是问题所在。我在我的1中从调试模式上传了pic。postI将其添加到类中,我从中获得Pomiary类的值:double promien=Math.sqrt(Math.pow(x,2)+Math.pow(y,2));在调试模式下,我得到错误:找不到局部变量“promien”。。。这和那个问题有什么关系吗?我尝试重新启动电脑、手机和应用程序。什么也没发生…
promien
不是局部变量。它是类型为
Pomiary
的对象的字段。请参阅我最近的编辑,查看
this.xx
x
指的是内存中的不同位置。因此,如果不定义
promien
,则
this.promien
引用
Pomiary
的“this”实例中不存在的字段。您应该在答案中发布生成输出的代码。
public class JavaLab23{

    public static void main(String[] args) {

      Pomiary p = new Pomiary(3,4,5,null,0);
      System.out.println(p.promien);
    }

}