如何解决这个编译错误?

时间:2013-11-08 10:09:17

标签: java

当我写“new Triangle();”时,我收到此错误“没有封闭的oppgave1类型的实例可访问”。我需要帮助来解释一下我做错了什么(关于三角类)。我是java的新开始。感谢提前。

public static void main(String[] args) {

    Triangle T1 = new Triangle(1, 1, 1, "green", false);

    Scanner input = new Scanner(System.in);
    System.out.println("Enter three sides of the triangle: ");
    double side1 = input.nextInt();
    double side2 = input.nextInt();
    double side3 = input.nextInt();
    System.out.println("Enter a color: ");
    String color = input.nextLine();
    System.out.println("Enter true or false (to indicate triangle is filled or no): ");
    String isFilled = input.nextLine();
}

public class GeometricObject {
    //Data fields
    private String color = "blue";
    private boolean filled;

    //The default geometricObject/constructor
    public GeometricObject() {
        this("No color", false);
    }
    //The geometricObject with the specified colour and filled value
    public GeometricObject(String color, boolean filled) {
        this.color = color;
        this.filled = filled;
    }
    //Returning the colour
    public String getColor() {
        return color;
    }
    //Setting a new colour
    public void setColor(String color) {
        this.color = color;
    }
    //Returning the filled
    public boolean isFilled() {
        return true;
    }
    //Setting a new filled
    public void setFilled(boolean filled) {
        this.filled = filled;
    }
    public String toString() {
        return (color + " - " + filled + " - ");

    }
}

public class Triangle extends GeometricObject {

    //Data fields
    double side1 = 1.0;
    double side2 = 1.0;
    double side3 = 1.0;
    //no-arg constructor
    Triangle(){
        this(0.0, 0.0, 0.0, "No color", false);
    }
    //A constructor that creates a triangle with the specified sides
    public  Triangle(double side1, double side2, double side3, String color, boolean filled) {
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
        setColor(color);
        setFilled(filled);
    }
    //Returning the sides 
    public double getside1() {
        return side1;
    }
    public double getside2() {
        return side1;
    }
    public double getside3() {
        return side1;
    }
    //setting the new ones
    public void setSide1(double side1) {
        this.side1 = side1;
    }
    public void setSide2(double side2) {
        this.side2 = side2;
    }
    public void setSide3(double side3) {
        this.side3 = side3;
    }
    //getting the rule
    /* public void setSide(double side1, double side2, double side3) {
        if (((this.side1 +  this.side2) >  this.side3 ) && ((this.side2 + this.side3) > this.side1)
                && ((this.side1 + this.side3) > this.side2))
                System .out.println("The rule (the sum of any two sides is greather"
                        + " than the other side) is adhered"); 

    } */
    //Returning area
    public double getArea() {
        double p = ((side1 + side2 + side3) / 2);
        double area = Math.sqrt(p * (p - side1) * (p - side2) * (p - side3));
        return area;
    }
    //Returning perimeter
    public double getPerimeter() {
        return (side1 + side2 + side3);
    }

    public String toString() {
        return (super.toString() + "Triangle: side1 = " + side1 + "side2 = " + side2 + " side3 = " + side3 +'\n'+
                "Area i: " + getArea() + '\n' + "Perimeter is: "  + getPerimeter()) ;
    }
 }

}

1 个答案:

答案 0 :(得分:5)

Triangle目前是内部类 - 这意味着您只能通过拥有封闭类的实例来创建它。简单的选择:

  • 使Triangle成为顶级(非嵌套)类。
  • 将其设为 static 嵌套类
  • 在构造Triangle
  • 的实例时提供封闭类的实例

(参见Java tutorial for more on nested/inner classes。)

我个人推荐第一个行动方案 - 嵌套类肯定是有用的,但我建议使用顶级类,除非嵌套类中有特定的好处

此外,即使您可以将多个类放在同一个源文件中,如果其中一个是公共的(因此与文件名称相同),我建议将每个类放在顶层-level类在它自己的文件中,根据类命名。

相关问题