Question

In: Computer Science

I have the following code for my java class assignment but i am having an issue...

I have the following code for my java class assignment but i am having an issue with this error i keep getting.

On the following lines:

return new Circle(color, radius);

return new Rectangle(color, length, width);

I am getting the following error for each line:

"non-static variable this cannot be referenced from a static context"

Here is the code I have:

/*
* ShapeDemo - simple inheritance hierarchy and dynamic binding.
*
* The Shape class must be compiled before the derived classes
* Circle, Rectangle, and Square can be compiled.
*
* The Shape, Circle, Rectangle, and Square classes
* must be compiled before this democlass can be compiled.
*
*/

import java.util.Scanner;

public class ShapeDemo
{
  
/**
* getShape - read a Shape's description and create the specific object
*/
public static Shape getShape()
{
Scanner sc = new Scanner(System.in);

// Continue asking for input until a valid shape entered, or 'done'
do {
System.out.println("\nEnter the shape's color (or 'done')...");
String color = sc.nextLine();
if (color.equalsIgnoreCase("done")) {
return null;
}
if (!color.equalsIgnoreCase("red") &&
!color.equalsIgnoreCase("blue") &&
!color.equalsIgnoreCase("green")) {
System.out.println(" Error - color must be 'red', 'blue', or 'green'");
continue;
}

System.out.println("Enter shape type...");
String name = sc.nextLine();
if (name.equalsIgnoreCase("circle")) {
System.out.println("Enter the radius...");
double radius = sc.nextDouble();
if (radius < 0.0) {
System.out.println("Radius must be non-negative");
continue;
}
return new Circle(color, radius);
} else if (name.equalsIgnoreCase("rectangle")) {
System.out.println("Enter the length and width...");
double length = sc.nextDouble();
double width = sc.nextDouble();
if (length < 0.0 || width < 0.0) {
System.out.println("length and width must be non-negative");
continue;
}
return new Rectangle(color, length, width);
} else if (name.equalsIgnoreCase("square")) {
System.out.println("Enter the length of a side...");
double length = sc.nextDouble();
if (length < 0.0) {
System.out.println("length must be non-negative");
continue;
}
return new Square(color, length);
} else {
System.out.println("shape name must be 'circle', 'rectangle', or 'square'");
continue;
}
} while (true);

}

/**
* main
*/
public static void main (String[] args)
{
Scanner sc = new Scanner(System.in);

// Create an array of Shape references larger than the maximum number
// of Shapes to be read (could also prompt for size).
Shape[] slist = new Shape[50];

// Read shapes until null returned. Note that this code doesn't know what
// specific type of Shape has been returned.
System.out.println("Enter a list of shapes - 'done' to end");
Shape sp;
int numShapes = 0;
while (null != (sp = getShape())) {
slist[numShapes++] = sp;
}

// Print the list of shapes. Get the specific Shape's information using
// dynamic binding to call the implementation of toString() defined for
// the actual type of Shape referenced.
System.out.println("\nThe list of shapes entered...");
for (int n = 0; n < numShapes; ++n) {
System.out.println(" " + slist[n].toString());
}

// Sort the list of shapes into ascending order by area. Get the each
// specific shape's area using dynamic binding to call the implementation
// of area() defined for the the actual type of Shape referenced.
System.out.println("\nSorting shapes into order by area...");


// TODO - call the sortArray method to sort the array of Shapes.
// Pass slist and numShapes as parameters.
sortArray(slist,numShapes);
// Print the sorted list of shapes.
System.out.println("\nThe sorted list of shapes...");
for (int n = 0; n < numShapes; ++n) {
System.out.println(" " + slist[n].toString());
}

// Keep console window alive until 'enter' pressed (if needed).
System.out.println();
System.out.println("Done - press enter key to end program");
String junk = sc.nextLine();
}

// TODO - add the sortArray method to sort the array of Shapes into
// ascending order. The array and number of shapes in it must be passed
// as parameters.
public static void sortArray(Shape[] slist, int numShapes)
{
int i,j;
Shape temp;
for(i=0; i<numShapes-1; i++)
for(j=i+1; j<numShapes; j++)
if(slist[i].area()>slist[j].area()){
temp=slist[i];
slist[i]=slist[j];
slist[j]=temp;
}
}
  
public class Shape
{
private String color;
public Shape(String color)
{
this.color=color;
}
public String getColor()
{
return color;
}
public double area()
{
return 0.0;
}
public String toString()
{
return "generic shape";
}
}
  
public class Circle extends Shape
{
private double radius;
public Circle(String color, double radius)
{
super(color);
this.radius=radius;
}
public double area()
{
return (Math.PI*Math.pow(this.radius, 2));
}
public double getRadius()
{
return radius;
}
public String toString()
{
return getColor()+" Circle with radius of "+radius+" and area of "+area();
}
}
  
public class Square extends Shape
{
private double length;
public Square(String color, double length)
{
super(color);
this.length=length;
}
public double area()
{
return length*length;
}
public double getLength()
{
return length;
}
public String toString()
{
return getColor()+" Square with side length of "+length+" and area of "+area();
}
}
  
public class Rectangle extends Square
{
private double width;
public Rectangle(String color, double length, double width)
{
super(color, length);
this.width=width;
}
public double area()
{
return getLength()*width;
}
public double getWidth()
{
return width;
}
public String toString()
{
return getColor()+" Rectangle with length of "+getLength()+" and width of "+width+" and area of "+area();
}
}
  
}

