首页 > 解决方案 > 将对象存储在 ArrayList 中并输出对象描述

问题描述

我正在编写一个程序,在同一个包中包含单独的文件。我想要做的是在我的 Main.java 文件中使用:

1-使用用户输入的值创建三个 Triangle 对象并将它们存储在 ArrayList 中。

2-通过调用其 toString( ) 方法和 getArea() 方法,显示 ArrayList 中每个 Triangle 对象的字符串表示形式。请参见下面的输出示例。

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        System.out.println("*******************************************************************");
        System.out.println("*   This program gets input for three triangles from the user.    *\n" + "*   It then creates three Triangle objects and displays the       *\n" + "*   description of each..                                         *");
        System.out.println("*******************************************************************");
        System.out.println(); // for adding blank line
        Scanner input = new Scanner(System. in );
        Triangle triangle; //Define the triangle object
        ArrayList < GeometricObject > list = new java.util.ArrayList < >();;

        for (int i = 1; i < 2; i++) {
            System.out.print("Enter the color of a triangle" + i + "(e.g. \"red\"): ");
            String color = input.next();

            System.out.print("Is the triangle filled (y or n): ");
            boolean filled;
            String filledString = input.next();
            filled = filledString.equals("y"); // condition returns true if "y" is entered
            // User input for triangle's 3 sides
            System.out.println("Enter the lengths of the three sides of the triangle: ");
            double side1 = input.nextDouble();
            double side2 = input.nextDouble();
            double side3 = input.nextDouble();

            // we need to create the triangle object with the input
            triangle = new Triangle(side1, side2, side3);
            triangle.setColor(color); // calls setColor from GeometricObject
            triangle.setFull(filled); // calls setFilled as well

            // Display the triangle, very similar to TestCircleRectangle.java example
            System.out.println(); // for adding blank line
            System.out.println("Triangle: side1 = " + side1 + "," + " side2 = " + side2 + "," + " side3 = " + side3);
            System.out.println(triangle.toString());

            System.out.printf("Area = %.2f\n", triangle.getArea());
            System.out.println(); // for adding blank line
        }

        System.out.println("Goodbye...");

    }
}

三角.java

public class Triangle extends GeometricObject {
    // Contains 3 double data fields value to 0
    private double side1;
    private double side2;
    private double side3;

    /** Default constructor that creates a triangle
  *  with default side  of 1.0 each
  *  */
    Triangle() {
        side1 = 1.0;
        side2 = 1.0;
        side3 = 1.0;
    }
    /** parameterized constructor that creates
  * a triangle with sides values
  * */
    Triangle(double side1, double side2, double side3) {
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
    }

    /** Getter for side1 */
    public double getSide1() {
        return side1;
    }
    /** Setter for side1 */
    public void setSide1(double newSide1) {
        side1 = newSide1;
    }

    /** Getter for side2 */
    public double getSide2() {
        return side2;
    }
    /** Setter for side2 */
    public void setSide2(double newSide2) {
        side2 = newSide2;
    }

    /** Getter for side3 */
    public double getSide3() {
        return side3;
    }
    /** Setter for side3 */
    public void setSide3(double newSide3) {
        side3 = newSide3;
    }

    /**
  * The getArea Method
  * Purpose: Computes the area of a triangle from 3 sides
  * @return the area of a triangle
  */
    public double getArea() {
        double s = (side1 + side2 + side3) / 2;
        return Math.sqrt(s * (s - side1) * (s - side2) * (s - side3));
    }
}

几何对象.java

public class GeometricObject {
    private String color = "white";
    private boolean filled;
    private java.util.Date dateCreated;

    /** Construct a default geometric object */
    public GeometricObject() {
        dateCreated = new java.util.Date();
    }

    /** Construct a geometric object with the specified color
  * and filled value */
    public GeometricObject(String color, boolean filled) {
        this.color = color;
        this.filled = filled;
        this.dateCreated = new java.util.Date();
    }

    /** Return color */
    public String getColor() {
        return color;
    }

    /** Set a new color */
    public void setColor(String color) {
        this.color = color;
    }

    /** Return filled. Since filled is boolean,
  its getter method is named isFilled
  */
    public boolean Full() {
        return filled;
    }

    /** Set a new filled */
    public void setFull(boolean filled) {
        this.filled = filled;
    }

    /** Get dateCreated */
    public java.util.Date getDateCreated() {
        return dateCreated;
    }

    /**
  * Abstract method  getArea
  */

    /** Return a string representation of this object */
    public String toString() {

        return "created on " + getDateCreated() + "\ncolor: " + color + " and filled: " + filled;
    }
}

标签: java

解决方案


(这可能更像是一个评论而不是一个答案,但我在这些部分还不够知名,无法发表评论。我正在努力!)。

正如 NotZack 所说,您实际上并没有告诉我们问题出在哪里。例如,向我们展示程序的当前输出与您的目标相比(字面意思是,写下您希望程序打印的内容)将帮助我们知道从哪里开始查找。

但是,通过快速浏览您的代码,我确实注意到了一些事情:

  1. 您在主文件中声明了一个 ArrayList,但我没有看到它在任何地方使用。这个项目的意图是什么?

  2. 深入、深入地查看 main 中的以下行:

for (int i = 1; i < 2; i++)

拿一支笔和一张纸,依次记下这个循环将处理的 i 的每个值,记住起始值和严格小于条件。这是你想要它做的吗?

希望这能给你一些开始工作的东西:)


推荐阅读