Java:没有编译错误,但我的输出错误

时间:2015-07-19 05:56:56

标签: java rectangles

我的任务是创建一个名为MyRectangle的类来表示矩形。

  

所需的数据字段是宽度,高度和颜色。宽度和高度使用双数据类型,颜色使用String。然后编写一个程序来测试MyRectangle类。在客户端程序中,创建两个MyRectangle对象。为两个对象中的每一个指定宽度和高度。将第一个对象指定为红色,将第二个对象指定为黄色。显示两个对象的所有属性,包括其区域。

我已经把所有内容都写完了,并且没有任何错误,但无论我为矩形添加什么值,我的输出都保持不变。

package MyRectangle;

public class MyRectangle{

  private double width = 1.0;
  private double height = 1.0;
  private static String color = "black";

    public MyRectangle(double par, double par1){ 

      width ++;
      height ++;

  }

    //Parameters for width, height, and color //

    public MyRectangle(double widthParam, double heightParam, String colorParam){ 

      width = widthParam;
      height = heightParam;
      color = colorParam;
      width ++;
      height ++;

  }

    // Accessor width //

  public double getWidth(){

  return width;

  }

  public void setWidth(double widthParam){

  width = (widthParam >= 0) ? widthParam: 0;

  }

  // Accessor height //

  public double getHeight(){

  return height;

  }

  public void setHeight(double heightParam){

  height = (heightParam >= 0) ? heightParam: 0;

  }

  // Accessor color //

  public static String getColor(){

  return color;

  }  

  public static void setColor(String colorParam){

  color = colorParam;

  }

  // Accessor area //

  public double findArea(){

  return width * height;

  }

}

class MyRectangleTest {

        @SuppressWarnings("static-access")
        public static void main(String args[]) {

  // Create triangle and set color value to red //          

  MyRectangle r1 = new MyRectangle(5.0, 25.0);
  r1.setColor("Red");

  System.out.println(r1);
  System.out.println("The area of rectangle one is: " + r1.findArea());

  // Create triangle and set color value to yellow //

  MyRectangle r2 = new MyRectangle(3.0, 9.0);
  r2.setColor("Yellow");

  System.out.println(r2);
  System.out.println("The area of rectangle one is: " + r2.findArea());

        }
}

2 个答案:

答案 0 :(得分:4)

您正在使用的构造函数毫无意义。

您忽略传递的矩形尺寸,因此您将始终获得一个2 x 2的矩形:

  private double width = 1.0;
  private double height = 1.0;
  ...

    public MyRectangle(double par, double par1){

      width ++;
      height ++;

  }

应该是这样的:

  public MyRectangle(double width, double height){

      this.width = width;
      this.height = height;

  }

此外,颜色成员不应该是静态的,除非您希望所有矩形都具有相同的颜色。

最后一件事 - 为了System.out.println(r1);System.out.println(r2);Display all properties of both objects,您必须覆盖toString()

@Override
public String toString()
{
    return "width = " + width + " height = " + height + " color = " + color;
}

答案 1 :(得分:3)

这里有一些问题:

  1. color成员是static,这意味着属于,而不是每个实例都有自己的。
  2. (double, double)构造函数不存储高度和宽度。
  3. 两个构造函数都增加了高度和宽度,这是没有充分理由的。
  4. 由于您没有默认构造函数,因此成员的默认值是多余的 - 在没有被覆盖的情况下没有流量。
  5. 总结一下,你的班级应该或多或少地宣布:

    public class MyRectangle {
    
      private double width;
      private double height;
      private String color;
      private static final String DEFAULT_COLOR = "black";
    
        public MyRectangle(double width, double height) { 
          this (width, height, DEFAULT_COLOR);
        }
    
        public MyRectangle(double width, double height, String color) { 
          this.width = width;
          this.height = height;
          this.color = color;
      }
    
      // Rest of the required methods
    }