当前位置: 首页 > 知识库问答 >
问题:

Java,为什么是数学。返回0的sqrt()

湛骏祥
2023-03-14

我想检查一个数字是否是正方形,一个数字是否是三角形。问题发生在sqrt(num)上,它为我测试的所有数字返回0
我正在使用一个在线编译器,尝试了几个编译器,所以这不是一个编译问题。尝试将num声明为double和int,结果相同
我是Java新手,但对编程并不陌生,我在网上搜索了几次,检查了我的代码,一切看起来都很好,在添加用于检查三角数的变量之前,它甚至按预期工作,但在声明变量checkTri和checkTriSqr后,这开始发生。我确信这与声明这些变量无关(几乎可以肯定),有人能帮我理解这里发生了什么吗?

import static java.lang.Math.sqrt;
import static java.lang.Math.round;

public class Parent{

public static void main(String[] args){

    class Number
    {
        public int num ;
        double numSqr = sqrt(num );
        double roundNumSqr =  round(numSqr) ;
        double checkTri = 8 * num + 1 ;
        double checkTriSqr = sqrt(checkTri) ;

        public void prinTest()
        {
            System.out.println(num);
            System.out.println(numSqr);
            System.out.println(roundNumSqr);
            System.out.println(checkTri);
            System.out.println(checkTriSqr);
        }

        public boolean isSqr()
        {
            if (numSqr == roundNumSqr)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public boolean isTriangular(){

            if (checkTriSqr * checkTriSqr == checkTri )
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

    Number number = new Number();

    number.num = 350;
    number.prinTest();
    System.out.println(number.isSqr());
    System.out.println(number.isTriangular());
 }
}

编辑:下面的屏幕截图来自我正在学习的教程,关于在方法中声明类!

共有3个答案

唐焕
2023-03-14

numSqrroundNumSqr等都是在对象创建时设置的,但是在创建对象之前,您不会将num设置为任何值。结果是,比如说,,

创建时:

num = 0

因此

numSqr = 0
roundNumSqr = 0

然后,您设置num=350,但您不重置NumSqr等的值,所以情况仍然如此:

numSqr = 0
roundNumSqr = 0

您需要为此类创建一个构造函数,该构造函数接受num的值,然后设置所有相应的值,以便仅在设置num之后设置它们(或者,添加一个更新所有值的“计算”函数)。

宓弘壮
2023-03-14

numSqr是在构造函数中创建的,而number。num=350 在对象构造之后声明。

您可以使用这样的构造函数

public Numer(int num){
    this.num=num;
    this.numSqr=sqrt(num)
    //.... ... ...
}

您还可以使用空构造函数和setter来设置number属性:

public void setNumber(int num){
    this.num=num;
    this.numSqr=sqrt(num)
    //.... ... ...
}

燕雨石
2023-03-14

这个:

public int num ;
double numSqr = sqrt(num );

在构造实例时将num初始化为0(在没有赋值的情况下为整数的默认值),然后立即将numSqr设置为零。

每次再次设置num,都需要重新计算sqrt()(可能通过提供方法setNum()并重新计算该方法中的所有内容)

顺便说一句,我不会叫你的类Number。标准Java类集中已经有一个Number类。

 类似资料:
  • 问题内容: 我有以下代码。应该返回表的最后一行的mysqli_insert_id()(在本例中为“ $ last_row”)始终返回0。为什么会这样呢? 问题答案: 并 没有 返回表的最后一排的ID。从文档中,它: …返回由查询产生的ID,该查询是对具有具有AUTO_INCREMENT属性的列的表进行的。如果最后一个查询不是or 语句,或者如果修改后的表没有带有属性的列,则此函数 将返回零 。 (

  • 问题内容: 我一直在获取要使用mysqli返回的行数方面遇到麻烦。即使确实有一些结果,我每次都会得到0。 为什么没有显示正确的数字? 问题答案: 您需要先调用num_rows查找: 请参阅文档,该文档显示在页面顶部附近(在主要说明区域中)…

  • 我知道(-0==0)是真的。我很想知道为什么-0 当我在stackoverflow执行上下文中运行这段代码时,它返回。 但是当我在浏览器控制台中运行相同的代码时,它返回。那是为什么呢?我试图在谷歌上搜索它,但没有找到任何有用的东西。这个问题可能不会给某个人的实际例子增加价值,我想了解JS是如何计算它的。

  • 问题内容: 我有这样的事情: 而且我总是得到“时钟周期为:0-0”的输出 知道为什么会这样吗? (仅给出一点点细节,something_else()函数使用蒙哥马利表示法执行从左到右的求幂运算,而且我不确定不确定something_else()函数确实花费了一些不可忽略的时间。) 这是在Linux上。uname -a的结果是: 问题答案: 该功能不测量CPU时钟周期。 C说: “ 从实现定义的仅与

  • 问题内容: 为什么以下返回0? 问题答案: 月份从0(一月)到11(十二月)进行编号。 参考:

  • 问题内容: 我正在尝试一个需要Facebook用户提供一些信息的网站,正在使用PHP和JS SDK。 我在PHP中有一个功能: 在一个类中,该类包含来自SDK的facebook对象。 然后在一个块上,我这样做: FB JS环境已正确设置(我认为),因此可以正常工作。因此,用户会弹出窗口并授权该站点。 问题是即使用户授权了该应用程序之后,$ user也始终为0,这意味着始终返回0,然后列出用户(包括