1

当我写“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()) ;
    }
 }

}

4

1 回答 1

5

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

  • Triangle创建一个顶级(非嵌套)类。
  • 使其成为静态嵌套类
  • 在构造的实例时提供封闭类的实例Triangle

(有关嵌套/内部类的更多信息,请参阅Java 教程。)

就我个人而言,我会推荐第一个行动方案——嵌套类当然很有用,但我建议使用顶级类,除非嵌套类有特定的好处

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

于 2013-11-08T10:12:38.323 回答