一、具体如何做
Java通过找代码或者使用AI来实现相关项目。
要求:1.能看懂。
二、jdk常用类库
1.有关String类的相关应用(这里跳过了一些常用方法的展示,这些可以在网络中查找)
2.练习:
练习1:
字符串处理练习
数据如下:
String data = "风无痕-1 班-75, 云逸尘-2 班-85, 龙傲天-1 班-68, 花弄影-2 班-70, 叶孤城-1 班-88, 西门吹雪-2 班-55, 东方瑾-1 班-92, 慕容雪-2 班-66, 上官云-1 班-77, 南宫月-2 班-80, 北堂风-1 班-58, 楚天河-2 班-73, 萧逸飞-1 班-82, 林诗音-2 班-60, 李逍遥-1 班-70, 赵灵儿-2 班-95, 景天-1 班-65, 唐雪见-2 班-87, 徐长卿-1 班-78, 紫萱-2 班-50, 飞蓬-1 班-83, 重楼-2 班-62, 龙葵-1 班-72, 雪见-2 班-90, 云天河-1 班-67, 韩菱纱-2 班-81, 柳梦璃-1 班-76, 慕容紫英-2 班-57, 姜云凡-1 班-86, 唐雨柔-2 班-68, 龙幽-1 班-79, 小蛮-2 班-52, 夏侯瑾轩-1 班-91, 瑕-2 班-74, 暮菖兰-1 班-84, 谢沧行-2 班-61, 皇甫卓-1 班-71, 凌波-2 班-89, 铁笔-1 班-59, 玉书-2 班-69, 青石-1 班-85, 血手-2 班-56, 毒影-1 班-73, 姜承-2 班-93, 厉岩-1 班-64, 结萝-2 班-88, 欧阳慧-1 班-51, 方兰生-2 班-77, 尹千觞-1 班-80, 风晴雪-2 班-63, 百里屠苏-1 班-94, 巽芳-2 班-58, 陵越-1 班-75, 芙蕖-2 班-82, 紫胤真人-1 班-66, 红玉-2 班-96, 尹志平-1 班-53, 郭芙-2 班-79, 杨过-1 班-87, 小龙女-2 班-67";
目标如下:
读取数据,进行程序处理,在控制台输出以下内容:
1. 分别输出1班、2班的总人数
2. 分别输出1班、2班的平均分
3. 输出最高分与最低分
4. 按照成绩单进行排序
5. 计算1班、2班的及格率
===========================================================
代码实现:
1. 分别输出1班、2班的总人数
String[] students = data.split(", ");
//通过长字符串用逗号分开,使其变成一个一个小字符串
//每个子字符串代表一个学生的信息。
//这些子字符串会被存储在 students 数组中,方便后续对每个学生的信息进行处理。
int class1Count = 0; //1班总人数
int class2Count = 0; //2班总人数
for (String student : students) {
String[] parts = student.split("-");
String className = parts[1].trim();
if (className.equals("1 班")) {
class1Count++;
} else if (className.equals("2 班")) {
class2Count++;
}
}
System.out.println("1班总人数: " + class1Count);
System.out.println("2班总人数: " + class2Count);
=================================================================
2. 分别输出1班、2班的平均分
double class1Average = 0.0; //1班平均分
double class2Average = 0.0; //2班平均分
int class1TotalScore = 0; //1班总分数
int class2TotalScore = 0; //2班总分数
for (String student : students) {
String[] parts = student.split("-");
String className = parts[1].trim();
int score = Integer.parseInt(parts[2].trim());
if (className.equals("1 班")) {
class1TotalScore += score;
} else if (className.equals("2 班")) {
class2TotalScore += score;
}
}
class1Average = (double) class1TotalScore / class1Count;
class2Average = (double) class2TotalScore / class2Count;
System.out.println("1班平均分: " + class1Average);
===========================================================
3. 输出最高分与最低分
int highestScore = Integer.MIN_VALUE; //最高分
int lowestScore = Integer.MAX_VALUE; //最低分
for (String student : students) {
String[] parts = student.split("-");
int score = Integer.parseInt(parts[2].trim());
if (score > highestScore) {
highestScore = score;
}
if (score < lowestScore) {
lowestScore = score;
}
}
System.out.println("最高分: " + highestScore);
System.out.println("最低分: " + lowestScore);
===========================================================
4. 按照成绩单进行排序
Arrays.sort(students, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
String[] parts1 = s1.split("-");
String[] parts2 = s2.split("-");
int score1 = Integer.parseInt(parts1[2].trim());
int score2 = Integer.parseInt(parts2[2].trim());
return score2 - score1;
}
});
System.out.println("按照成绩单进行排序:");
for (String student : students) {
System.out.println(student);
}
===========================================================
5. 计算1班、2班的及格率
int class1PassCount = 0; //1班及格人数
int class2PassCount = 0; //2班及格人数
for (String student : students) {
String[] parts = student.split("-");
String className = parts[1].trim();
int score = Integer.parseInt(parts[2].trim());
if (className.equals("1 班") && score >= 60) {
class1PassCount++;
} else if (className.equals("2 班") && score >= 60) {
class2PassCount++;
}
}
double class1PassRate = (double) class1PassCount / class1Count;
double class2PassRate = (double) class2PassCount / class2Count;
System.out.println("1班及格率: " + class1PassRate);
System.out.println("2班及格率: " + class2PassRate);
===========================================================
字符串处理练习2:
以下是购物清单包括了 商品与数量
String str = "苹果:5,香蕉:8,橙子:3,草莓:12,西瓜:7,葡萄:9,芒果:6,菠萝:4,梨:10,桃子:11,胡萝卜:15,白菜:8,西红柿:10,土豆:13,茄子:6,青椒:9,玩具车:20,玩具熊:18,积木:12,拼图:16,玩偶:14,风筝:11,气球:9"
1. 找到最贵的商品
2. 计算总共买了多少样物品
3. 判断是否买了荔枝,如果买了输出购买数量
4. 判断是否买了积木,如果买了输出购买数量
===========================================================
代码实现:
1. 找到最贵的商品
String[] items = str.split(",");
String mostExpensiveItem = "";
int maxPrice = 0;
for (String item : items) {
String[] parts = item.split(":");
String itemName = parts[0];
int price = Integer.parseInt(parts[1]);
if (price > maxPrice) {
maxPrice = price;
mostExpensiveItem = itemName;
}
}
System.out.println("最贵的物品是: " + mostExpensiveItem + " 价格是: " + maxPrice);
===========================================================
2. 计算总共买了多少样物品
int totalItems = str.split(",").length;
System.out.println("商品总数: " + totalItems);
===========================================================
3. 判断是否买了荔枝,如果买了输出购买数量
if(str.contains("荔枝")) {
int count = str.split("荔枝").length - 1;
System.out.println("You bought " + count + " lilies");
}else {
System.out.println("你没有买荔枝");
}
===========================================================
有关问题及一些代码含义:
1.为什么要分割两次?
在代码中,String[] parts = student.split("-"); 这句代码的作用是将每个学生的信息字符串 student 按照短横线 "-" 进行分割,以便进一步提取和处理每个学生的具体信息。
具体来说,每个学生的信息字符串 student 的格式是:
学生姓名-班级-分数
例如:
风无痕-1 班-75
通过 split("-") 方法,可以将这个字符串分割成多个部分,存储在 parts 数组中。分割后的 parts 数组的内容将是:
["风无痕", "1 班", "75"]
这样,我们可以方便地提取出学生的姓名、班级和分数,并进行相应的处理。例如,通过 parts[1] 可以获取学生的班级信息,然后根据班级信息统计1班和2班的总人数。
2.
这句代码是将parts数组中提取第二个元素,并去除该元素前后空格,将结果存储到className中。
3.
这句代码的意思是将 parts
数组中的第三个元素(即索引为2的元素)转换为整数,并去除该元素前后的空格,然后将结果存储在 score
变量中。
Integer.parseInt()
方法用于将字符串转换为整数。在这个例子中,parts[2]
的值是 "75"
,通过调用 Integer.parseInt()
方法,可以将其转换为整数 75
。
4.
具体来说,Arrays.sort() 方法是 Java 提供的用于对数组进行排序的方法。它有两个参数:
- 要排序的数组,这里是 students 数组。
- 一个比较器对象,用于定义排序的规则。
在这个例子中,比较器是一个匿名内部类,实现了 Comparator<String> 接口。这个比较器重写了 compare() 方法,该方法接受两个字符串参数 s1 和 s2,分别代表 students 数组中的两个元素。
compare()
方法返回 score2 - score1
,这个表达式的结果决定了 s1
和 s2
的排序顺序。如果 score2
大于 score1
,则 score2 - score1
为正数,表示 s2
应该排在 s1
之前;如果 score2
小于 score1
,则 score2 - score1
为负数,表示 s2
应该排在 s1
之后;如果 score2
等于 score1
,则 score2 - score1
为零,表示 s2
和 s1
的顺序无关紧要
其实,这么看来String类中比较重要的就是分割split()方法,和trim()方法,别的方法甚至都没有用到。