面向对象——Java实验报告

实验四: Java API

实验四 Java API

<center> 
<strong>姓名:</strong> 
<u>XXX</u> 
&emsp;&emsp;
<strong>班级:</strong> 
<u>XXXXX</u> 
&emsp;&emsp;
<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等)来解决实际问题。

三、实验内容:

  1. 定义一个方法,根据用户身份证号码计算其年龄并输出。

  2. 采用Random类或者Math类随机生成一组随机数,存入List集合类(ArrayList、LinkedList等都可以),并利用Iterator接口便利集合。

  3. 获取当前的系统日期和时间来产生订单的单号,单号的构成:D+年份+月份+日期+时钟+分钟+秒+系统用户账号,要用到日期类Date(通过使用API文档来掌握该类的用法)。

  4. 编写一个程序,实现字符串大小写的转换并倒序输出。具体要求:

    ​ (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集合类(ArrayListLinkedList等都可以),并利用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等)来解决实际问题。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