构造函数Circle(String,boolean,double)未定义

时间:2015-09-27 20:24:44

标签: java

我试图打印出我的数组中包含从文本文件中赋值的内容。但是我遇到了两个错误,任何帮助将不胜感激。 我的代码是:

Auth.isLoggedIn(function(loggedIn) {
  console.log(loggedIn);
  if (!loggedIn) {
    console.log("redirecting");
    // event.preventDefault();
    $state.go('login');
  }
});

但是,我必须创建三个新类来删除错误。赋值要求该方法的编写方式与此类似 - 私有静态GeometricObject recreateObject(String data)。我不确定为什么我需要创建新类才能消除这些错误。

import java.util.*;
import java.io.*;

public class Driver {

   public static void main(String[] args) throws FileNotFoundException {

      GeometricObject g = null;
      File diskFile = new File("src/file.txt");
      Scanner diskScanner = new Scanner(diskFile);
      while (diskScanner.hasNext()) {
          String list = diskScanner.nextLine();
          g = recreateObject(list);
      }
      diskScanner.close();
   }

   private static GeometricObject recreateObject(String data) {

      String[] list = data.split(",");
      String geoObject = list[0];

      if (geoObject.equals("Circle")) {
          String color = list[1];
          boolean filled = Boolean.valueOf(list[2]);
          double radius = Double.valueOf(list[3]);
         return new Circle(color, filled, radius);
      }

      if (geoObject.equals("Rectangle")) {
         String color = list[1];
         boolean filled = Boolean.valueOf(list[2]);
         double length = Double.valueOf(list[3]);
         double width = Double.valueOf(list[4]);
         return new Rectangle(color, filled, length, width);
      }

      return null;
   }
}

我还有两个错误:

  1. 构造函数Circle(String,boolean,double)未定义。
  2. 构造函数Rectangle(String,boolean,double,double)未定义。
  3. 任何帮助都会非常感激,因为我已经尝试了大约4个小时但无济于事。

    我的file.txt包含

    public class Circle extends GeometricObject 
    {
    
    }
    
    public class GeometricObject 
    {
    
    }
    
    
    public class Rectangle extends GeometricObject 
    {
    
    }
    

    这是实际作业

    Circle,red,false,4.0  
    Circle,blue,true,2.0
    Circle,blue,true,10.0
    Rectangle,yellow,true,10.0,6.0
    Rectangle,green,true,5.0,11.0
    Rectangle,red,true,20.0,15.0
    

1 个答案:

答案 0 :(得分:2)

哎呀,你的Circle类有没有构造函数,这意味着它只有默认的no-arg构造函数:

public Circle() {

}

因此错误消息告诉您完全有什么问题 - 您尝试使用不存在的构造函数。如果你想为3个args的类调用一个构造函数,你将不得不给第一个类。

public class Circle extends GeometricObject {
    // you'll need fields here

    public Circle(String color, boolean somethingNotSureWhat, double radius) {
       // call the super class's constructor if it takes parameters
       // here set your fields that are not part of the super class
    }
}

最重要的是 - 由于有大量资源可以向您展示如何使用和创建构造函数,因此无需猜测,包括:

修改

  
      
  1. 读取每个磁盘记录,创建相应的对象(圆形或矩形),将对象添加到名为list的动态数组中。
  2.   

您的说明告诉您,您需要创建并填写ArrayList<GeometricObject>。您的ArrayList在哪里?

  
      
  1. 很好地打印列表的内容(指明位置和内容)。
  2.   

这告诉您所有类都需要一个不错的toString()方法来实现简单明了的输出。

  
      
  1. 编写一个方法来查找包含最大元素的列表中的位置(所有元素的最大区域)。
  2.   

抽象超级GeometricObject类需要一个abstract public double getArea()方法,每个子类都需要实现该方法,以便返回计算区域。然后,您需要创建一个静态方法,遍历ArrayList,找到列表中最大的区域。

  
      
  1. 打印所选对象的位置和数据(包括区域)(主方法)。
  2.   

上面的方法应该返回列表中最大的GeometricObject,然后你需要输出它的属性。

  
      
  1. 编写一个方法来查找列表中包含给定颜色的最大元素的位置(尝试“RED”)。
  2.   

另一种方法,类似于上面的方法,但它同时查看getColor()返回的颜色字符串和getArea()返回的双精度字。

  
      
  1. 打印所选对象的位置和数据(包括区域) - 如果有的话!
  2.   

自解释

  

以下是您需要编写的方法的签名

以下是所有自我解释

所以是的,你将需要三个类,一个具有abstract public double getArea();方法签名的抽象GeometricObject,它具有名称String(实际上可能不是必需的),一个颜色String,一个布尔字段,以及一个接受名称,颜色和布尔值的构造函数(尽管名称可能没有必要,因为该String告诉您要使用哪个子类)。然后你需要两个子类,每个子类都有自己的字段,Circle的双半径字段,Rectangle的doubleA和sideB,以及接受这些信息的构造函数以及超类构造函数所需的信息。 / p>