Solutions

Expert Solution

Shape.java :

public class Shape {
   private String color;

   public Shape(String color) {
       this.color = color;
   }

   public String getColor() {
       return color;
   }

   public double area() {
       return 0.0;
   }

   public String toString() {
       return "generic shape";
   }
}

********************************************

Circle.java :

public class Circle extends Shape {
   private double radius;

   public Circle(String color, double radius) {
       super(color);
       this.radius = radius;
   }

   public double area() {
       return (Math.PI * Math.pow(this.radius, 2));
   }

   public double getRadius() {
       return radius;
   }

   public String toString() {
       return getColor() + " Circle with radius of " + radius + " and area of " + area();
   }
}

****************************************

Rectangle.java :

public class Rectangle extends Square {
   private double width;

   public Rectangle(String color, double length, double width) {
       super(color, length);
       this.width = width;
   }

   public double area() {
       return getLength() * width;
   }

   public double getWidth() {
       return width;
   }

   public String toString() {
       return getColor() + " Rectangle with length of " + getLength() + " and width of " + width + " and area of "
               + area();
   }
}
******************************************

Square.java :

public class Square extends Shape {
   private double length;

   public Square(String color, double length) {
       super(color);
       this.length = length;
   }

   public double area() {
       return length * length;
   }

   public double getLength() {
       return length;
   }

   public String toString() {
       return getColor() + " Square with side length of " + length + " and area of " + area();
   }
}

*******************************************************

ShapeDemo.java :

/*
* ShapeDemo - simple inheritance hierarchy and dynamic binding.
*
* The Shape class must be compiled before the derived classes
* Circle, Rectangle, and Square can be compiled.
*
* The Shape, Circle, Rectangle, and Square classes
* must be compiled before this democlass can be compiled.
*
*/
//import package
import java.util.Scanner;
//Java class
public class ShapeDemo {

