JavaJava实验四 常用类和集合框架
Akari完成作业罢了。
一、目的与任务
理解并掌握String类、StringBuffer类;掌握字符串与其他数据类型的转换掌握Math类的使用;了解和掌握集合框架;掌握Java Application命令行参数的使用。
二、内容、要求与安排方式
(1)编写程序,当以年-月-日的格式输入一个日期时,输出该年是否为闰年,该月有几天,该日是星期几。
(2)设计一个Student类,该类中包括学生的姓名和成绩。创建Student类的5个对象,如下所示:
姓名 成绩
刘德华 90
张学友 80
刘杰 65
章子怡 100
周迅 60
将以上5个对象放入LinkedList中,完成如下操作和统计:
- 输出LinkedList中的对象个数。
- 删除姓名为“刘杰”的学生信息,并输出LinkedList中现有学生信息。
- 将姓名为“刘德华”的学生成绩改为95。
- 输出成绩不及格的学生姓名。
(3)现有以下三个email地址”zhangsan@sohu.com”、”lisi@163.com”、”wangwu@sina.com”。需要把email中的用户部分和邮件地址部分分离(即将@前后部分分离),分离后以键值对应的方式存入HashMap中,并遍历输出。
(4)现有一段文本如下:“I/have/a/dream/今天/天气/晴朗/万里/无云/I/have/a/good/idea/今天/天气/不错”。试用HashMap实现对文本中出现的单词词频进行统计,并对统计结果进行输出显示,如“I:2”,表示单词“I”在文本中出现了两次。
第(1)题
(1)编写程序,当以年-月-日的格式输入一个日期时,输出该年是否为闰年,该月有几天,该日是星期几。
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Calendar; import java.util.Scanner;
public class DateInfo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请以年-月-日的格式输入日期,例如:2023-10-31"); String inputDate = scanner.nextLine();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date date = dateFormat.parse(inputDate); Calendar calendar = Calendar.getInstance(); calendar.setTime(date);
int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH);
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
String[] dayOfWeekNames = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; String dayOfWeekName = dayOfWeekNames[dayOfWeek - 1];
System.out.println(year + "年是否为闰年: " + (isLeapYear ? "是" : "不是")); System.out.println(month + "月有 " + daysInMonth + " 天"); System.out.println(inputDate + " 是 " + dayOfWeekName); } catch (Exception e) { System.out.println("日期格式无效,请使用 yyyy-MM-dd 格式"); e.printStackTrace(); } } }
|
概括程序
它接受用户输入的日期,然后根据输入的日期执行以下操作:
1.判断输入的年份是否为闰年。 2.获取输入月份的天数。 3.确定输入的日期是星期几。 此外,程序还包括了异常处理,以便在用户提供无效日期格式时提供错误消息。以下是对程序的概括:
* 使用 Scanner 从用户输入中获取日期。 * 使用 SimpleDateFormat 解析用户输入的日期。 * 使用 Calendar 类获取日期的年份、月份、日期等信息。
根据计算,判断年份是否为闰年。 使用 getActualMaximum 方法获取月份的天数。 使用数组来存储星期的名称,然后根据计算的星期值找到相应的名称。 输出结果,包括年份是否为闰年、月份的天数和输入日期的星期。 这个程序是一个很好的示例,展示了如何使用Java处理日期和用户输入,以及如何实施异常处理来提高程序的健壮性。
|
java库是什么,怎么知道该用哪个库?
Java库(Java libraries)是Java编程语言提供的预定义类和方法的集合,用于执行各种任务和操作。这些库被设计为通用工具,以便开发者可以轻松地处理常见任务,而无需从头开始编写所有代码。Java库包括了各种用途的类和方法,例如日期处理、文件操作、网络通信、图形界面、数据结构、数据库连接等。
在Java编程中,您可以通过导入库中的类来使用库中的功能。以下是一些常见的Java库和用途:
java.util: 提供了用于数据结构(如集合、列表、队列、堆栈)、日期和时间处理的类。 java.io: 用于文件输入输出的类,允许您读取和写入文件。 java.net: 用于网络通信的类,包括Socket、URL等,可用于创建网络应用程序。 java.awt和javax.swing: 用于创建图形用户界面(GUI)的类和组件。 java.sql: 用于数据库连接和执行SQL查询的类。 java.lang: 包含Java的基本类,如String、Object、Math等,这些类无需显式导入,可以直接使用。 java.nio: 提供了新I/O系统,用于高性能的文件和网络I/O操作。 java.util.concurrent: 用于并发编程的类,如线程池、锁等。
根据您的任务和需求,选择合适的库来简化编程工作。通常,可以在Java文档中找到每个库和类的详细信息,以帮助了解它们的功能和用法。同时,IDE(如IntelliJ IDEA)通常会提供自动导入库的功能,以简化库的使用。
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
这一行创建了一个 SimpleDateFormat 对象,用于将输入的日期字符串解析为日期对象。”yyyy-MM-dd” 是日期格式的模式,它表示年-月-日的格式。
try { Date date = dateFormat.parse(inputDate);
|
在 try 块中,程序尝试将输入的日期字符串解析为 Date 对象。
Calendar calendar = Calendar.getInstance(); calendar.setTime(date);
|
这里创建了一个 Calendar 对象,用于执行日期操作。calendar.setTime(date) 设置日历对象的日期为解析后的日期对象。
int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH);
|
这些代码行从 Calendar 对象中提取年、月和日的信息。
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
|
这一行判断输入的年份是否为闰年。它根据闰年的规则进行判断,如果符合规则,则 isLeapYear 变量为 true,否则为 false。
int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
|
这一行获取了输入日期所在月份的天数。
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
|
这一行获取了输入日期是星期几,其中星期日是1,星期一是2,以此类推。
String[] dayOfWeekNames = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; String dayOfWeekName = dayOfWeekNames[dayOfWeek - 1];
|
这些代码用于将星期数字转换为星期的文本名称,例如将数字1转换为”星期日”。
最后,程序将结果输出到控制台,包括年份是否为闰年、月份的天数和输入日期的星期。
第(2)题
(2)设计一个Student类,该类中包括学生的姓名和成绩。创建Student类的5个对象,如下所示:
姓名 成绩
刘德华 90
张学友 80
刘杰 65
章子怡 100
周迅 60
将以上5个对象放入LinkedList中,完成如下操作和统计:
- 输出LinkedList中的对象个数。
- 删除姓名为“刘杰”的学生信息,并输出LinkedList中现有学生信息。
- 将姓名为“刘德华”的学生成绩改为95。
- 输出成绩不及格的学生姓名。
class Student { private final String name; private int score;
public Student(String name, int score) { this.name = name; this.score = score; }
public String getName() { return name; }
public int getScore() { return score; }
public void setScore(int score) { this.score = score; } }
|
import java.util.LinkedList; import java.util.List; import java.util.Iterator;
public class StudentManagement { public static void main(String[] args) { LinkedList<Student> studentList = new LinkedList<Student>(); studentList.add(new Student("刘德华", 90)); studentList.add(new Student("张学友", 80)); studentList.add(new Student("刘杰", 65)); studentList.add(new Student("章子怡", 100)); studentList.add(new Student("周迅", 60));
System.out.println("LinkedList中的对象个数: " + studentList.size());
Iterator<Student> iterator = studentList.iterator(); while (iterator.hasNext()) { Student student = iterator.next(); if (student.getName().equals("刘杰")) { iterator.remove(); } }
System.out.println("删除“刘杰”后的学生信息:"); for (Student student : studentList) { System.out.println("姓名: " + student.getName() + ", 成绩: " + student.getScore()); }
for (Student student : studentList) { if (student.getName().equals("刘德华")) { student.setScore(95); } }
System.out.println("成绩不及格的学生姓名:"); for (Student student : studentList) { if (student.getScore() < 60) { System.out.println("姓名: " + student.getName()); } } } }
|
第(3)题
(3)现有以下三个email地址”zhangsan@sohu.com”、”lisi@163.com”、”wangwu@sina.com”。需要把email中的用户部分和邮件地址部分分离(即将@前后部分分离),分离后以键值对应的方式存入HashMap中,并遍历输出。
import java.util.HashMap;
public class EmailParser { public static void main(String[] args) { HashMap<String, String> emailMap = new HashMap<String, String>();
emailMap.put("zhangsan@sohu.com", "用户部分: zhangsan, 邮件地址部分: sohu.com"); emailMap.put("lisi@163.com", "用户部分: lisi, 邮件地址部分: 163.com"); emailMap.put("wangwu@sina.com", "用户部分: wangwu, 邮件地址部分: sina.com");
for (String email : emailMap.keySet()) { String value = emailMap.get(email); System.out.println(email + " -> " + value); } } }
|
第(4)题
(4)现有一段文本如下:“I/have/a/dream/今天/天气/晴朗/万里/无云/I/have/a/good/idea/今天/天气/不错”。试用HashMap实现对文本中出现的单词词频进行统计,并对统计结果进行输出显示,如“I:2”,表示单词“I”在文本中出现了两次。
import java.util.HashMap;
public class WordFrequency { public static void main(String[] args) { String text = "I/have/a/dream/今天/天气/晴朗/万里/无云/I/have/a/good/idea/今天/天气/不错"; String[] words = text.split("/");
HashMap<String, Integer> wordFrequencyMap = new HashMap<String, Integer>();
for (String word : words) { if (wordFrequencyMap.containsKey(word)) { wordFrequencyMap.put(word, wordFrequencyMap.get(word) + 1); } else { wordFrequencyMap.put(word, 1); } }
for (String word : wordFrequencyMap.keySet()) { int frequency = wordFrequencyMap.get(word); System.out.println(word + ":" + frequency); } } }
|