1. 程式人生 > 其它 >Java基礎-day07-程式碼題-自定義資料型別;ArrayList集合

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

執行結果: