Java基础-day07-代码题-自定义数据类型;ArrayList集合

时间:2022-05-04
本文章向大家介绍Java基础-day07-代码题-自定义数据类型;ArrayList集合,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Java基础-day07-代码题-自定义数据类型&ArrayList集合

1.饭店结账程序. 定义菜品类,属性为名称,价格,数量. 集合中添加若干菜品对象. 遍历集合,打印出集合中所有菜品名称和消费总金额.

代码实现:

package StudentJavaSEday07;
class Cai {
 private String name;
 private double price;
 private int num = 1; // 数量,默认一份.
 public Cai(String name, double price, int num) {
 super();
 this.name = name;
 this.price = price;
 this.num = num;
 }
 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 getNum() {
 return num;
 }
 public void setNum(int num) {
 this.num = num;
 }
}
package StudentJavaSEday07;
import java.util.ArrayList;
public class Test1 {
 public static void main(String[] args) {
 ArrayList<Cai> al = new ArrayList<>();
 Cai cai = new Cai("烤羊腿", 58, 4);
 Cai cai2 = new Cai("皮蛋豆腐", 8, 1);
 Cai cai3 = new Cai("烤板筋", 2, 10);
 Cai cai4 = new Cai("可乐", 8, 1);
 al.add(cai);
 al.add(cai2);
 al.add(cai3);
 al.add(cai4);
 double total = 0;
 // 遍历 集合
 for (Cai c : al) {
 // 打印
 String name = c.getName();
 int num = c.getNum();
 System.out.println("菜名 :" + name + " -- " + num + "份");
 // 计算 总价
 // 获取 每一个 菜的单价 . 单价 * 份数
 total += c.getPrice() * num;
 }
 System.out.println("总价:" + total);
 }
}

运行结果:

2.双色球 彩票机选程序.

双色球规则 : 一共 选 7 个号. 6个红色 , 1 蓝色的

红色球1-33中选6个,号码不能重复. 蓝色球16选1,号码不能重复.

红色 1- 33

蓝色 1- 16

打印出机选结果格式(前6个为红球,最后一个为篮球,数字是随机生成的,每次运行结果都不一样) :

本期中奖号码为:[7, 27, 25, 6, 4, 9, 12]

代码实现:

package StudentJavaSEday07;
import java.util.ArrayList;
import java.util.Random;
public class Demo4 {
 public static void main(String[] args) {
 // 1.定义集合, 保存 最终结果 .
 ArrayList<Integer> result = new ArrayList<>();
 // 2.开始选择 .
 Random random = new Random();
 // 随机生成 数字.
 // 3.生成6个红球并保存到集合中
 while (result.size() < 6) {
 int red_ball = random.nextInt(33) + 1;
 // 保证唯一
 if (!result.contains(red_ball)) {
 result.add(red_ball);
 }
 }
 // 4、再生成 1个蓝色 的球 ,并添加到集合中
 int blue_ball = random.nextInt(16) + 1;// 蓝色球
 result.add(blue_ball);
 // 5、打印结果
 System.out.println("本期中奖号码为:" + result);
 }
}

运行结果:

3.编写一个程序的模拟班级学生的成绩库, 包含多项成绩,英语,数学,Java.

实现如下功能:

1.可以修改某个学生的某项分数.

2.可以打印全班同学成绩

要求使用集合来完成.

代码实现:

