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);
}
}

运行结果:

原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2017-06-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Golang中Interface类型详解

文 | Zuozuohao 共 14470 字,阅读需 36 分钟 本文章翻译自《Let's learn Go》的“Interfaces: the awesom...

377100
来自专栏Python爱好者

Java基础笔记17

16160
来自专栏Golang语言社区

Golang中Interface类型详解

本文章翻译自《Let's learn Go》的“Interfaces: the awesomesauce of Go”一节 原文地址:http://go-boo...

48180
来自专栏老马说编程

(45) 神奇的堆 / 计算机程序的思维逻辑

前面几节介绍了Java中的基本容器类,每个容器类背后都有一种数据结构,ArrayList是动态数组,LinkedList是链表,HashMap/HashSet是...

23490
来自专栏Danny的专栏

HashMap实现原理及源码分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

3.6K30
来自专栏WD学习记录

Leetcode Regular Expression Matching

Given an input string (s) and a pattern (p), implement regular expression matchi...

9420
来自专栏大闲人柴毛毛

剑指offer代码解析——面试题15求链表中倒数第K个结点

算法的分析过程均在代码注释中: /** * 题目:输入一个单链表,输出该链表从后往前的第k个数。 * PS:从后往前数时从1开始计数。 * @author...

30560
来自专栏coding

python生成器讲解1什么是生成器将列表生成式的[]改成()用 yield 创建生成器yield的执行流程

如果要创建的是一个1000万个元素的列表呢?不可能使用以上的方式,即使你的电脑性能强劲,内存足够用,也不是这么用来浪费的。好比,你不可能用一个大桶来装一茶杯的水...

14230
来自专栏Java Web

数据结构与算法(4)——优先队列和堆什么是优先队列?堆和二叉堆LeetCode相关题目整理

听这个名字就能知道,优先队列也是一种队列,只不过不同的是,优先队列的出队顺序是按照优先级来的;在有些情况下,可能需要找到元素集合中的最小或者最大元素,可以利用优...

45510
来自专栏技术博客

C#基础知识系列十(集合)

  本节主要是来了解学习集合,以方便在程序编写时,什么地方该选用什么集合,让程序更健壮的运行起来。在学习了解集合之前,首先需要了解一些数据结构方面的知识。下面我...

12930

扫码关注云+社区

领取腾讯云代金券