面向对象——Java实验报告
实验四:
Java API
实验四 Java API
<center>
<strong>姓名:</strong>
<u>XXX</u>
  
<strong>班级:</strong>
<u>XXXXX</u>
  
<strong>学号:</strong>
<u>XXXXXXXXXXXX</u></center>
一、实验目的
在集成开发环境下,通过阅读Java API
文档来使用合适的常用类及方法解决实际问题。
二、 实验目标:
(1)能够通过阅读Java API
文档来灵活运用Java API
中的一些常用类(例如String、StringBuffer、System、Runtime、Math、Random
等)来解决实际问题。
(2)能够灵活运用用Java
语言的常用集合类(ArrayList、Map、Collections、Array
等)来解决实际问题。
三、实验内容:
-
定义一个方法,根据用户身份证号码计算其年龄并输出。
-
采用
Random
类或者Math
类随机生成一组随机数,存入List
集合类(ArrayList、LinkedList
等都可以),并利用Iterator
接口便利集合。 -
获取当前的系统日期和时间来产生订单的单号,单号的构成:
D+年份+月份+日期+时钟+分钟+秒+系统用户账号
,要用到日期类Date
(通过使用API文档来掌握该类的用法)。 -
编写一个程序,实现字符串大小写的转换并倒序输出。具体要求:
(1)使用for循环将字符串
“ITcastHeiMa”
从最后一个字符开始遍历。 (2)遍历的当前字符如果是大写字符,就使用
toLowerCase()
方法将其转换为小写字符,反之则使用在toUpperCase()
方法将其转换为大写字符。 (3)定义一个
StringBuffer
对象,调用append()
方法依次添加遍历的字符,最后调用StringBuffer
对象的toString( )
方法,并将得到的结果输出。
四、实验过程分析
4.1 实验步骤
- 定义一个方法,根据用户身份证号码计算其年龄并输出。
实验代码:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
class parse{
public parse(String identifys){
date[0]= Integer.parseInt(identifys.substring(6,10));
date[1]=Integer.parseInt(identifys.substring(10,12));
date[2]=Integer.parseInt(identifys.substring(12,14));
get_now_date();}
private void get_now_date(){
Date date=new Date();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd");
String Date=dateFormat.format(date);
System.out.println("当前日期为:"+Date);
now[0]= Integer.parseInt(Date.substring(0,4));
now[1]=Integer.parseInt(Date.substring(5,7));
now[2]=Integer.parseInt(Date.substring(8,10));}
private boolean check(){ return now[0]>=date[0]&& date[0]>1900 &&(date[1]>0&&date[1]<13);}
public int Figure(){
if (check()){
int age= now[0]-date[0]-1;
if(now[1]<date[1]){age--; }
else if(now[1]==date[1]){
if(now[2]<date[2]){
age--;}
else if(now[2]>date[2]){age++;}}
if(now[1]>date[1]){age++;}
return age;}
return -1;}
private int date[]=new int[3];
private int now[]=new int[3];}
public class identify {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
String identifys=cin.nextLine();
if (identifys.length()!=18){
System.out.println("身份证号输入错误!");
return;}
parse Person=new parse(identifys);
if (Person.Figure()>0){
System.out.println("年龄为:"+Person.Figure());
return;}
else {
System.out.println("身份证号输入错误!");
return;}}}
输出结果:
610424200110101304
当前日期为:2021-12-03
年龄为:20
- 采用
Random
类或者Math
类随机生成一组随机数,存入List集合类(ArrayList
、LinkedList
等都可以),并利用Iterator
接口便利集合。
实验代码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
public class Randtest {
public static void main(String[] args) {
Iterator<Integer> integers = generateRandomNumber().iterator();
while (integers.hasNext())
System.out.println(integers.next());}
public static ArrayList<Integer> generateRandomNumber () {
Random random = new Random();
ArrayList<Integer> arrayList = new ArrayList<>();
for (int i = 0; i < 10; i++)
arrayList.add(random.nextInt(1000));
return arrayList;}}
输出结果:
237
941
720
976
631
308
148
97
727
289
- 获取当前的系统日期和时间来产生订单的单号,单号的构成:
D+年份+月份+日期+时钟+分钟+秒+系统用户账号
,要用到日期类Date
(通过使用API
文档来掌握该类的用法)。
实验代码:
import java.time.LocalDate;
import java.time.LocalDateTime;
public class OrderofGoods {
public static void main(String[] args) {
Order order = new Order();
System.out.println(order.getOrder());}}
class Order {
private int year;
private int month;
private String time;
private final String account = "ADMIN";
private String order;
public Order () {
this.year = LocalDate.now().getYear();
this.month = LocalDate.now().getMonth().getValue();
this.time = LocalDateTime.now().toString().substring(11, 19);
this.order = this.year + "" + this.month + time + account;}
public String getOrder () {return this.order;}}
输出结果:
20211216:07:11ADMIN
- 编写一个程序,实现字符串大小写的转换并倒序输出。具体要求:
(1)使用for循环将字符串“ITcastHeiMa”
从最后一个字符开始遍历。
(2)遍历的当前字符如果是大写字符,就使用toLowerCase()
方法将其转换为小写字符,反之则使用在toUpperCase()
方法将其转换为大写字符。
(3)定义一个StringBuffer
对象,调用append()
方法依次添加遍历的字符,最后调用StringBuffer
对象的toString( )
方法,并将得到的结果输出。
实验代码:
import java.util.Locale;
public class reverse {
public static void main(String[] args) {
String origin = "ITcastHeiMa";
StringBuffer stringBuffer = new StringBuffer("");
for (int i = origin.length() - 1, j = 0; i >= 0; i--, j++) {
char c = origin.charAt(i);
if (c <= 'z' && c >= 'a') {
stringBuffer.append((c + "").toUpperCase(Locale.ROOT));
}
if (c <= 'Z' && c >= 'A') {
stringBuffer.append((c + "").toLowerCase(Locale.ROOT));
}
}
System.out.println(stringBuffer.toString());
}
}
输出结果:
AmIEhTSACti
4.2 错误分析
问题复现
在输入身份证号之后返回的年龄为-1,
问题分析
问题产生源于未通过check
函数的检查,最终发现now
时间未被初始化get_now_date
初始化函数未被调用。
解决方案
在初始化date
的同时调用get_now_date
初始化函数初始化now
.问题解决!
五、个人总结
在本次实验中通过阅读Java API
文档学习Java API
中的一些常用类(例如String、StringBuffer、System、Runtime、Math、Random
等)来解决实际问题。并尝试使用Java
语言的常用集合类(ArrayList、Map、Collections、Array
等)来解决实际问题。