package StudentJavaSEday07;
class Student {
 private double english;
 private double math;
 private double java;
 private String name;
 public Student() {
 super();
 }
 public Student(String name, double english, double math, double java) {
 super();
 this.english = english;
 this.math = math;
 this.java = java;
 this.name = name;
 }
 public double getEnglish() {
 return english;
 }
 public void setEnglish(double english) {
 this.english = english;
 }
 public double getMath() {
 return math;
 }
 public void setMath(double math) {
 this.math = math;
 }
 public double getJava() {
 return java;
 }
 public void setJava(double java) {
 this.java = java;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
}
package StudentJavaSEday07;
import java.util.ArrayList;
import java.util.Scanner;
public class Test2 {
 public static void main(String[] args) {
 ArrayList<Student> student_list = new ArrayList<>();
 student_list.add(new Student("张三", 99, 90, 100));
 student_list.add(new Student("李四", 89, 80, 100));
 for (Student student : student_list) {
 System.out.println(student);
 }
 Scanner scanner = new Scanner(System.in);
 // 请输入学生姓名
 System.out.println("请输入学生姓名 ");
 String name = scanner.nextLine();
 for (Student student : student_list) {
 String n = student.getName();
 if (n.equals(name)) {
 // 可以继续录入, 修改
 System.out.println("请输入科目 ");
 String kemu = scanner.nextLine();
 System.out.println("请输入分数 ");
 double score = scanner.nextDouble();
 // 根据不同的科目,修改不同的分数.
 switch (kemu) {
 case "数学":
 student.setMath(score);
 break;
 case "英语":
 student.setEnglish(score);
 break;
 case "java":
 student.setJava(score);
 break;
 default:
 System.out.println("查无此课, 对不起");
 return ; 
 }
 System.out.println("恭喜您, 修改成功");
 System.out.println(student);
 return; 
 }
 }
 System.out.println("对不起 ,查无此人");
 }
}

运行结果:

4.随机点名器

a) 案例回顾

在全班同学中随机的打印出一名同学名字。

共三个步骤:

1.存储全班同学名字

2.打印全班同学每一个人的名字

3.在班级总人数范围内,随机产生一个随机数索引,查找该随机数索引所对应的同学名字

b) 重构内容分析

1:将原来的数组容器修改为集合容器

2:将原来的人名字符串修改为使用人类对象

c) 实现步骤

定义Person类

定义Person类,包含成员变量名称、年龄、地址

存储所有同学姓名

在main方法中ArrayList集合类型的变量并创建对象为变量赋值,再向集合中添加5个Person对象。

总览全班同学姓名

遍历集合,依次获取每个Person对象,再获取Person对象名称打印。

随机点名

通过随机数类Random产生一个从0到集合长度的随机索引。而该索引对应的Person对象的名称属性便是所求的随机姓名。

代码实现:

package StudentJavaSEday07;
/*
自定义类型 人类
属性 
姓名  String
年龄  int 
性别  String
身高  double
是否热爱java  boolean
*/
public class Person {
 //姓名
 String name;
 //年龄
 int age;
 //性别
 String sex;
 //身高
 double height;
 //是否喜欢java
 boolean isLoveJava;
}
package StudentJavaSEday07;
//导入集合ArrayList
import java.util.ArrayList;
//导入Random
import java.util.Random;
public class RandomName
{
public static void main(String[] args)
{
 //定义一个集合用来存储所有人
 ArrayList<Person> list = new ArrayList<Person>();
 //向集合中添加人  创建Person对象 将Person添加到集合中
 Person p = new Person();
 p.name = "柳岩";
 Person p2 = new Person();
 p2.name = "唐嫣";
 Person p3 = new Person();
 p3.name = "金莲";
 list.add(p);
 list.add(p2);
 list.add(p3);
 System.out.println("-----------------------");
 //遍历集合,依次获取每个人,打印每个人的名字
 for(int i = 0 ;i < list.size();i++){
 Person thisP = list.get(i);
 System.out.println(thisP.name);
 }
 System.out.println("-----------------------");
 //随机点名 
 Random r = new Random();
 //生成一个最大不超过集合最大索引的随机数   0 - 集合最大索引的一个随机数
 int randomIndex = r.nextInt(list.size());
 //依据随机数得到集合中相对应的人
 Person person = list.get(randomIndex);
 System.out.println("今天你答题:"+person.name);
}
}

运行结果: