Java奠基】对象数组练习

目录

商品对象信息获取

商品对象信息输入

商品对象信息计算

商品对象信息统计

学生数据管理实现


商品对象信息获取

题目要求是这样的:

定义数组存储3个商品对象。

商品的属性:商品的id,名字,价格,库存。

创建三个商品对象,并把商品对象存入到数组当中。

创建Goods类封装商品信息类管理商品数据,里面有商品的私有信息,以及获取和设置成员变量的值的方法,通过调用Goods对象中的方法来对数据进行增删改查操作:

public class Goods {private String id;private String name;private double price;private int count;// 创建构造函数public Goods(String id, String name, double price, int count) {this.id = id;this.name = name;this.price = price;this.count = count;}// 创建getter和setterpublic String getId() { return id; }public void setId(String id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public double getPrice() { return price; }public void setPrice(double price) { this.price = price; }public int getCount() { return count; }public void setCount(int count) { this.count = count; }
}

新创建一个Java类,这个类包含了一个main()方法,该方法用于测试Goods类的功能。在 main()方法中,首先创建了一个 Goods 类型的数组 arr,并且创建了三个 Goods 对象 g1、g2 和 g3,分别表示三种手机商品。然后,将这三个商品对象添加到数组中。最后,通过循环遍历数组,输出每个商品对象的信息(id、name、price、count):

