
本文详细介绍了如何在java中使用`arraylist`动态创建并管理`circle`对象。教程涵盖了利用`random`类生成指定范围内的随机半径,将这些`circle`对象添加到列表中,以及如何遍历列表并格式化输出每个圆的详细属性(id、半径、直径、周长和面积),最终以清晰的表格形式展示数据。
在Java编程中,我们经常需要处理一组具有相同结构但不同属性的对象。ArrayList是Java集合框架中一个非常实用的动态数组,它允许我们存储、访问和管理这些对象。本教程将以Circle(圆形)对象为例,详细讲解如何结合ArrayList、Random类以及格式化输出,实现动态创建并展示一组圆形数据。
首先,我们需要定义一个Circle类来封装圆形的属性和行为。一个圆形至少应包含一个唯一的标识符(ID)和它的半径。此外,为了方便,我们还可以添加计算直径、面积和周长的方法。
import java.lang.Math; // 导入Math类以使用Math.PI
public class Circle {
private String id;
private double radius;
/**
* 构造函数,用于创建Circle对象并初始化ID和半径。
* @param id 圆形的唯一标识符
* @param radius 圆形的半径
*/
public Circle(String id, double radius) {
this.id = id;
this.radius = radius;
}
/**
* 获取圆形的ID。
* @return 圆形的ID
*/
public String getId() {
return id;
}
/**
* 获取圆形的半径。
* @return 圆形的半径
*/
public double getRadius() {
return radius;
}
/**
* 计算并获取圆形的直径。
* @return 圆形的直径
*/
public double getDiameter() {
return radius * 2;
}
/**
* 计算并获取圆形的面积。
* 使用Math.PI提供更精确的圆周率。
* @return 圆形的面积
*/
public double getArea() {
return Math.PI * radius * radius;
}
/**
* 计算并获取圆形的周长。
* 使用Math.PI提供更精确的圆周率。
* @return 圆形的周长
*/
public double getCircumference() {
return 2 * Math.PI * radius;
}
/**
* 设置圆形的半径。
* @param radius 新的半径值
*/
public void setRadius(double radius) {
this.radius = radius;
}
}在Circle类中,我们为id和radius定义了私有属性,并通过公共的getter方法提供访问接口。为了计算面积和周长,我们使用了Math.PI常量,它提供了比3.14更精确的圆周率值。
接下来,我们将创建一个主驱动类CirclesDriver,在该类中演示如何使用ArrayList来存储和操作Circle对象。
立即学习“Java免费学习笔记(深入)”;
首先,在main方法中初始化一个ArrayList,用于存储Circle对象。
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner; // 虽然在此示例中未使用Scanner,但通常用于用户输入
public class CirclesDriver {
public static void main(String[] args) {
Random rand = new Random(); // 用于生成随机数
ArrayList<Circle> circles = new ArrayList<>(); // 初始化ArrayList来存储Circle对象
// ... 后续代码
}
}我们的目标是创建10个Circle对象,每个对象具有一个在2到5之间的随机半径。我们可以使用Random类的nextDouble()方法来生成随机浮点数,并通过数学运算将其映射到所需的范围。
rand.nextDouble()方法生成一个介于0.0(包含)和1.0(不包含)之间的double值。要将其映射到[min, max)的范围,可以使用公式:min + (rand.nextDouble() * (max - min))。在本例中,min为2,max为5。
// ... 前面初始化代码
// ** load the array list with circles **
for (int i = 1; i <= 10; i++) {
String id = "C" + i; // 为每个圆形生成一个唯一的ID,例如C1, C2...
double randomFactor = rand.nextDouble(); // 生成0.0到1.0之间的随机数
double radius = 2 + (randomFactor * (5 - 2)); // 将随机数映射到[2, 5)范围
Circle circle = new Circle(id, radius); // 创建Circle对象
circles.add(circle); // 将Circle对象添加到ArrayList中
}
// ... 后续代码创建并填充ArrayList之后,我们需要遍历它并打印每个Circle对象的详细信息。为了使输出更具可读性,我们将使用String.format()方法将浮点数格式化为指定的小数位数(例如,三位小数)。
// ... 前面创建和填充ArrayList的代码
System.out.println("--------------------------------\n"); // 分隔符
// 遍历ArrayList并打印每个Circle对象的详细信息
for (int i = 0; i < circles.size(); i++) {
Circle circle = circles.get(i); // 获取当前索引的Circle对象
System.out.println(); // 空行以提高可读性
System.out.println("ID: " + circle.getId());
System.out.println("Radius: " + String.format("%.3f", circle.getRadius())); // 格式化半径到三位小数
System.out.println("Diameter: " + String.format("%.3f", circle.getDiameter())); // 格式化直径
System.out.println("Circumference: " + String.format("%.3f", circle.getCircumference())); // 格式化周长
System.out.println("Area: " + String.format("%.3f", circle.getArea())); // 格式化面积
System.out.println(); // 空行
}
System.out.println("\nend of program"); // 程序结束标志
}
}将Circle类和CirclesDriver类整合在一起,形成一个完整的可运行示例。
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner; // 引入Scanner,尽管在此特定示例中未直接使用
// CirclesDriver.java
public class CirclesDriver {
public static void main(String[] args) {
Random rand = new Random();
// ** Variables constants and objects **
// Scanner scanner = new Scanner(System.in); // 示例中未用到,但常用于用户输入
ArrayList<Circle> circles = new ArrayList<>();
// ** load the array list with circles **
for (int i = 1; i <= 10; i++) {
String id = "C" + i;
double randomFactor = rand.nextDouble(); // 生成0.0到1.0之间的随机数
double radius = 2 + (randomFactor * (5 - 2)); // 将随机数映射到[2, 5)范围
Circle circle = new Circle(id, radius);
circles.add(circle);
}
// print the whole list
System.out.println("--------------------------------\n");
// 遍历ArrayList并打印每个Circle对象的详细信息
for (int i = 0; i < circles.size(); i++) {
Circle circle = circles.get(i);
System.out.println();
System.out.println("ID: " + circle.getId());
System.out.println("Radius: " + String.format("%.3f", circle.getRadius()));
System.out.println("Diameter: " + String.format("%.3f", circle.getDiameter()));
System.out.println("Circumference: " + String.format("%.3f", circle.getCircumference()));
System.out.println("Area: " + String.format("%.3f", circle.getArea()));
System.out.println();
}
System.out.println("\nend of program");
}
}
// Circle.java (通常放在单独的文件中,但为方便展示可一并列出)
class Circle {
private String id;
private double radius;
public Circle(String id, double radius) {
this.id = id;
this.radius = radius;
}
public String getId() {
return id;
}
public double getRadius() {
return radius;
}
public double getDiameter() {
return radius * 2;
}
public double getArea() {
return Math.PI * radius * radius; // 使用Math.PI
}
public double getCircumference() {
return 2 * Math.PI * radius; // 使用Math.PI
}
public void setRadius(double radius) {
this.radius = radius;
}
}本教程详细展示了如何在Java中利用ArrayList、Random类和String.format()方法,实现动态创建、管理和展示具有随机属性的Circle对象。这种模式在处理各种类型的数据集合时非常常见,例如管理用户列表、商品库存或模拟数据。掌握这些基本技能将为更复杂的Java应用程序开发奠定坚实的基础。通过理解对象封装、集合框架的使用以及数据格式化,开发者可以构建出更加健壮和用户友好的应用程序。
以上就是Java教程:动态创建与管理Circle对象列表的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号