Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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 - Fatal编程技术网

Java 使用位于超类中的另一个方法中的参数调用方法

Java 使用位于超类中的另一个方法中的参数调用方法,java,math,Java,Math,我想知道如何在getToD中调用getJD()并保持参数不变(或者临时将参数设置为main中的变量并将变量调用到方法)。 稍后将在main方法中使用scanner类输入参数。 导入静态java.lang.Math.* public class jdMethods { public static double getJD(double y, double m, double d){ if (m<=2.0){ y--; m

我想知道如何在getToD中调用getJD()并保持参数不变(或者临时将参数设置为main中的变量并将变量调用到方法)。 稍后将在main方法中使用scanner类输入参数。 导入静态java.lang.Math.*

public class jdMethods
{
    public static double getJD(double y, double m, double d){
        if (m<=2.0){
            y--;
            m += 12.0;
        }
        double a=floor(y/100.0);
        return (365.25*(y+4716.0))+(30.6001*(m+1))+d+(2.0-a+floor(a/4.0))-1524.5;
    }

    public static double getToD(int h, int m, int s)
    {
        double a = getJD(a, a, a) + ((h-12)/24) + (m/1440) + (s/86400);
        return a;
    }
}
公共类方法
{
公共静态双getJD(双y、双m、双d){

如果(m由于您使用的是
double
int
,所有这些参数都是完整的,那么这些参数不是
对象
s,因此在传递给函数时会复制它的值,而不像
对象
s那样,对它的引用会传递给函数

关于您的代码,未定义变量
a
不允许编译:

double a=getJD(
a,a,a
)+((h-12)/24)+(m/1440)+(s/86400);


我不明白你想做什么,记住
a
from
getJD
方法与
a
into
getToD
不清楚你想做什么,但我假设你只想保存第一次getJD()的结果,并在getToD()中使用结果,所以我制作了一个私有的jd,并为它创建了一个setter和getter

import static java.lang.Math.*;

public class jdMethods
{

    private double _jd;
    public double getJD(){
        return _jd;
    }

    public void setJD(double y, double m, double d){
        if (m<=2.0){
            y--;
            m += 12.0;
        }
        double a=floor(y/100.0);
        _jd = (365.25*(y+4716.0))+(30.6001*(m+1))+d+(2.0-a+floor(a/4.0))-1524.5;
    }

    public double getToD(int h, int m, int s)
    {
        double a = getJD() + ((h-12)/24) + (m/1440) + (s/86400);
        return a;
    }
}

你的问题现在还不太清楚,无法回答。你能详细说明一下你真正想要什么吗?你没有在
getJD
函数的任何地方声明
a
。你应该声明然后使用它。目前你在
double a=floor(y/100.0)中声明
a
之前使用它在第二种方法中,
double a=getJD(a,a,a)+((h-12)/24)+(m/1440)+(s/86400);
我错了吗?是的@IrishEnigma,
double a=getJD(
a,a
)+((h-12)/24)+(m/1440)+(s/86400);
那些粗体的a不允许它编译。你说“保持参数不变”是什么意思?谢谢!我理解其中一些。为什么要摆脱
静态
?当
getJD()
声明为
public
时,意味着其他类可以使用它;对吗?第18行中的PS表示“局部变量可能尚未初始化”@IrishEnigma是否静态取决于您将如何使用它,请参见:@IrishEnigma是的,如果它是公共的,则意味着其他类可以在初始化对象后访问它。@IrishEnigma您应该先调用setJD(x,y,z)以将结果保存为jd,然后调用getToD()。因此,只有在不打算更改返回值的情况下才应使用静态方法。
jdMethods testRun = new jdMethods();
testRun.setJD(1,2,3);
System.out.println(testRun.getToD(3, 2, 1));