public class GoodsTest {public static void main(String[] args) {// 创建一个数组Goods[] arr = new Goods[3];// 创建三个商品对象Goods g1 = new Goods("001", "华为手机", 8000, 5);Goods g2 = new Goods("002", "苹果手机", 11000.0, 7);Goods g3 = new Goods("003", "安卓手机", 6000.9, 1);// 将商品添加到数组当中arr[0] = g1;arr[1] = g2;arr[2] = g3;// 遍历数组for (int i = 0; i < arr.length; i++) {Goods goods = arr[i];System.out.println(goods.getId()+", "+goods.getName()+", "+goods.getPrice()+", "+goods.getCount());}}
}

最终呈现的效果如下:

商品对象信息输入

题目要求是这样的:

定义数组存储3部汽车对象。

汽车的属性:品牌,价格,颜色。

创建三个汽车对象,数据通过键盘录入而来,并把数据存入到数组当中。

创建Car类封装汽车信息类管理汽车数据,里面有汽车的私有信息,以及获取和设置成员变量的值的方法,通过调用Car对象中的方法来对数据进行增删改查操作:

public class Car {private String brand;private int price;private String color;// 创建构造函数public Car() {}public Car(String brand, int price, String color) {this.brand = brand;this.price = price;this.color = color;}// 创建getter和setter方法public String getBrand() { return brand; }public void setBrand(String brand) { this.brand = brand; }public int getPrice() { return price; }public void setPrice(int price) { this.price = price; }public String getColor() { return color; }public void setColor(String color) { this.color = color; }
}

创建了一个名为CarTest的Java类。这个类用于测试Car类的功能。首先创建了一个 Car 类型的数组 arr,用来存储三个汽车对象。然后使用 Scanner 类从键盘输入汽车的品牌、价格和颜色,并将这些信息设置到每个汽车对象中。接着,将每个汽车对象添加到数组中。最后,通过循环遍历数组,输出每个汽车对象的品牌、价格和颜色。

import java.util.Scanner;public class CarTest {public static void main(String[] args) {// 创建一个数组用来存储3个汽车对象Car[] arr = new Car[3];// 创建汽车对象,数据键盘录入Scanner sc = new Scanner(System.in);for (int i = 0; i < arr.length; i++) {// 创建空的汽车对象Car c = new Car();// 录入品牌System.out.println("请输入汽车的品牌");String brand = sc.next();c.setBrand(brand); // 间键盘录入的数据写入// 录入价格System.out.println("请输入汽车的价格");int price = sc.nextInt();c.setPrice(price);// 录入颜色System.out.println("请输入汽车的颜色");String color = sc.next();c.setColor(color);// 把汽车对象添加到数组中arr[i] = c;}// 遍历数组for (int i = 0; i < arr.length; i++) {Car car = arr[i];System.out.println(car.getBrand()+", "+car.getPrice()+", "+car.getColor());}}
}

最终呈现的效果如下:

商品对象信息计算

题目要求是这样的:

定义数组存储3部手机对象。

手机的属性:品牌,价格,颜色。

要求计算出三部手机的平均价格。

创建Phone类封装手机信息类管理手机数据,里面有手机的私有信息,以及获取和设置成员变量的值的方法,通过调用Phone对象中的方法来对数据进行增删改查操作:

public class Phone {private String brand;private int price;private String color;// 创建构造函数public Phone() {}public Phone(String brand, int price, String color) {this.brand = brand;this.price = price;this.color = color;}// 创建getter和setter方法public String getBrand() { return brand; }public void setBrand(String brand) { this.brand = brand; }public int getPrice() { return price; }public void setPrice(int price) { this.price = price; }public String getColor() { return color; }public void setColor(String color) { this.color = color; }
}

创建了一个名为 PhoneTest 的 Java 类。这个类用于测试 Phone 类的功能。在 main() 方法中,首先创建了一个 Phone 类型的数组 arr,用来存储三个手机对象。然后,通过使用 Phone 类的构造函数,创建了三个手机对象,并分别设置了品牌、价格和颜色。

接下来,将每个手机对象添加到数组中的对应位置。然后,通过循环遍历数组,计算所有手机的总价格,并将结果保存在变量 sum 中。最后,计算手机价格的平均值,并输出结果。

public class PhoneTest {public static void main(String[] args) {// 创建一个数组Phone[] arr = new Phone[3];// 创建手机对象Phone p1 = new Phone("小米", 4900, "黑色");Phone p2 = new Phone("苹果", 7900, "白色");Phone p3 = new Phone("华为", 4200, "蓝色");// 将手机对象添加到数组当中arr[0] = p1;arr[1] = p2;arr[2] = p3;// 获取三部手机的总价格int sum = 0;for (int i = 0; i < arr.length; i++) {Phone phone = arr[i];sum+= phone.getPrice();}// 获取平均值int avg = sum / arr.length;System.out.println(avg);}
}

最终呈现的效果如下:

商品对象信息统计

定义数组存储4个电脑的对象

电脑的属性:品牌、价格、颜色、种类

要求1:计算出4个电脑的平均价格

要求2:统计价格比平均值低的电脑有几个?并把它们的所有信息打印出来。

创建Computer类封装电脑信息类管理电脑数据,里面有电脑的私有信息,以及获取和设置成员变量的值的方法,通过调用Computer对象中的方法来对数据进行增删改查操作:

public class Computer {private String brand; // 品牌private double price; // 价格private String color; // 颜色private String type; // 种类public Computer() {}public Computer(String brand, double price, String color, String type) {this.brand = brand;this.price = price;this.color = color;this.type = type;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String getType() {return type;}public void setType(String type) {this.type = type;}
}

下面这段代码主要展示了面向对象编程中类和对象的使用,以及数组的操作和循环遍历的应用。通过这个例子可以更好地理解 Java 中的类和对象的概念,以及如何进行简单的数据处理和统计分析:

public class ComputerTest {public static void main(String[] args) {// 定义数组存入电脑对象Computer[] arr = new Computer[4];// 创建电脑对象Computer cp1 = new Computer("戴尔", 4900.0, "白色", "笔记本");Computer cp2 = new Computer("神舟", 8200.0, "蓝色色", "台式");Computer cp3 = new Computer("联想", 6900.0, "黑色", "笔记本");Computer cp4 = new Computer("机器人", 3900.0, "红色", "台式");// 把对象添加到数组中arr[0] = cp1;arr[1] = cp2;arr[2] = cp3;arr[3] = cp4;// 求和double sum = 0;for (int i = 0; i < arr.length; i++) {Computer cp = arr[i];sum += cp.getPrice();}System.out.println("求和值为:"+ sum);// 平均值double avg = sum / arr.length;System.out.println("平均值为:"+ avg);// 统计价格比平均值低的有几个,并打印其信息int count = 0;for (int i = 0; i < arr.length; i++) {Computer cp = arr[i];if(cp.getPrice()<avg){System.out.println(cp.getBrand()+", "+cp.getPrice()+", "+cp.getColor()+", "+cp.getType());count++;}}System.out.println("低于平均价格的数量为:"+ count);}
}

最终呈现的效果如下:

学生数据管理实现

定义数组存储4个电脑的对象

定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同,学生的属性:学号,姓名,年龄。

要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。

要求2:添加完毕之后,遍历所有学生信息。

要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。

要求4:删除完毕之后,遍历所有学生信息。

要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁

创建Students类封装学生信息类管理学生数据,里面有学生的私有信息,以及获取和设置成员变量的值的方法,通过调用Students对象中的方法来对数据进行增删改查操作:

public class Students {private int id;private String name;private int age;public Students() {}public Students(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

下面这段代码实现了对一个学生对象数组的增、删、改、查操作,具体实现思路如下:

1)创建一个存储学生对象的数组,长度为3:

Students[] arr = new Students[3];

2)创建三个学生对象,将它们添加到数组中:

Students stu1 = new Students(1,"zhangsan",20);
Students stu2 = new Students(2,"lisi",35);
Students stu3 = new Students(3,"wangwu",10);
arr[0] = stu1;
arr[1] = stu2;
arr[2] = stu3;

3)添加一个新学生对象,并进行学号的唯一性判断:

Students stu4 = new Students(4,"xiaoming",15);
boolean flag = contains(arr, stu4.getId());
if (flag) {System.out.println("当前id值重复,请修改id后再进行添加");
} else {// 执行添加操作
}

4)如果数组已满,则创建一个新数组,否则直接在原数组上添加

if(count == arr.length){Students[] newArr = createNewArr(arr);newArr[count] = stu4;printArr(newArr);
} else {arr[count] = stu4;printArr(arr);
}

5)通过学号删除一个学生对象,先找到该学生在数组中的位置,然后将其删除:

int index = getIdIndex(newArr, 4);
if (index >= 0) {if (arr.length < index){arr[index] = null;printArr(arr);}else {newArr[index] = null;printArr(newArr);}
} else {System.out.println("当前的id不存在,删除失败");
}

6)修改一个学生对象的年龄,先找到该学生在数组中的位置,然后将其年龄加1:

