Java基礎經典案例

案例列表

01減肥計劃switch版本

02減肥計劃if版本

03逢七跳過

04不死神兔

05百錢白雞

06數組元素求和

07判斷兩個數組是否相同

08查找元素在數組中的索引

09數組元素反轉

10評委打分

11統計字元串中大小寫及數字個數

12求三個整數最大值

13判斷數組中是否包含2

14篩選出其中的數字和字母並按照數字在前字母在後的規則排序

15隨機生成雙色球

16產生隨機生成驗證碼

17.楊輝三角

18程式比較誰的年齡大

19鍵盤輸入3本書按照價格從低到高排序後輸出,如果價格相同則按照書名的自然順序排序

20使用TreeMap集合保存勞模資訊,要求以勞模對象為鍵,家庭住址為值,並按照勞模的年齡從大到小排序後輸出

案例實現

01減肥計劃switch版本

package com.itheima._01減肥計劃switch版本;

import java.util.Scanner;

/**
課前說明:
目標:今天一天都是講解編程思維相關的題目,有一定的難度。
編程思維:一定是長期的程式碼訓練和書寫形成的。
今天的學習目標:理解程式碼的執行流程和解決思路即可!
所有的問題的解決:寫程式碼、寫程式碼、寫程式碼。

案例需求:
輸入星期數,顯示今天的減肥活動 周一:跑步 周二:游泳 周三:慢走 周四:動感單車 周五:拳擊
周六:爬山 周日:好好吃一頓。

分析步驟:
單值匹配案例,我們直接使用switch。
1、使用掃描器類接收用戶輸入的星期數。
2、使用switch分支判斷用戶輸入的星期數然後匹配具體分支結果輸出即可。
*/
public class ExecDemo {
public static void main(String[] args) {
// 1、使用掃描器類接收用戶輸入的星期數。
Scanner sc = new Scanner(System.in);
System.out.print(“請您輸入星期數:”);
// 在這行程式碼這裡暫停,然後等待用戶輸入星期後,按了確認鍵,這裡就開始掃描用戶輸入的星期數交給weekDay
String weekDay = sc.nextLine();

// 2.使用switch分支判斷用戶輸入的星期數然後匹配具體分支結果輸出即可。
switch (weekDay) {
case “周一”:
System.out.println(“跑步🏃‍”);
break;
case “周二”:
System.out.println(“游泳🏊‍‍”);
break;
case “周三”:
System.out.println(“慢走‍‍”);
break;
case “周四”:
System.out.println(“動感單車”);
break;
case “周五”:
System.out.println(“拳擊”);
break;
case “周六”:
System.out.println(“爬山”);
break;
case “周日”:
System.out.println(“好好吃一頓!”);
break;
default:
System.err.println(“您輸入的數據有誤!”);
}
}
}

02減肥計劃if版本

package com.itheima._02減肥計劃if版本;

import java.util.Scanner;

/**
案例需求:
輸入星期數,顯示今天的減肥活動 周一:跑步 周二:游泳 周三:慢走 周四:動感單車 周五:拳擊
周六:爬山 周日:好好吃一頓。

分析步驟:
單值匹配案例,我們也可以使用if。(還是建議用switch更加合適!)
1、使用掃描器類接收用戶輸入的星期數。
2、使用if分支判斷用戶輸入的星期數然後匹配具體分支結果輸出即可。
小結:
單值匹配還是用switch吧。
*/
public class ExecDemo {
public static void main(String[] args) {
// 1、使用掃描器類接收用戶輸入的星期數。 // ALT +ENTER導入包!
Scanner sc = new Scanner(System.in);
System.out.print(“請您輸入星期整數(0-6):”);
// 在這行程式碼這裡暫停,然後等待用戶輸入星期後,按了確認鍵,這裡就開始掃描用戶輸入的星期數交給weekDay
// String weekDay = sc.nextLine(); // == 不建議判斷字元串的比較!
int weekDay = sc.nextInt(); // ==適合做基本數據類型的比較!

// 2.使用if分支判斷用戶輸入的星期數然後匹配具體分支結果輸出即可。
if(weekDay == 0){
System.out.println(“好好吃一頓”);
}else if(weekDay == 1){
System.out.println(“跑步”);
}else if(weekDay == 2){
System.out.println(“游泳”);
}else if(weekDay == 3){
System.out.println(“慢走”);
}else if(weekDay == 4){
System.out.println(“動感單車”);
}else if(weekDay == 5){
System.out.println(“拳擊”);
}else if(weekDay == 6){
System.out.println(“爬山”);
}else{
System.err.println(“您的星期數據輸入有誤!”);
}
}
}