   /**
   * getShape - read a Shape's description and create the specific object
   */
   public Shape getShape() {
       Scanner sc = new Scanner(System.in);

// Continue asking for input until a valid shape entered, or 'done'
       do {
           System.out.println("\nEnter the shape's color (or 'done')...");
           String color = sc.nextLine();
           if (color.equalsIgnoreCase("done")) {
               return null;
           }
           if (!color.equalsIgnoreCase("red") && !color.equalsIgnoreCase("blue") && !color.equalsIgnoreCase("green")) {
               System.out.println(" Error - color must be 'red', 'blue', or 'green'");
               continue;
           }

           System.out.println("Enter shape type...");
           String name = sc.nextLine();
           if (name.equalsIgnoreCase("circle")) {
               System.out.println("Enter the radius...");
               double radius = sc.nextDouble();
               if (radius < 0.0) {
                   System.out.println("Radius must be non-negative");
                   continue;
               }
               return new Circle(color, radius);
           } else if (name.equalsIgnoreCase("rectangle")) {
               System.out.println("Enter the length and width...");
               double length = sc.nextDouble();
               double width = sc.nextDouble();
               if (length < 0.0 || width < 0.0) {
                   System.out.println("length and width must be non-negative");
                   continue;
               }
               return new Rectangle(color, length, width);
           } else if (name.equalsIgnoreCase("square")) {
               System.out.println("Enter the length of a side...");
               double length = sc.nextDouble();
               if (length < 0.0) {
                   System.out.println("length must be non-negative");
                   continue;
               }
               return new Square(color, length);
           } else {
               System.out.println("shape name must be 'circle', 'rectangle', or 'square'");
               continue;
           }
       } while (true);

   }

   /**
   * main
   */
   public static void main(String[] args) {
       // Object of ShapeDemo
       ShapeDemo d = new ShapeDemo();
       Scanner sc = new Scanner(System.in);

// Create an array of Shape references larger than the maximum number
// of Shapes to be read (could also prompt for size).
       Shape[] slist = new Shape[50];

// Read shapes until null returned. Note that this code doesn't know what
// specific type of Shape has been returned.
       System.out.println("Enter a list of shapes - 'done' to end");
       Shape sp;
       int numShapes = 0;
       while (null != (sp = d.getShape())) {
           slist[numShapes++] = sp;
       }

// Print the list of shapes. Get the specific Shape's information using
// dynamic binding to call the implementation of toString() defined for
// the actual type of Shape referenced.
       System.out.println("\nThe list of shapes entered...");
       for (int n = 0; n < numShapes; ++n) {
           System.out.println(" " + slist[n].toString());
       }

// Sort the list of shapes into ascending order by area. Get the each
// specific shape's area using dynamic binding to call the implementation
// of area() defined for the the actual type of Shape referenced.
       System.out.println("\nSorting shapes into order by area...");

// TODO - call the sortArray method to sort the array of Shapes.
// Pass slist and numShapes as parameters.
       sortArray(slist, numShapes);
// Print the sorted list of shapes.
       System.out.println("\nThe sorted list of shapes...");
       for (int n = 0; n < numShapes; ++n) {
           System.out.println(" " + slist[n].toString());
       }

// Keep console window alive until 'enter' pressed (if needed).
       System.out.println();
       System.out.println("Done - press enter key to end program");
       String junk = sc.nextLine();
   }

// TODO - add the sortArray method to sort the array of Shapes into
// ascending order. The array and number of shapes in it must be passed
// as parameters.
   public static void sortArray(Shape[] slist, int numShapes) {
       int i, j;
       Shape temp;
       for (i = 0; i < numShapes - 1; i++)
           for (j = i + 1; j < numShapes; j++)
               if (slist[i].area() > slist[j].area()) {
                   temp = slist[i];
                   slist[i] = slist[j];
                   slist[j] = temp;
               }
   }
}
=========================================

Output :


Related Solutions

