案例列表
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);
}
要求:
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進行修改
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);
}
}
}