创建和使用 java 包时出错
Error in creating a java package and using it
我写了一段代码,但出现了一些错误,请查看并调试它:
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); }
}
上面的代码是我创建的包,但在我的其他程序中它给出了错误
Class measure cant be access
my main(other) program is:
import measurement.*;
import java.util.*;
public class PackExample {
public static void main (String args[]) {
Scanner sc=new Scanner (System.in);
Measure m=new Measure();
Cylinder cy=new Cylinder();
Sphere s=new Sphere();
while (true)
{ System.out.println("Enter:\n1.CYLINDER\n2.CUBE3.SPHERE");
int x=sc.nextInt();
if(x==1)
{
System.out.println("Enter height of cylinder:");
float a=sc.nextfloat();
System.out.println("Enter radius of base of cylinder:");
float b=sc.nextfloat();
System.out.println("Surface area is "+cy.Cylinder.sa(a,b)+" unit sq.");
System.out.println("Surface area is "+cy.Cylinder.vol(a,b)+" unit cube");
}
else if(x==2)
{
System.out.println("Enter its Edge length:");
float a=sc.nextFloat();
System.out.println("Surface area is "+m.CubeSA(a)+" unit sq.");
System.out.println("Surface area is "+m.CubeVol(a)+" unit cube");
}
else if(x==3)
{
System.out.println("Enter Radius of Sphere:");
float r=sc.nextFloat();
System.out.println("Surface area is "+s.Sphere.sa(r)+" unit sq.");
System.out.println("Surface area is "+s.Sphere.vol(r)+" unit cube");
}
else System.exit(0);
}
}
}
虽然肯定还有其他错误但是
Error:cannot access Measure
This is compiler error
需要先调试
所以为了得到一个明确的答案,首先你应该在同一位置从包和主要文件中获得你的编译源。
从您的 JavaCode
文件夹中执行 javac ./measurement/*.java
和 javac PackExample.java
。然后 java PackExample
到 运行 你的主。
但是你会遇到另一个问题,我一开始就试图向你解释,一个java文件只能有一个classpublic,所以你不会'不能给其他人打电话。 (参见 that)
所以你应该为每个 class :
创建另一个文件
measurement/Measure.java:
public class Measure{
public static void cubeSA(float a)
{
Cube.sa(a);
}
public static void cubeVol(float a){
Cube.vol(a);
}
}
measurement/Cylinder.java:
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;
}
}
等等,等等 ...(你不需要在你的包的每个class中都有一个main函数)
希望这对您有所帮助,
为了更好的编码,我将向您解释另一件事Interfaces and Abstract classes。
因为你有不同的形状,都使用相同的方法,你可以使用抽象 class 描述形状,例如:
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;
}
}
而且您还应该看一下 static methods,在您的情况下您不一定需要它们。您可以直接通过构造函数将参数传递给您的对象。
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;
}
}
有摘要class :
public abstract class Shape {
abstract double sa();
abstract double vol();
}
我写了一段代码,但出现了一些错误,请查看并调试它:
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); }
}
上面的代码是我创建的包,但在我的其他程序中它给出了错误
Class measure cant be access
my main(other) program is:
import measurement.*;
import java.util.*;
public class PackExample {
public static void main (String args[]) {
Scanner sc=new Scanner (System.in);
Measure m=new Measure();
Cylinder cy=new Cylinder();
Sphere s=new Sphere();
while (true)
{ System.out.println("Enter:\n1.CYLINDER\n2.CUBE3.SPHERE");
int x=sc.nextInt();
if(x==1)
{
System.out.println("Enter height of cylinder:");
float a=sc.nextfloat();
System.out.println("Enter radius of base of cylinder:");
float b=sc.nextfloat();
System.out.println("Surface area is "+cy.Cylinder.sa(a,b)+" unit sq.");
System.out.println("Surface area is "+cy.Cylinder.vol(a,b)+" unit cube");
}
else if(x==2)
{
System.out.println("Enter its Edge length:");
float a=sc.nextFloat();
System.out.println("Surface area is "+m.CubeSA(a)+" unit sq.");
System.out.println("Surface area is "+m.CubeVol(a)+" unit cube");
}
else if(x==3)
{
System.out.println("Enter Radius of Sphere:");
float r=sc.nextFloat();
System.out.println("Surface area is "+s.Sphere.sa(r)+" unit sq.");
System.out.println("Surface area is "+s.Sphere.vol(r)+" unit cube");
}
else System.exit(0);
}
}
}
虽然肯定还有其他错误但是
Error:cannot access Measure
This is compiler error 需要先调试
所以为了得到一个明确的答案,首先你应该在同一位置从包和主要文件中获得你的编译源。
从您的 JavaCode
文件夹中执行 javac ./measurement/*.java
和 javac PackExample.java
。然后 java PackExample
到 运行 你的主。
但是你会遇到另一个问题,我一开始就试图向你解释,一个java文件只能有一个classpublic,所以你不会'不能给其他人打电话。 (参见 that)
所以你应该为每个 class :
创建另一个文件measurement/Measure.java:
public class Measure{
public static void cubeSA(float a)
{
Cube.sa(a);
}
public static void cubeVol(float a){
Cube.vol(a);
}
}
measurement/Cylinder.java:
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;
}
}
等等,等等 ...(你不需要在你的包的每个class中都有一个main函数)
希望这对您有所帮助,
为了更好的编码,我将向您解释另一件事Interfaces and Abstract classes。
因为你有不同的形状,都使用相同的方法,你可以使用抽象 class 描述形状,例如:
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;
}
}
而且您还应该看一下 static methods,在您的情况下您不一定需要它们。您可以直接通过构造函数将参数传递给您的对象。
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;
}
}
有摘要class :
public abstract class Shape {
abstract double sa();
abstract double vol();
}