I have the following assignment for probability class: I am supposed to write a routine (code)...
I have the following assignment for probability class: I am supposed to write a routine (code) in MATLAB that does solve the following problem for me: a) Generate N=10000 samples of a Uniform random variable (X) using the rand () command. This Uniform RV should have a range of -1 to +3. b) Generate (Estimate) and plot the PDF of X from the samples. You are not allowed to use the Histogram () command, any commands from the Matlab Statistics...
I'm getting an error with my code on my EvenDemo class. I am supposed to have...
I'm getting an error with my code on my EvenDemo class. I am supposed to have two classes, Event and Event Demo. Below is my code.  What is a better way for me to write this? //******************************************************** // Event Class code //******************************************************** package java1; import java.util.Scanner; public class Event {    public final static double lowerPricePerGuest = 32.00;    public final static double higherPricePerGuest = 35.00;    public final static int cutOffValue = 50;    public boolean largeEvent;    private String...
Hello i am working on an assignment for my programming course in JAVA. The following is...
Hello i am working on an assignment for my programming course in JAVA. The following is the assignment: In main, first ask the user for their name, and read the name into a String variable. Then, using their name, ask for a temperature in farenheit, and read that value in. Calculate and print the equivalent celsius, with output something like Bob, your 32 degrees farenheit would be 0 degrees celsius Look up the celsius to farenheit conversion if you do...
Hello, I am having difficulty with this assignment. I chose Amazon as my stock, but I...
Hello, I am having difficulty with this assignment. I chose Amazon as my stock, but I am confused on what they're asking :             Choose a stock that interests you. Utilizing Bloomberg (or other financial websites) as a source of data, collect the following      information:                         a. The stock’s Beta                         b. The rate of return on the market (S&P 500 Index)                         c. The risk-free rate (rRF)                         d. The last dividend paid (D0)...
I am having an issue with the Java program with a tic tac toe. it isn't...
I am having an issue with the Java program with a tic tac toe. it isn't a game. user puts in the array and it prints out this. 1. Write a method print that will take a two dimensional character array as input, and print the content of the array. This two dimensional character array represents a Tic Tac Toe game. 2. Write a main method that creates several arrays and calls the print method. Below is an example of...
hello, I am having an issue with a question in my highway engineering course. the question...
hello, I am having an issue with a question in my highway engineering course. the question is: An equal tangent sag vertical curve has an initial grade of –2.5%. It is known that the final grade is positive and that the low point is at elevation 82 m and station 1 + 410.000. The PVT of the curve is at elevation 83.5 m and the design speed of the curve is 60 km/h. Determine the station and elevation of the...
Hi, Working on a project in my group for class and I am having some issues...
Hi, Working on a project in my group for class and I am having some issues My part is current state of the business. It is a store and the annual sales are $460,000 Other info I have is: Ownership and Compensation; Percent Ownership Personal Investment Mitchell George, Founder & CEO 25% $125,000Katie Beauseigneur, COO 15% $75,000 Melissa Dunnells, CFO15% $75,000 Also, a medium coffee price from store is $3.75 Sarah Griffin, Marketing Officer 10% $50,000 Katharina Ferry, HR Director10%...
in java: In my code at have my last two methods that I cannot exactly figure...
in java: In my code at have my last two methods that I cannot exactly figure out how to execute. I have too convert a Roman number to its decimal form for the case 3 switch. The two methods I cannot figure out are the public static int valueOf(int numeral) and public static int convertRomanNumber(int total, int length, String numeral). This is what my code looks like so far: public static void main(String[] args) { // TODO Auto-generated method stub...
This is a JAVA assignment and i dont have the SinglyLinkedList class   Exercise 1 In this...
This is a JAVA assignment and i dont have the SinglyLinkedList class   Exercise 1 In this exercise, you will add a method swapNodes to SinglyLinkedList class. This method should swap two nodes node1 and node2 (and not just their contents) given references only to node1 and node2. The new method should check if node1 and node2 are the same node, etc. Write the main method to test the swapNodes method. Hint: You may need to traverse the list. Exercise 2...
JAVA JAVA JAVA Hey i need to find a java code for my homework, this is...
JAVA JAVA JAVA Hey i need to find a java code for my homework, this is my first java homework so for you i don't think it will be hard for you. (basic stuff) the problem: Write a complete Java program The transport Company in which you are the engineer responsible of operations for the optimization of the autonomous transport of liquid bulk goods, got a design contract for an automated intelligent transport management system that are autonomous trucks which...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT