2017-11-07 2 views
-1

Ich habe ein Stück Code geschrieben, der mir einige Fehler geben Sie bitte schauen Sie es und debuggen:Fehler ein Java-Paket in das Erstellen und Verwenden sie

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); } 
} 

Above Stück Code ist Paket, das ich erstellt haben, aber in meinem anderen Programm gibt es Fehler

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); 
     } 

    } 
} 

Obwohl es auch andere Fehler sein muss, aber

Error:cannot access Measure

This is compiler error muss zuerst debuggen.

+0

Welche IDE verwenden Sie?Und wie heißt die erste Klasse? –

+0

Können Sie bitte die genaue Ausgabe angeben? –

+0

@RobertKock gibt es keine Ausgabe mit Kompilierzeit Fehler. –

Antwort

0

Um eine klare Antwort zu bekommen, sollten Sie zuerst Ihre kompilierten Quellen aus dem Paket und von der Hauptstelle am selben Ort haben.

Do javac ./measurement/*.java und javac PackExample.java von Ihrem JavaCode Ordner. Und dann java PackExample, um Ihre Hauptleitung zu betreiben.

Aber Sie werden dann mit einem anderen Problem konfrontiert, das ich Ihnen zuerst zu erklären versuchte, eine Java-Datei kann nur eine Klasse öffentlich haben, so dass Sie die anderen nicht anrufen können. (Siehe that)

So sollten Sie eine andere Datei für jede Klasse erstellen:

Messung/Measure.java:

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

    public static void cubeVol(float a){ 
     Cube.vol(a); 
    } 
} 

Messung/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; 
    } 
} 

usw., usw. ... (Sie brauchen nicht eine Hauptfunktion in jeder Klasse des Pakets haben)

Hope this,

hilft Und nur für eine bessere Codierung werde ich noch etwas anderes erklären Sie Interfaces und Abstract classes.

Wie Sie verschiedene Formen haben alle die gleichen Methoden verwenden, können Sie eine abstrakte Klasse verwenden, um eine Form zum Beispiel beschreiben:

public abstract class Shape { 
    abstract double sa(float h, float r); 
    abstract double vol(float h, float r); 
} 

Und Sie es dann erweitern für alle Formen:

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; 
    } 
} 

Und Sie sollten auch ein wenig auf static methods schauen, in Ihrem Fall brauchen Sie sie nicht unbedingt. Sie können die Parameter Ihrem Objekt direkt über den Konstruktor geben.

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; 
    } 
} 

Mit abstrakten Klasse:

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

@HimanshuBhatt Es hat funktioniert? –

+0

abstrakte Methode arbeitete für mich. Vielen Dank –

Verwandte Themen