int index1 = getIdIndex(newArr, 2);
if (index1>0){Students stu = arr[index1];int newAge = stu.getAge() + 1;stu.setAge(newAge);printArr(newArr);
}else {System.out.println("当前的id不存在,修改失败");
}

还有其他辅助方法包括:打印数组元素、创建新数组、获取数组元素个数、判断学号是否重复等。总体思路是基于一个学生数组对象进行操作,对其增删改查等多个操作都需要先找到该学生在数组中的索引位置,然后再进行相关操作。同时还需要注意学号唯一性等问题,具体代码如下:

public class StudentsTest {public static void main(String[] args) {// 创建一个数组用来存储学生对象Students[] arr = new Students[3];// 创建学生对象并添加到数组当中Students stu1 = new Students(1,"zhangsan",20);Students stu2 = new Students(2,"lisi",35);Students stu3 = new Students(3,"wangwu",10);// 把学生对象添加到数组当中arr[0] = stu1;arr[1] = stu2;arr[2] = stu3;// 再次添加一个学生对象,并在添加的时候进行学号的唯一性判断Students stu4 = new Students(4,"xiaoming",15);// 唯一性判断boolean flag = contains(arr, stu4.getId());Students[] newArr = createNewArr(arr);if (flag) {// 数组元素已存在,不用添加System.out.println("当前id值重复,请修改id后再进行添加");}else {// 数组元素不存在,可以把学生对象添加进数组中int count = getCount(arr);if(count == arr.length){// 数组长度已经存满,创建一个新数组,长度=老数组的长度+1,然后把老数组的元素拷贝到新数组当中newArr[count] = stu4;// 添加完毕之后,遍历所有的学生信息System.out.println("-----当前原数组元素为------");printArr(newArr);} else {// 数组长度没有存满,假设数组已经存了两个 [stu1, stu2, null]// getCount获取到的是2,表示数组当中已经有了2个元素,如果下一次要添加数据,就是添加到数组长度的位置,即2索引,值就是countarr[count] = stu4;// 添加完毕之后,遍历所有的学生信息printArr(arr);System.out.println("-----当前原数组元素为------");}}// 通过id删除学生信息int index = getIdIndex(newArr, 4);if (index >= 0) {System.out.println("-----删除完数组某元素为------");if (arr.length < index){arr[index] = null;printArr(arr);}else {newArr[index] = null;printArr(newArr);}}else {// 如果不存在,则表示删除失败System.out.println("当前的id不存在,删除失败");}// 查询数组id为2的学生,如果存在则将他的年龄+1int index1 = getIdIndex(newArr, 2);if (index1>0){// 存在System.out.println("-----修改年龄后数组元素为------");Students stu = arr[index1];int newAge = stu.getAge() + 1;stu.setAge(newAge);printArr(newArr);} else {// 不存在直接显示System.out.println("当前的id不存在,修改失败");}}// 找到id在数组当中的索引public static int getIdIndex(Students[] arr, int id) {for (int i = 0; i < arr.length; i++) {// 依次得到每一个学生对象Students stu = arr[i];// 对stu进行一个非空判断if (stu != null) {int sid = stu.getId();if(sid == id){return i;}}}return -1;}// 打印数组元素public static void printArr(Students[] arr) {for (int i = 0; i < arr.length; i++) {Students stu = arr[i];if (stu != null) {System.out.println(stu.getId()+", "+stu.getName()+", "+stu.getAge());}}}// 创建新数组用于添加新元素public static Students[] createNewArr(Students[] arr) {Students[] newArr = new Students[arr.length + 1];// 循环遍历老数组中的元素for (int i = 0; i < arr.length; i++) {newArr[i] = arr[i];}// 把新数组返回return newArr;}// 定义一个方法判断数组中已经存在了几个元素public static int getCount(Students[] arr) {// 统计变量int count = 0;for (int i = 0; i < arr.length; i++) {if (arr[i] != null){count++;}}// 返回数组元素个数return count;}// 添加新数据到数组中进行学号的唯一性判断public static boolean contains(Students[] arr, int id) {// 依次获取到数组里面的每一个学生对象for (int i = 0; i < arr.length; i++) {// 依次获取到数组里面的每一个学生对象Students stu = arr[i];if (stu != null){// 获取数组中学生对象的idint sid = stu.getId();// 比较if (sid == id) {return true;}}}// 当循环结束之后,没有找到id那么就表示数组中要查找的id是不存在的return false;}
}

得到的结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/678752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双活工作关于nacos注册中心的数据迁移

最近在做一个双活的项目&#xff0c;在纠结一个注册中心是在双活机房都准备一个&#xff0c;那主机房的数据如果传过去呢&#xff0c;查了一些资料&#xff0c;最终在官网查到了一个NacosSync 的组件&#xff0c;主要用来做数据传输的&#xff0c;并且支持在线替换注册中心的&a…

学生学习知识点总结作文试题练习题考试资讯网站源码

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) 资源简介 学生学习知识点总结作文试题练习题考试资讯网站源码+WAP手机版+采集优化版-整站打包 整站打包源码,简洁大…

多模态(二)--- CoCa原理与源码解读

1 CoCa简介 CoCa代表Contrastive Captioner 的缩写&#xff0c;代表模型用两个目标函数训练出来的&#xff0c;一个是Contrastive Loss&#xff0c;一个是Captioning Loss。 2 CoCa训练流程 利用ViT对image进行encoder编码获得图像特征token对图像特征进行attention pooling…

第四篇:SQL语法-DDL-数据定义语言

大年初一限定篇&#x1f600; &#xff08;祝广大IT学习者、工作者0 error 0 warning&#xff01;&#xff09; 一&#xff0c;DDL数据库操作 &#xff08;一&#xff09;库的查询操作 1.列出所有已定义数据库 show databases; 2.查询当前所处数据库 select database(); &…

基于Linux的HTTP代理服务器搭建与配置实战

在数字化世界中&#xff0c;HTTP代理服务器扮演着至关重要的角色&#xff0c;它们能够帮助我们管理网络请求、提高访问速度&#xff0c;甚至在某些情况下还能保护我们的隐私。而Linux系统&#xff0c;凭借其强大的功能和灵活性&#xff0c;成为了搭建HTTP代理服务器的理想选择。…

【C语言——打印乘法口诀表】

乘法表&#xff1a; 我们可以定义一个i控制行的变化&#xff0c;外加看上图的表得知我们需要用到循环结构&#xff0c;i是行需要不停的加加&#xff0c;因此&#xff0c;for循环比较好用&#xff0c;可以用两个嵌套的循环&#xff0c;外层循环即用到的i表示的是每一行的打印&am…

【从Python基础到深度学习】4. Linux 常用命令

1.配置root用户密码 root用户为系统默认最高权限用户&#xff0c;其他用户密码修改命令与root用户修改密码命令相同 sudo passwd root 2.添加用户&#xff08;henry&#xff09; sudo useradd -m henry -s /bin/bash 3.配置henry用户密码 Xshell下连接新用户&#xff08;hen…

基于javaEE的ssm仓库管理系统

仓库管理系统的重中之重是进销存分析这一板块&#xff0c;在这一板块中&#xff0c;顾名思义能够查询到近期的进货记录&#xff0c;包括每日的进货单据&#xff0c;单品推移(即某一商品的库存变化)&#xff0c;方便我们核对库存差异。同时也需要查询到每日的销售数据&#xff0…

