创建并使用java包时出错

创建并使用java包时出错,java,compiler-errors,packages,Java,Compiler Errors,Packages,我已经写了一段代码,它给了我一些错误,请查看并调试它: package measurement; import java.util.*; class Cylinder { static double sa(float h,float r) { return 2*3.14*r*h; } static double vol(float h,float r) { return 3.14*r*r*h; } } class Sphere { static double sa(f

我已经写了一段代码,它给了我一些错误,请查看并调试它:

package measurement;
import java.util.*;

class Cylinder {
    static double sa(float h,float r) { return 2*3.14*r*h; }
    static double vol(float h,float r) { return 3.14*r*r*h; }
}

class Sphere {
    static double sa(float r) { return 4*3.14*r*r; }
    static double vol(float r) { return 4/3*3.14*r*r*r; }
}

class Cube {
    static public double sa(float a) { return 6*a*a; }
    static public double vol(float a) { return a*a*a; }
}

public class Measure {
    public static void main(String arg[]) {}
    public static void cubeSA(float a) { Cube.sa(a); }
    public static void cubeVol(float a) { Cube.vol(a); }
}
上面的代码是我创建的包,但在我的另一个程序中,它给出了错误

无法访问类度量值

虽然肯定还有其他错误,但是

错误:无法访问度量值


需要首先进行调试。

因此,要得到一个明确的答案,首先您应该将来自包和main的编译源代码放在同一位置

JavaCode
文件夹中执行
javac./measurement/*.java
javac PackExample.java
。然后
javapackexample
运行主程序

但是您将面临另一个问题,我试图首先向您解释,一个java文件只能有一个公共类,因此您将无法调用其他类。(见附件)

因此,您应该为每个类创建另一个文件:

测量/Measure.java

public class Measure{
    public static void cubeSA(float a)
    { 
        Cube.sa(a);
    }

    public static void cubeVol(float a){
        Cube.vol(a);
    }
}
public class Cylinder {
    static double sa(float h,float r)
    {
        return 2*3.14*r*h;
    }

    static double vol(float h,float r)
    {
        return 3.14*r*r*h;
    }
}
测量/cyland.java

public class Measure{
    public static void cubeSA(float a)
    { 
        Cube.sa(a);
    }

    public static void cubeVol(float a){
        Cube.vol(a);
    }
}
public class Cylinder {
    static double sa(float h,float r)
    {
        return 2*3.14*r*h;
    }

    static double vol(float h,float r)
    {
        return 3.14*r*r*h;
    }
}
等,等。。。(您不需要在包的每个类中都有一个主函数)

希望这有帮助

为了更好地编写代码,我将向您和您解释另一件事

由于不同的形状都使用相同的方法,因此可以使用描述形状的抽象类,例如:

public abstract class Shape {
    abstract double sa(float h, float r);
    abstract double vol(float h, float r);
}
然后将其扩展到所有形状:

public class Cylinder extends Shape {
    private final float PI = 3.14159;

    @Override
    double sa(float h, float r)
    {
        return 2*PI*r*h;
    }

    @Override
    double vol(float h, float r)
    {
        return PI*r*r*h;
    }
}
你也应该多看看,在你的情况下,你不一定需要它们。您可以通过构造函数直接为对象提供参数

public class Cylinder extends Shape {
    private final float PI = 3.14159;
    private final float height;
    private final float radius;

    public Cylinder(float h, float r) {
        height = h;
        radius = r;
    }

    @Override
    double sa()
    {
        return 2*PI*radius*height;
    }

    @Override
    double vol()
    {
        return PI*radius*radius*height;
    }
}
使用抽象类:

public abstract class Shape {
    abstract double sa();
    abstract double vol();
} 

你用的是什么IDE?第一个类的名称是什么?您能提供确切的输出吗?@RobertKock没有出现编译时错误的输出。您可以查看一下并尝试修复它?@JoachimHuet使用“Geany”作为我的IDE,第一个类的名称(我在其中创建了包)是Measure.java,另一个是PackExample.java