2024年java基础代码小案例

java基础代码小案例案例列表 01 减肥计划 switch 版本 02 减肥计划 if 版本 03 逢七跳过 04 不死神兔 05 百钱白鸡 06 数组元素求和 07 判断两个数组是否相同 08 查找元素在数组中的索引 09 数组元素反转 10 评委打分 11 统计字符串中大小写及数字个数 12 求三个整数最大值 13 判断数组中是否包含 2 14 筛选出其中的数字和字母并按照数字在前字母在后的规则排序 15 随机生成双色球 16 产生随机生成验证码

大家好,我是讯享网,很高兴认识大家。



案例列表

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版本;

/
案例需求:
输入星期数,显示今天的减肥活动 周一:跑步 周二:游泳 周三:慢走 周四:动感单车 周五:拳击
周六:爬山 周日:好好吃一顿。

分析步骤:
单值匹配案例,我们也可以使用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判断两个数组是否相同;

/
案例需求:(有点难度)
定义一个方法,用于比较两个数组的内容是否相同和不相同。

分析步骤:
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.如果录入的字符串中有大写字母。那么统计这个字符串中小写字母、大写字母、数字、其他字符出现的个数。程序结束
例如:
请输入一个字符串:
abc
您输入的字符串中没有大写字母。请重新输入:
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 = "abcdefghijklmnpqrstuvwxy0ABCDEFGHIJKLMNPQRSTUVWXYZ";
将要随机获取的数值存入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]+" ");
}
System.out.println();
}
System.out.println("金字塔打印;");
for (int i = 0; i < a; i++) {
for (int k=0;k<a-i;k++){
System.out.print(" ");
}
for (int j = 0; j <= i; j++) {
System.out.print(arr[i][j]+" "+" ");
}

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(" ");
}
for (int j = 0; j <=i; j++) {
System.out.print(arr[i][j]+" "+" ");
}
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==0java基础代码小案例?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);
}

}
}

小讯
上一篇 2024-12-28 13:37
下一篇 2025-01-01 13:00

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/2587.html