03逢七跳過

package com.itheima._03逢七跳過;

/**
案例需求:
朋友聚會的時候可能會玩一個遊戲:逢七過。 規則是:從任意一個數字開始報數,當你要報的數字包
含7或者是7的倍數時都要說:過。 為了幫助大家更好的玩這個遊戲,這裡我們直接在控制台列印出1-
100之間的滿足逢七必過規則的數據。 這樣,大家將來在玩遊戲的時候,就知道哪些數據要說:過

分析步驟:
分析主幹:從1-100中找出包含7以及是7的倍數的那些數據輸出!
1、先定義一個循環依次訪問到1-100之間的數據。 2 3 4 5 6 …. 99
2、判斷當前數據是否包含7或者是否是7的倍數,如果是,輸出該數據。
*/
public class ExecDemo {
public static void main(String[] args) {
// 1、先定義一個循環依次訪問到1-100之間的數據。 2 3 4 5 6 …. 99
for(int i = 2 ; i <= 99 ; i++) {
// i = 2 3 4 5 6 …. 98 99
// 2.判斷當前數據是否包含7或者是否是7的倍數,如果是,輸出該數據。 7
// 個位: i % 10
// 十位: i /10
if(i % 10 == 7 || i /10 == 7 || i % 7 == 0 ){
System.out.print(i+” “);
}
}
}
}

04不死神兔

package com.itheima._04不死神兔;

/**
案例需求:
有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,
假如兔子都不死,問第二十個月的兔子對數為多少?

分析步驟:
技巧:歸納推敲、總結規律,寫程式碼實現。
歸納推敲:
月份: 0 1 2 3 4 5 6
對數: 1 1 2 3 5 8 13
總結規律:
從第三個月開始,每個月的對數都是前兩個月的對數的和。
寫程式碼實現:
1.定義一個數組存儲20個月份的兔子對數。
2.為數組的第一個位置和第二個位置都賦值成1,從數組的第3個位置開始遍歷。
3.為每個位置賦值成它的前兩個元素的數據的總和: nums[i] = nums[i-1] + nums[i-2]
小結:
歸納推敲:先自己手工算出幾個。
總結規律:程式碼寫多了就有了經驗
編碼實現:
*/
public class ExecDemo {
public static void main(String[] args) {
// 1.定義一個數組存儲20個月份每個月的兔子對數
int[] nums = new int[20];
// 2.為數組的第一個位置和第二個位置都賦值成1.
// nums[0] = 1 ;
// nums[1] = 1 ;
nums[0] = nums[1] = 1 ; // 以上簡化寫法。

// nums = [1 , 1 , ……….]
// 3. 從第三個元素開始為每個位置賦值成它的前兩個元素的數據的總和。
for(int i = 2 ; i < nums.length ; i++ ){
// i = 0 1 [2] 3
// 當前元素的元素值賦值成 = 前兩個位置的元素和。
nums[i] = nums[i-1] + nums[i-2];
}
// 4.輸出第20個月的對數
System.out.println(“第20個月的兔子數據是:”+nums[19]);
// 作業:輸出每個月的兔子對數,並按照如上格式輸出!
}
}

05百錢白雞

package com.itheima._05百錢白雞;

/**
百錢買百:
中國古代數學家張丘建在《算經》一書中提出的數學問題:雞翁一值錢五,雞母一值錢三,雞雛三值錢
一。 百錢買百雞,問雞翁、雞母、雞雛各幾何?

分析步驟:
分析主幹: 雞翁一隻5塊,雞母一隻3塊,三隻雞雛1塊,請問100塊可以買多少組合,最終的雞數必須也是100隻!
分析步驟:
1.第一步:分析 雞翁 可以買多少只的範圍 : 0<= i <= 20;
2.第二步: 分析 雞母 可以買多少只的範圍 : 0<= j <= 33;
3.第三步:分析 雞雛 的數量 100 – i – j 。 (總買的雞數必須剛剛是100。而且要求總金額必須是100元)。
4.第四步:分析 雞雛必須是3的倍數(每3隻3隻的買),然後必須三者的總金額剛好是100元的組合才可以輸出!
*/
public class ExecDemo {
public static void main(String[] args) {
// a.使用一個循環來選擇雞翁買的只數
for(int i = 0 ; i <= 20 ; i++ ){ // 25 5
// i代表了雞翁買的只數 0 -20 之間。
// b.使用一個循環選擇雞母的只數
for(int j = 0 ; j <= 33 ; j++ ){
// j 代表了雞母的只數:0 – 33
// c.得到雞雛的只數k
int k = 100 – i – j ;
// d.判斷三種類型的雞的總金額是否剛剛好是100元 ,是這種組合的結果就滿足了百錢百雞
// 注意:雞雛的數量必須剛剛是3的倍數!
if(k % 3 == 0 && i * 5 + j * 3 + k/3 == 100){
System.out.println(“雞翁:”+i+”,雞母:”+j +”,雞雛:”+k);
}
}
}
}
}

