Java 构造函数圆(字符串、布尔值、双精度)未定义

Java 构造函数圆(字符串、布尔值、双精度)未定义,java,Java,我试图打印出数组的内容,该数组的值是从文本文件分配给它的。然而,我遇到了两个错误,任何帮助都将不胜感激。 我的代码是: import java.util.*; import java.io.*; public class Driver { public static void main(String[] args) throws FileNotFoundException { GeometricObject g = null; File diskFile =

我试图打印出数组的内容,该数组的值是从文本文件分配给它的。然而,我遇到了两个错误,任何帮助都将不胜感激。 我的代码是:

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;
   }
}
但是,我必须创建三个新类来删除错误。赋值要求方法的编写方式与此完全相同-私有静态GeometricObjectRecreateObject(字符串数据)。我不确定为什么我需要创建新类来删除这些错误

public class Circle extends GeometricObject 
{

}

public class GeometricObject 
{

}


public class Rectangle extends GeometricObject 
{

}
我仍然有两个错误:

  • 构造函数圆(字符串、布尔值、双精度)未定义
  • 构造函数矩形(字符串、布尔值、双精度、双精度)未定义
  • 如果有任何帮助,我将不胜感激,因为我已经尝试了大约4个小时,但都无济于事

    My file.txt包含

    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
    
    这是实际作业

    The goal is to read persistent data from disk, use the data to recreate a collection of geometric objects, and
    apply a series of operations on them as indicated below.
    1. Read each disk record, create the corresponding object (Circle or Rectangle), add the object to a
    dynamic array called list.
    2. Nicely print the contents of the list (indicate position and content).
    3. Write a method to find the position on the list holding the largest element (biggest area of them all).
    4. Print the position and data (including area) of the selected object (main method).
    5. Write a method to find the position on the list holding the largest element of a given color (try “RED”).
    6. Print the position and data (including area) of the selected object – if any!  
    The following are signatures of methods you need to write
    private static GeometricObject recreateObject(String data)      
    [Needed in step 1]
    private static void showObjects(ArrayList<GeometricObject> list)    
    [Needed in step 2]
    private static int findPositionLargestObject(ArrayList<GeometricObject> list)
    [Step 3]
    private static int findPositionBiggestColor(ArrayList<GeometricObject> list,
    String searchColor) [Step 5]
    private static int findPositionSmallestCircle(ArrayList<GeometricObject> list)
    [Step 7]
    
    目标是从磁盘读取持久数据,使用数据重新创建几何对象集合,然后
    对其应用一系列操作,如下所示。
    1.读取每个磁盘记录,创建相应的对象(圆形或矩形),将对象添加到
    名为list的动态数组。
    2.很好地打印列表的内容(指出位置和内容)。
    3.写一个方法来查找列表中包含最大元素的位置(所有元素中最大的区域)。
    4.打印所选对象(主方法)的位置和数据(包括区域)。
    5.写一个方法来查找列表中包含给定颜色中最大元素的位置(尝试“红色”)。
    6.打印所选对象的位置和数据(包括区域)-如果有!  
    以下是您需要编写的方法的签名
    私有静态GeometricObject重新创建对象(字符串数据)
    [步骤1中需要]
    私有静态void showObjects(ArrayList列表)
    [步骤2中需要]
    私有静态int findPositionLargestObject(ArrayList列表)
    [步骤3]
    私有静态int findPositionBiggestColor(ArrayList列表,
    字符串搜索颜色)[步骤5]
    私有静态int findPositionSmallestCircle(ArrayList列表)
    [步骤7]
    
    Heck,你的Circle类没有构造函数,这意味着它只有默认的无参数构造函数:

    public Circle() {
    
    }
    
    因此,错误消息会准确地告诉您出了什么问题——您试图使用一个不存在的构造函数。如果你想为包含3个参数的类调用一个构造函数,你必须给这个类一个参数

    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
        }
    }
    

    最重要的是——无需对此进行猜测,因为有大量资源可供您使用并创建构造函数,其中包括:


    编辑

  • 读取每个磁盘记录,创建相应的对象(圆形或矩形),将该对象添加到名为list的动态数组中
  • 您的说明告诉您需要创建并填写
    ArrayList
    。你的ArrayList在哪里

  • 很好地打印列表的内容(指出位置和内容)
  • 这告诉您,您的所有类都需要一个合适的
    toString()
    方法来实现简单、干净的输出

  • 写一个方法来查找列表中包含最大元素的位置(所有元素中最大的区域)
  • 抽象超级GeometricObject类需要一个
    抽象公共双getArea()
    方法,每个子类都需要实现该方法,以便返回一个计算面积。然后,您需要创建一个静态方法,该方法遍历ArrayList,找到列表中最大的区域

  • 打印所选对象(主方法)的位置和数据(包括区域)
  • 上面的方法应该返回列表中最大的GeometricObject,然后需要输出它的属性

  • 写一个方法来查找列表中包含给定颜色中最大元素的位置(尝试“红色”)
  • 另一种方法,类似于上面的方法,但它同时查看
    getColor()
    返回的颜色字符串和
    getArea()
    返回的双色字符串

  • 打印所选对象的位置和数据(包括区域)-如果有 不言自明

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

    以下内容不言自明


    因此,是的,将需要三个类,一个抽象几何对象,具有
    抽象公共双getArea()方法签名,它有一个名称字符串(实际上可能不是必需的)、一个颜色字符串、一个布尔字段和一个接受名称、颜色和布尔值的构造函数(尽管同样,名称可能不是必需的,因为该字符串告诉您要使用哪个子类)。然后需要两个子类,每个子类都有自己的字段,一个双半径字段表示圆,另一个是sideA和sideB表示矩形,以及接受此信息以及超级类的构造函数所需信息的构造函数。

    请发布实际的赋值要求,因为您可能会错误地解释它们。实际上,您可能只需要一个类,
    GeometricObject
    。我添加了整个赋值。然而,我真正关心的只是在尝试其他部分之前弄清楚第一部分。谢谢。请参阅编辑以回答问题。