hexo部署到gitee(码云)

引言 Hexo 是一个基于Node.js的静态博客框架&#xff0c;而 Gitee&#xff08;也被称为码云&#xff09;是一个国内的代码托管平台&#xff0c;支持 Git 版本控制系统&#xff0c;与 GitHub 类似。将 Hexo 部署到 Gitee Pages 可以让你的博客受益于 Gitee 的国内服务器&#xf…

Java多态原理

参考 虚方法 JVM杂记&#xff1a;对多态实现原理、虚方法表、虚方法、静态解析、动态链接的一些思考_多态和方法表的关系-CSDN博客 静态分派与动态分派 &#xff08;JVM&#xff09;Java虚拟机&#xff1a;静态分派 & 动态分派 原理解析 - 掘金 虚方法表 JVM 栈帧&am…

C++——二叉树

引入 map和set特性需要先铺垫二叉搜索树&#xff0c;而二叉搜索树也是一种树形结构 二叉搜索树的特性了解&#xff0c;有助于更好的理解map和set的特性 1.二叉搜索树的概念及优缺点 1.1二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或…

Python中使用opencv-python进行人脸检测

Python中使用opencv-python进行人脸检测 之前写过一篇VC中使用OpenCV进行人脸检测的博客。以数字图像处理中经常使用的lena图像为例&#xff0c;如下图所示&#xff1a; 使用OpenCV进行人脸检测十分简单&#xff0c;OpenCV官网给了一个Python人脸检测的示例程序&#xff0c;…

Backtrader 文档学习- Plotting - Plotting Date Ranges

Backtrader 文档学习- Plotting - Plotting Date Ranges 1.概述 1.9.31.x版本增加了绘制部分图形的功能。 可以使用策略实例中保留完整长度的时间戳数组的索引或者使用实际的datetime.date 或datetime.datetime 实例来限制需要绘制的内容。 仍然可以使用标准的cerebro.plot…

静态时序分析:建立时间分析

静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 在静态时序分析中&#xff0c;建立时间检查约束了触发器时钟引脚&#xff08;时钟路径&#xff09;和输入数据引脚&#xff08;数据路径&#xff09;之间的时序关系&#x…

android中实现设备尺寸适配

1、引言 设备尺寸适配的重要性想必就不用我多说了&#xff0c;在我发布的历史文章中我曾谈过Qt中的设备尺寸适配问题&#xff0c;那这里我就来教大家如何在android中做设备尺寸适配。在android中设备尺寸适配的方式有好几种&#xff0c;但我喜欢的还是使用获取设备真实尺寸然后…

c语言游戏实战(4):人生重开模拟器

前言&#xff1a; 人生重开模拟器是前段时间非常火的一个小游戏&#xff0c;接下来我们将一起学习使用c语言写一个简易版的人生重开模拟器。 网页版游戏&#xff1a; 人生重开模拟器 (ytecn.com) 1.实现一个简化版的人生重开模拟器 &#xff08;1&#xff09; 游戏开始的时…

PLC在物联网中位置—承上启下,与上位机下位机的关联。

谈到物联网&#xff0c;就绕不开PLC&#xff0c;本文着重介绍PLC的定义、与单片机的区分&#xff0c;价值、物联网中的位置&#xff0c;以及和上位机、下位机的关联&#xff0c;让友友们对PLC有个全面的认知。 一、什么是PLC PLC是可编程逻辑控制器&#xff08;Programmable L…

UI自动刷新大法:DataBinding数据绑定

之前我们讲了DataBinding在Activity、Fragment、RecyclerView中的基础使用&#xff0c;而那些常规使用方法里&#xff0c;每当绑定的变量发生数据变化时&#xff0c;都需要ViewDataBinding重新设值才会刷新对应UI。而DataBinding通过内部实现的观察者模式来进行自动刷新UI&…

go消息队列RabbitMQ - 订阅模式-direct

1.发布订阅 在Fanout模式中&#xff0c;一条消息&#xff0c;会被所有订阅的队列都消费。但是&#xff0c;在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下&#xff1a; 队列与交换机的绑定&#xff0c;不能…

第 384 场 LeetCode 周赛题解

A 修改矩阵 模拟 class Solution { public:vector<vector<int>> modifiedMatrix(vector<vector<int>> &matrix) {int m matrix.size(), n matrix[0].size();vector<int> mx(n, INT32_MIN);for (int i 0; i < m; i)for (int j 0; j &l…