06數組元素求和

package com.itheima._06數組元素求和;

/**
案例需求:
有這樣的一個數組,元素是{68,27,95,88,171,996,51,210}。求出該數組中滿足要求的元素和, 要求
是:求和的元素個位和十位都不能是7,並且只能是偶數

分析步驟:
0.定義數組。
1.定義變數存儲最終求和的結果。
2.遍曆數組中的每個元素值。
3.當前元素值必須滿足:個位和十位都不能是7,並且只能是偶數 才能夠被累加到求和變數中去。
4.循環結束之後輸出求和變數即可。
*/

public class ExecDemo {
public static void main(String[] args) {
// 0.定義數組。
int[] arr = {68,27,95,88,171,996,51,210};
// 0 1 2 3 4 5 6
// 1.定義變數存儲最終求和的結果。
int sum = 0 ;
// 2.遍曆數組中的每個元素值。
for(int i = 0 ; i < arr.length ; i++ ) {
// i = 0 1 2 3 4 5 6 7
// 當前元素值就是:arr[i]
// 3.當前元素值必須滿足:個位和十位都不能是7,
// 並且只能是偶數 才能夠被累加到求和變數中去。 // 171 /10 = 17 % 10 = 7
if(arr[i] % 10 != 7 && arr[i] / 10 % 10 != 7 && arr[i] % 2==0 ) {
System.out.println(arr[i]);
sum += arr[i]; // 累加滿足需要的該值到求和變數sum中去。
}
}
// 4.循環結束之後輸出求和變數即可。
System.out.println(“結果是:”+sum);
}
}

07判斷兩個數組是否相同

package com.itheima._07判斷兩個數組是否相同;

/**
案例需求:(有點難度)
定義一個方法,用於比較兩個數組的內容是否相同和不相同。

int[] arr1 = {10 , 30 , 50 , 70 , 90};
int[] arr2 = {10 , 30 , 50 , 70 , 90};

分析步驟:
a、定義2個數組。
b、定義一個方法封裝判斷數組內容是否相同的功能,所以這個方法就應該接受2個數組。
這個方法最好給它一個返回值,認為相同返回true, 反之返回false.
b.調用方法傳入數組,得到比較結果:false|true。

*/
public class ExecDemo {
public static void main(String[] args) {
// 1.定義2個數組。
int[] arr1 = {10 , 30 , 50 , 70 , 90};
int[] arr2 = {10 , 30 , 50 , 70 , 90};
// 0 1 2 3 4

// 3.傳入兩個數組到方法中進行比較得到方法的返回值
boolean result = compare(arr1 , arr2);
System.out.println(result);
}

// 2.定義一個方法封裝判斷數組內容是否相同的功能
public static boolean compare(int[] arr1 , int[] arr2){
// 4.判斷2個數組的內容是否相同
// 判斷2個數組的長度是否相同,如果長度不相同直接返回false.
if(arr1.length != arr2.length) return false;

// 5.到這兒數組的長度已經是相同的,接下來要判斷具體的每個元素值是否也相同!
// 使用一個循環遍歷兩個數組的元素進行比較
for(int i = 0 ; i < arr1.length ; i++ ) {
// i = 0 1 2 3 4
// 6.判斷元素內容是否相同 ,如果發現有一個不同就直接返回false
if(arr1[i] != arr2[i] ) return false;
}

// 7.程式碼如果執行到這兒了,說明兩個數組的每個元素都相同了,直接返回true
return true;
}
}

08查找元素在數組中的索引

package com.itheima._08查找元素在數組中的索引;

import java.util.Scanner;

