讲师中心 微信公众号
AI工具推荐 视频效率加速

Java中ArrayList与自定义对象:构建随机半径Circle列表的教程

夜强同学_5171

夜强同学_5171

发布时间:2025-11-22 18:59:17

|

975人浏览过

|

来源于php中文网

原创

Java中ArrayList与自定义对象:构建随机半径Circle列表的教程

本教程详细讲解如何在java中使用`arraylist`动态创建和管理自定义的`circle`对象列表。内容涵盖`circle`类的设计与实现,包括属性和计算方法;利用`random`类生成指定范围内的随机半径来实例化`circle`对象,并通过`for`循环将其添加到`arraylist`;最后,演示如何遍历列表并使用`string.format()`方法精确控制输出的浮点数格式。

在Java编程中,经常需要处理一组具有相同特性但不同属性的对象。ArrayList作为Java集合框架的一部分,提供了一种灵活的方式来存储和管理这些对象的动态列表。本教程将以“圆形(Circle)”对象为例,演示如何结合ArrayList和随机数生成来构建一个包含多个随机半径圆形的列表,并对其属性进行格式化输出。

核心组件:Circle类的设计与实现

要创建Circle对象的列表,首先需要定义Circle类。这个类将封装一个圆形的属性(如ID和半径)以及与其相关的行为(如计算直径、面积和周长)。

1. 类属性

一个Circle对象至少应包含以下属性:

  • id (String): 用于唯一标识每个圆形,例如"C1", "C2"等。
  • radius (double): 圆形的半径。

2. 构造函数

为了方便地创建Circle对象并初始化其属性,我们需要一个构造函数。

立即学习“Java免费学习笔记(深入)”;

public Circle(String id, double radius) {
    this.id = id;
    this.radius = radius;
}

3. Getter 方法

为了能够访问Circle对象的私有属性,需要提供相应的getter方法。

public String getId() {
    return id;
}

public double getRadius() {
    return radius;
}

4. 计算方法

Circle类还应包含计算其几何属性的方法,例如直径、面积和周长。这里我们使用近似值 3.14 作为圆周率。

public double getDiameter() {
    return radius * 2;
}

public double getArea() {
    return 2 * 3.14 * radius * radius; // 注意:此处面积计算公式为 2 * PI * r^2,标准面积公式为 PI * r^2
}

public double getCircumference() {
    return 2 * 3.14 * radius;
}

完整的Circle类代码如下:

class Circle {
    private String id;
    private double radius = 0; // 默认值

    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 2 * 3.14 * radius * radius; // 依照原始示例,标准面积公式为 Math.PI * radius * radius;
    }

    public double getCircumference() {
        return 2 * 3.14 * radius;
    }
}

注意事项:在实际开发中,计算圆的面积通常使用 Math.PI * radius * radius,而不是 2 * 3.14 * radius * radius。本教程为了与提供的示例代码保持一致,沿用了 2 * 3.14 的写法。

动态列表构建:使用ArrayList管理Circle对象

有了Circle类,我们就可以在主程序中创建并管理这些对象了。ArrayList是实现这一目标的理想选择。

1. 初始化ArrayList

在main方法中,首先需要导入必要的类(ArrayList和Random),然后创建一个ArrayList实例,指定它将存储Circle类型的对象。

Java 接口排错助手
Java 接口排错助手

在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。

下载
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<>();
        // ... 其他代码
    }
}

2. 随机数生成与列表填充

教程要求创建10个圆形,每个圆形具有2到5之间的随机半径。这需要使用Random类和for循环。

  • 生成指定范围内的随机数:Random类的nextDouble()方法返回一个介于0.0(包含)和1.0(不包含)之间的double值。要生成一个在特定范围[min, max)内的随机数,可以使用公式:min + (rand.nextDouble() * (max - min))。在本例中,min为2,max为5。

  • 循环创建并添加对象:使用for循环迭代10次,每次循环:

    1. 生成一个唯一的ID(例如"C1", "C2")。
    2. 计算一个随机半径。
    3. 使用ID和半径创建一个新的Circle对象。
    4. 将新创建的Circle对象添加到ArrayList中。
// ** load the array list with circles **
for (int i = 1; i <= 10; i++) {
    String id = "C" + i;
    double randomValue = rand.nextDouble(); // 生成 [0.0, 1.0) 之间的随机数
    double radius = 2 + (randomValue * (5 - 2)); // 将随机数映射到 [2.0, 5.0) 范围
    Circle circle = new Circle(id, radius);
    circles.add(circle);
}

数据展示:遍历与格式化输出

填充完ArrayList后,下一步是遍历列表并打印每个Circle对象的详细信息。为了使输出更具可读性,特别是对于浮点数,我们需要进行格式化。

1. 遍历ArrayList

可以使用增强型for循环或传统的索引for循环来遍历ArrayList。这里我们使用传统的索引for循环,因为它在某些场景下提供了更大的灵活性(例如,需要知道当前元素的索引)。

for (int i = 0; i < circles.size(); i++) {
    Circle circle = circles.get(i);
    // ... 打印信息
}

2. 浮点数格式化输出

问题要求将圆的尺寸打印到小数点后三位。String.format()方法可以实现这一功能。"%.3f"是一个格式说明符,表示一个浮点数,保留三位小数。

System.out.println("Circle 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("--------------------------------\n");

// 遍历并打印所有Circle的详细信息
for(int i=0; i<circles.size(); i++) {
    Circle circle = circles.get(i);
    System.out.println();
    System.out.println("Circle 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();
}

完整示例代码

将CirclesDriver类和Circle类整合在一起,形成一个完整的可运行程序。

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

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 randomValue = rand.nextDouble(); // 生成 [0.0, 1.0) 之间的随机数
            double radius = 2 + (randomValue * (5 - 2)); // 将随机数映射到 [2.0, 5.0) 范围
            Circle circle = new Circle(id, radius);
            circles.add(circle);
        }

        // print the whole list
        System.out.println("--------------------------------\n");

        // ** Make sure your Circle class and ArrayList work with the following driver code **
        for(int i=0; i<circles.size(); i++) {
            Circle circle = circles.get(i);
            System.out.println();
            System.out.println("Circle 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();
        }
    }
}

class Circle {
    private String id;
    private double radius = 0;

    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 2 * 3.14 * radius * radius; // 依照原始示例,标准面积公式为 Math.PI * radius * radius;
    }

    public double getCircumference() {
        return 2 * 3.14 * radius;
    }
}

总结与最佳实践

本教程演示了在Java中结合面向对象编程和集合框架来解决实际问题。通过Circle类封装数据和行为,并利用ArrayList动态管理对象集合,我们能够高效地创建和操作一组具有随机属性的圆形。

关键点回顾:

  • 面向对象设计:将圆形的属性和行为封装在Circle类中,遵循了良好的封装原则。
  • ArrayList的灵活性:ArrayList提供了动态数组的功能,非常适合存储数量不确定或需要频繁增删的同类型对象。
  • 随机数生成:Random类是生成伪随机数的标准工具,掌握其nextDouble()方法和范围转换公式对于模拟真实世界数据非常有用。
  • 输出格式化:String.format()方法是控制浮点数输出精度和格式的强大工具,能显著提高程序输出的可读性和专业性。

通过这些技术,开发者可以构建出更加健壮、灵活且易于维护的Java应用程序。

热门AI工具

更多
音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7079

2023.08.02

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

7275

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

362

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

384

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

243

2026.04.17

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1809

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1211

2024.06.27

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4428

2025.08.29

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn