java - 将对象存储在 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;
}
}
解决方案
(这可能更像是一个评论而不是一个答案,但我在这些部分还不够知名,无法发表评论。我正在努力!)。
正如 NotZack 所说,您实际上并没有告诉我们问题出在哪里。例如,向我们展示程序的当前输出与您的目标相比(字面意思是,写下您希望程序打印的内容)将帮助我们知道从哪里开始查找。
但是,通过快速浏览您的代码,我确实注意到了一些事情:
您在主文件中声明了一个 ArrayList,但我没有看到它在任何地方使用。这个项目的意图是什么?
深入、深入地查看 main 中的以下行:
for (int i = 1; i < 2; i++)
拿一支笔和一张纸,依次记下这个循环将处理的 i 的每个值,记住起始值和严格小于条件。这是你想要它做的吗?
希望这能给你一些开始工作的东西:)
推荐阅读
- folium - Folium Choropeth 传说重叠
- python - Python 将 PostgreSQL 查询的结果处理为数组
- javascript - 无法获取快速路由
- python - 向量化条件列
- java - Java AWT:JFrame SetLocation 不应移出屏幕
- javascript - 数据更改后如何使useEffect重新渲染?
- javascript - passportjs req.isAuthenticated() 返回 False 因为 passport.deserializeUser() 永远不会在某些浏览器中运行
- python - BertForMultipleChoice 假定哪个选项最正确?
- gremlin - 从 gremlin-server 保存的 GraphML 被重复的 id 损坏
- typescript - 如何为包含已知未知键的递归对象声明类型