/**
案例需求:
已知一個數組 arr = {19, 28, 37, 46, 50}; 鍵盤錄入一個數據,查找該數據在數組中的索引。
並在控制台輸出找到的索引值。如果沒有查找到,則輸出-1

分析步驟:
主幹:輸入一個數據,看它是否在數組中存在,存在返回元素的索引值,不存在返回-1.
1、定義一個數組。
2、接收用戶輸入一個數據。
3、定義一個方法接收數組和查詢的數據,然後在方法中看是否在數組中存在,存在返回元素的索引值,不存在返回-1。
4、調用方法傳入數組和數據,得到方法的返回結果。
*/
public class ExecDemo {
public static void main(String[] args) {
// 1、定義一個數組。
int[] arr = {19, 28, 37, 37, 46, 50} ;

// 2、接收用戶輸入一個數據。
Scanner sc = new Scanner(System.in);
System.out.print(“請輸入您要查找的數據:”);
int data = sc.nextInt();

// 4、調用方法傳入數組和數據,得到方法的返回結果。
int index = getDataIndex(arr , data);
System.out.println(index);

}

// 3.定義一個方法等著該功能
public static int getDataIndex(int[] arr , int data){
// arr {19, 28, 37, 46, 50}
// i 0 1 2 3 4
// data 37
// 5.判斷傳入的數組中是否存在該數據,存在返回該數據的索引值,不存在返回-1.
for(int i = 0 ; i < arr.length ; i++ ){
if(arr[i] == data){
return i;
}
}
// 6.如果整個循環遍歷完都沒有返回索引數據,說明不存在該元素值
return -1;
}
}

09數組元素反轉

package com.itheima._09數組元素反轉;

/**
案例需求:
已知一個數組 arr = {19, 28, 37, 46, 50}; 用程式實現把該數組中的元素值交換, 交換後的數組 arr = {50,
46, 37, 28, 19}; 並在控制台輸出交換後的數組元素

分析步驟:
思路:首尾交換。
1、使用一個循環,定義2個計數器,一個計數器在第一個位置,一個計數器在最後一個位置。
2、控制前面的計算器往前加,後面的計數器往後減。
3、循環條件如何控制,正常交換的條件必須是 : i < j 。(i必須在j的後面才需要交換)
*/
public class ExecDemo {
public static void main(String[] args) {
//int a = 20, b = 10;
// 0.準備數組
int[] arr = {19, 28 , 46, 50};
// i j
// 1、使用一個循環,定義2個計數器,一個計數器在第一個位置,一個計數器在最後一個位置。
// i在數組的第一個索引,j在數組的最後一個索引
for(int i = 0 , j = arr.length – 1 ; i < j ; i++ , j– ){
// 交換 i 和 j位置處的元素。
// 2.定義一個臨時變數
int temp = arr[i]; // 19
arr[i] = arr[j];
arr[j] = temp ;
}

// 3.輸出數組內容看一下!
for(int i = 0 ; i < arr.length ; i++ ){
System.out.print(arr[i]+” “);
}
}
}

10評委打分

package com.itheima._10評委打分;
import java.util.Random;
/**
案例需求:
在編程競賽中,有6個評委為參賽的選手打分,分數為0-100的隨機整數分。 選手的最後得分為:去掉一個
最高分和一個最低分後 的4個評委平均值 (不考慮小數部分)。

分析步驟:
1、定義一個數組存儲6個評委的分數。
2、隨機6個0-100的分數存入到數組中去。
3、輸出一下數組中的內容看一下。
4、找出該選手的評分均(去掉最高和最低)。
*/
public class ExecDemo {
public static void main(String[] args) {
// 1、定義一個數組存儲6個評委的分數。
int[] scores = new int[6];
// 2.循環6次為當前數組產生隨機的6個0-100的分數
Random r = new Random();
for(int i = 0 ; i < scores.length ; i++ ){
// i = 0 1 2 3 4 5
scores[i] = r.nextInt(101); // 0-100 1、把隨機數賦值到了數組的當前位置
}
// 3.定義一個方法把數組的內容列印出來看一下!!
printArray(scores);
// 4.計算出該選手的平均分數。
calcAvgScore(scores);
}

public static void calcAvgScore(int[] arr){
// arr [29, 50, 65, 5, 61, 84]
// a、計算出該選手的平均分數。
// b、定義一個變數存儲最大值,最小值,總和
int max = arr[0]; // 存儲最大值
int min = arr[0]; // 存儲最小值
int sum = 0 ; // 求和
// c.遍曆數組
for(int i = 0 ; i < arr.length ; i++ ) {
// d.判斷最大值
if(arr[i] > max){
max = arr[i];
}

// e.判斷最小值
if(arr[i] < min){
min = arr[i];
}

// f.累加求和
sum += arr[i];
}
// g.去掉最高分最低分
int avg = (sum – max – min ) / (arr.length – 2);
System.out.println(“去掉最高分:”+max);
System.out.println(“去掉最低分:”+min);
System.out.println(“去掉最高分最低分後的平均分為:”+avg);
}

public static void printArray(int[] arr){
System.out.print(“[“);
for(int i = 0 ; i < arr.length ; i++ ) {
System.out.print(i == arr.length – 1 ? arr[i] : arr[i]+”, “); // 不能換行!
}
System.out.print(“]”);
System.out.println(); // 換行!
}
}

11統計字元串中大小寫及數字個數

1.程式運行後通過鍵盤錄入一個字元串。要求字元串中必須包含:大寫字母
2.如果錄入的字元串中沒有大寫字母、要進行給出提示。然後程式可以繼續錄入字元串
3.如果錄入的字元串中有大寫字母。那麼統計這個字元串中小寫字母、大寫字母、數字、其他字元出現的個數。程式結束
例如:
請輸入一個字元串:
123456abc
您輸入的字元串中沒有大寫字母。請重新輸入:
ABC456ghi$%^&D
大寫字母有:4個
小寫字母有:3個
數字有:3個
其他字元有:4個
程式碼如下:
package M1;

import java.util.Scanner;

public class M1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println(“請輸入一個字元串:”);
String s = sc.next();
int countnum = 0;
int countA = 0;
int counta = 0;
int Qita = 0;
//char[] arr = s.toCharArray();//字元串變成字元數組
StringBuilder sb=new StringBuilder(s);//將鍵盤錄入的值存入sb
for (int i = 0; i < sb.length(); i++) {
char c = sb.charAt(i);//遍歷拿到每個字元
if (c >= ‘0’ && c <= ‘9’) {//判斷
countnum++;
} else if (c >= ‘a’ && c <= ‘z’) {
counta++;
} else if (c >= ‘A’ && c <= ‘Z’) {
countA++;
} else {
Qita++;
}
}
/*for (int i = 0; i < arr.length; i++) {
if (arr[i] >= ‘0’ && arr[i] <= ‘9’) {
countnum++;
} else if (arr[i] >= ‘a’ && arr[i] <= ‘z’) {
counta++;
} else if (arr[i] >= ‘A’ && arr[i] <= ‘Z’) {
countA++;
} else {
Qita++;
}
}
if (Qita == arr.length) {
System.out.println(“全是字元,重新輸入!”);
continue;
}
*/
if (countA==0){//沒有大寫跳過後續程式碼,繼續循環
System.out.println(“沒有大寫,請重新輸入!”);
continue;
}
System.out.println(“數字” + countnum);
System.out.println(“大寫” + countA);
System.out.println(“小寫” + counta);
System.out.println(“其他” + Qita);
return;

}

}
}

12求三個整數最大值

package Mn1;

import java.util.Scanner;

public class Mn1 {
public static void main(String[] args) {
// 定義一個方法,該方法用來獲取三個整數中的最大值。
// 並在main方法中鍵盤錄入三個整數,然後調用方法,求出錄入的三個整數中的最大值。
Scanner sc=new Scanner(System.in);
System.out.println(“請輸入第一個整數”);
int num_1=sc.nextInt();
System.out.println(“請輸入第二個整數”);
int num_2=sc.nextInt();
System.out.println(“請輸入第三個整數”);
int num_3=sc.nextInt();
int[]arr={num_1,num_2,num_3};
int max = Max(arr);
System.out.println(“最大值為:”+max);
}
public static int Max(int[]arr){
int max=arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i]>max){
max=arr[i];
}
}return max;
}
}

13判斷數組中是否包含2

package Mn2;

