Reputation: 35
I get this error "no enclosing instance of type oppgave1 is accessible", when i wrote "new Triangle();". I need som help to explain me where i did wrong (about the triangle class). I'm new beginning in java.Thanks for advance.
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()) ;
}
}
}
Upvotes: 1
Views: 188
Reputation: 1499790
Triangle
is currently an inner class - which means you can only create it by also having an instance of the enclosing class. Simple options:
Triangle
a top-level (non-nested) class.Triangle
(See the Java tutorial for more on nested/inner classes.)
Personally I'd recommend the first course of action - nested classes can certainly be useful, but I'd recommend using top-level classes unless there's a specific benefit from a nested class.
Additionally, even though you can put multiple classes in the same source file if at most one of them is public (and therefore has the same name as the file) I'd recommend putting each top-level class in its own file, named according to the class.
Upvotes: 5