public class Mn2 {
/*定義方法exist,該方法用來判斷指定元素在數組中是否存在。
在main方法中定義數組,數組中的元素為{3,5,2,6,1},
調用exist方法,判斷該數組中是否包含2,並輸出結果。*/
public static void main(String[] args) {
int[] arr = {3, 5, 2, 6, 1};
exist(arr);
}

/*
//方法1
public static void exist(int[] arr) {
int index = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 2) {
index++;
}
}
if (index != -1) {
System.out.println(“包含2”);
} else {
System.out.println(“不包含2”);
}
}

}*/
//方法2:
public static void exist(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 2) {
System.out.println(“包含2”);
return;
}
}
System.out.println(“沒有2”);
}
}

 14篩選出其中的數字和字母並按照數字在前字母在後的規則排序

程式碼如下:

import java.util.Scanner;

public class Moni_3 {
    public static void main(String[] args) {
       /* 遍歷下列字元串,篩選出其中的數字和字母並按照數字在前字母在後的規則
        組成一個新的字元串,把組成的新字元串列印在控制台。*/
        Scanner
sc=new Scanner(System.in);
        System.out.println(“請輸入:”);
       String s=sc.next();
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c>=’a’&&c<=’z’){
                sb.append(c);
            }
        }
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c<=’9’&&c>=’0′){
                sb.append(c);
            }
        }

        for (int i = 0; i < sb.length(); i++) {
            char c = sb.charAt(i);
            System.out.print(c);
          }

  }

}

15隨機生成雙色球

需求:

已知雙色球由1個藍色球和6個紅色球組成,藍色球的範圍是1–16,紅色球的範圍是1–33;請使用程式隨機生成一組雙色球並保存到數組中;然後列印出數組中的這一組數據;

思路:

1:由題目可知需要使用一個長度為7的數組才能保存這一注雙色球的數據;並且數據都是需要隨機生成的,所以使用數組的動態初始化更合適;

2:藍色球只有一個,所以可以單獨生成並存放到數組的0索引位置;但是需要注意控制隨機數的範圍;

3:剩下的6個紅色球可以使用循環生成並保存到數組中,但是需要注意控制隨機數的範圍;

4:數組中保存好數據以後,可以對數組遍歷,列印數據即可;

程式碼:

import java.util.Random;
public class ZuoYe1 {
public static void main(String[] args) {
//動態初始化數組
int[] arr = new int[7];
//先生成藍色球保存到0索引
Random r = new Random();
arr[0] = r.nextInt(16)+1;
//循環生成6個紅色球保存到數組的1-6索引位置
for (int i = 1; i <= 6; i++) {
arr[i] = r.nextInt(33)+1;
}
//遍歷列印數組中的元素
System.out.print(“本次隨機生成的雙色球是[第一個是藍色球,剩餘的是紅色球]:”);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+” “);
}
}
}

16產生隨機生成驗證碼

package com.heima.meiri.day8;
import java.util.Random;
import java.util.Scanner;
/*
1.str用來存放隨機數
2.用一個循環去隨機去str字元串里的字元
3.產生隨機數位字元串的長度
*/
public class kz2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(“請輸入要獲取幾位隨機數:”);
int num_1 = sc.nextInt();
String suiji = Suiji(num_1);//傳入鍵盤錄入的數字,輸入幾列印幾位數的驗證
System.out.println(“隨機數為:” + suiji);//列印驗證碼
}

public static String Suiji(int num) {//定義方法
Random r = new Random();//創建隨機數對象
StringBuilder sb = new StringBuilder();//創建sb對象
String s = “abcdefghijklmnpqrstuvwxy0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ”;
將要隨機獲取的數值存入String變數
for (int i = 1; i < num; i++) {
//num為幾就是幾位數的驗證碼
int num_1 = r.nextInt(s.length());
//定義隨機數範圍位為string s的字元長度
sb.append(s.charAt(num_1));
//因為num1具有隨機性,chaAt(索引)為索引位置的字元,將獲取到的字元存入sb
}
int i = r.nextInt(num);//定義隨機索引
int j = r.nextInt(10);//定義隨機數
char f=(char)j;
sb.insert(i, j);//插入0-4隨機索引,插入內容為0-9隨機數字
return sb.toString();

}
}

 17.楊輝三角

package com.heima.meiri.day6;

public class Yhsj {
public static void main(String[] args) {
Yanghui(5);
}
public static void Yanghui(int a){
int[][]arr=new int[a][a];
for (int i = 0; i < arr.length; i++) {
arr[i][0]=1;
arr[i][i]=1;
if (i>=2){
for (int j = 1; j < i; j++) {
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
}
System.out.println(“直角列印;”);
for (int i = 0; i < a; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(arr[i][j]+”\t “);
}
System.out.println();
}
System.out.println(“金字塔列印;”);
for (int i = 0; i < a; i++) {
for (int k=0;k<a-i;k++){
System.out.print(“\t”);
}
for (int j = 0; j <= i; j++) {
System.out.print(arr[i][j]+”\t”+”\t”);
}

System.out.println();
}
System.out.println(“倒金字塔列印;”);
for (int i = a-1; i >= 0; i–) {
for (int k=1;k<a-i;k++){
System.out.print(“\t”);
}
for (int j = 0; j <=i; j++) {
System.out.print(arr[i][j]+”\t”+”\t”);
}
System.out.println();
}
}
}

18程式比較誰的年齡大

請從控制台分別接收兩個「生日」,格式為:yyyy年MM月dd日,用程式比較兩個生日表示的人的年齡大小關係並列印出結果;

要求:

1:使用Date+SimpleDateFormat完成一遍,

2:再使用LocalDate+DateTimeFormatter完成一遍;

提示:

注意,生日值越小,證明出生的越早,就意味著年齡越大,不要搞反了呦;

package day6.No_3;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Scanner;
import java.util.Timer;

/*
鍵盤錄入字元串
使用Date/Loca將字元串轉換為毫秒
對比二者毫秒值
*/
public class Demo {
public static void main(String[] args) throws ParseException {

Scanner sc = new Scanner(System.in);
System.out.println(“請輸入第一個生日(****年**月**日)”);
String s1 = sc.next();
System.out.println(“請輸入第一個生日(****年**月**日)”);
String s2 = sc.next();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(“yyyy年MM月dd日”);
LocalDate localDate = LocalDate.parse(s1, dateTimeFormatter);
LocalDate localDate1 = LocalDate.parse(s2, dateTimeFormatter);
// LocalDate+DateTimeFormatter實現對比
if (localDate.isAfter(localDate1)) {
System.out.println(“第二個大”);
}
if (localDate.isBefore(localDate1)) {
System.out.println(“第一個大”);
}if (localDate.isEqual(localDate1)){
System.out.println(“一樣大”);
}

// Date SimpleDateFormat實現對比:

Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy年MM月dd日”);
try {
long time1 = simpleDateFormat.parse(s1).getTime();
long time2 = simpleDateFormat.parse(s2).getTime();
if (time1 > time2) {
System.out.println(“第二個大”);
} else if (time1<time2){
System.out.println(“第一個大”);
}else {
System.out.println(“一樣大”);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}

19隨機生成8個不重複的10至20之間的隨機數並保存Set集合中,然後列印出集合中所有的數據

要求:

使用TreeSet集合實現;

參考程式碼:

public static void main(String[] args) {
TreeSet<Integer> set = new TreeSet<>();
Random r = new Random();
int count =1;
while (set.size()<8){
int i = r.nextInt(20 – 10 + 1) + 10;
System.out.println(“第”+count++ +”次生成的隨機數是:”+i);
set.add(i);
}
System.out.println(“集合中保存的8個不重複的隨機數是:”+set);
}

19鍵盤輸入3本書按照價格從低到高排序後輸出,如果價格相同則按照書名的自然順序排序

要求:

1:書以對象形式存在,包含書名和價格(int類型)兩個屬性;

2:要求即使直接列印書對象的時候,也能看到書的名稱和價格,而不是書對象的地址值;

3:分別使用自然排序和比較器排序實現效果;

參考程式碼:

方式一:

public class Book implements Comparable<Book>{
private String name;
private int price;
@Override
public int compareTo(Book book) {
int i = this.price – book.price;//主要條件
return i==0?this.name.compareTo(book.name):i;//次要條件
}
—–自己補全getter/setter,構造方法,toString方法——
}
測試類的main方法
public static void main(String[] args) {
TreeSet<Book> set = new TreeSet<Book>();
Scanner sc = new Scanner(System.in);
int i=1;
while (true){
System.out.println(“請輸入第”+i +”本書的名稱:”);
String name = sc.next();
System.out.println(“請輸入第”+i +”本書的價格(整數):”);
int price = sc.nextInt();
Book b1 = new Book(name,price);
set.add(b1);
i++;
System.out.println(“添加”+name+” 書已經成功,繼續添加請輸入1,輸入其他數字將結束!”);
int ch = sc.nextInt();
if(ch!=1){
break;
}
}
System.out.println(“您一共添加了:”+set.size()+”本書,分別是:”);
for (Book book : set) {
System.out.println(book);
}
}

方式二:

public class Book{//無需實現介面
private String name;
private int price;
—–自己補全getter/setter,構造方法,toString方法——
}
測試類的main方法
public static void main(String[] args) {
TreeSet<Book> set = new TreeSet<Book>((b1, b2) ->{
int v = b1.getPrice()-b2.getPrice();//主要條件
return v==0?b1.getName().compareTo(b2.getName()):v;//次要條件
} );
Scanner sc = new Scanner(System.in);
int i=1;
while (true){
System.out.println(“請輸入第”+i +”本書的名稱:”);
String name = sc.next();
System.out.println(“請輸入第”+i +”本書的價格(整數):”);
int price = sc.nextInt();
Book b1 = new Book(name,price);
set.add(b1);
i++;
System.out.println(“添加”+name+” 書已經成功,繼續添加請輸入1,輸入其他數字將結束!”);
int ch = sc.nextInt();
if(ch!=1){
break;
}
}
System.out.println(“您一共添加了:”+set.size()+”本書,分別是:”);
for (Book book : set) {
System.out.println(book);
}
}

20請使用TreeMap集合保存勞模資訊,要求以勞模對象為鍵,家庭住址為值,並按照勞模的年齡從大到小排序後輸出

資訊如下:

18歲的張三,北京

20歲的李四,上海

35歲的王五,天津

21歲的趙六,北京

19歲的田七,上海

要求:

1:勞模類中有姓名和年齡兩個屬性;

2:添加上述資訊後,使用程式碼刪除張三的資訊

3:添加上述資訊後,使用程式碼修改李四的家庭住址為鄭州

4:使用至少兩種方式遍歷集合中的資訊並輸出;

參考程式碼:

使用迭代器,都能進行修改和刪除

修改不會改變值得個數,所以修改可以使用迭代器,也可以直接使用增強for進行修改

@Override
   public int compareTo(Student o) {
       int i = this.age - o.age;
       Collator instance = Collator.getInstance(Locale.CHINESE);//因為值可能為漢字所以使用Collator靜態方法,對漢字進行比較方法
       i=i==0?instance.compare(this.name,o.name):i;
       return i;
       //return -i;//因為要從大到小,而默認規則是負數存左邊,正數存右邊,排序規則根據返回值而定的,所以直接加減負可以直接改變大小原則
  }

 

 class Demo1 {
   public static void main(String[] args) {
       Student s1 = new Student("張三", 23);
       Student s2 = new Student("李四", 24);
       Student s3 = new Student("王五", 25);
       Student s4 = new Student("趙六", 26);
       TreeMap<Student, String> ts = new TreeMap<>();
       ts.put(s1, "北京");
       ts.put(s2, "上海");
       ts.put(s3, "廣東");
       ts.put(s4, "深圳");
       Set<Student> keySet = ts.keySet();
//迭代器刪除方式,刪除key的姓名為李四的鍵值對
       Iterator<Student> iterator1 = keySet.iterator();
       while (iterator1.hasNext()) {
           Student key = iterator1.next();
           if (key.getName().equals("李四")) {
               iterator1.remove();//此時注意是用的迭代器的刪除方法,而不是Map集合的刪除方法,使用Map集合刪除方法,此處會報錯
          }
      }
       //修改方式一:
       //迭代器修改方式,將張三的值修改為鄭州
       Iterator<Student> iterator = keySet.iterator();
       while (iterator.hasNext()) {
           Student key = iterator.next();
           if (key.getName().equals("張三")) {
               ts.put(key, "鄭州");
               System.out.println("修改成功");
               
          }
      }
       //bug程式碼:
       /*
       Iterator<Student> iterator = keySet.iterator();
       while (iterator.hasNext()) {
           if (iterator.next().getName().equals("張三")) {
               ts.put(iterator.next(), "鄭州");
           }//此邏輯不會編譯報錯,運行也不報錯,但是邏輯不通,,但是會修改到下一個key的值,迭代器的默認指向下一個原理
       }*/
       
        /*
        //修改方式二,增強for修改
        for (Student key : keySet) {
           if (key.getName().equals("張三")){
               ts.put(key,"鄭州");
               System.out.println("修改成功");
           }
       }
       */
       System.out.println(ts);
       System.out.println("遍歷:");
       for (Student key : keySet) {
           String value = ts.get(key);
           System.out.println(key.getAge() + "歲的" + key.getName() + "," + value);
      }

  }
}