Java类和对象的设计(下)

一、 上机目的和要求:

  1. 掌握String类和StringBuffer类的使用;
  2. 掌握Math和Random类的使用;
  3. 掌握包装类的使用;
  4. 掌握日期和时间的处理方法;
  5. 掌握集合List、Set和Map的使用;
  6. 掌握迭代器Iterator的使用,掌握for-each循环语句的使用;
  7. 了解泛型的作用以及基本使用方法。

1.编写程序:剔除一个字符串中的全部非数字字符,例如:将形如“A1BC2you3”中的非数字字符全部剔除,得到字符串“123”,并将“123”转换为123(int型),如果输入的字符串中不含数字,则输出“无数字”。


import java.util.Scanner;

public class StringToInt {
  public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    String str = reader.nextLine();
    String newStr = "\\D+";//\d 是一个正字表达式,标识所有数字及0-9
    str = str.replaceAll(newStr, "");
    if (str.length() > 0) {
      int n = Integer.parseInt(str);//parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析。
      System.out.println(n);
    } else {
      System.out.println("无数字");
    }
  }
}

运行结果:
在这里插入图片描述

  1. 编写程序:输入一个18位的身份证号码,然后根据其中的出生日期信息判断是否已过生日?并输出以下三个信息中的一个。
    This year’s birthday has passed.
    This year’s birthday has not passed.
    Today is birthday.

public class Birthday {
  public static void main(String[] args) {
    // 身份证
    String[] sNum = {"000026200504016365", "00002619991231636X", "00002619991230636X"};
    // 取生日
    int[] birthTime = new int[3];
    birthTime[0] = Integer.parseInt(sNum[0].substring(10, 14));
    birthTime[1] = Integer.parseInt(sNum[1].substring(10, 14));
    birthTime[2] = Integer.parseInt(sNum[2].substring(10, 14));
    // 当前时间
    SimpleDateFormat sdf = new SimpleDateFormat("MMdd");//设置格式
    Date date = new Date();//表示当前时间,无法单独输出
    int now = Integer.parseInt(sdf.format(date));//方法
    System.out.println(now);
    // 输出
    for (int i = 0; i < 3; i++) {
      System.out.println(sNum[i]);
      if (now > birthTime[i]) {
        System.out.println("This year's birthday has passed.");
      } else if (now < birthTime[i]) {
        System.out.println("This year's birthday has not passed.");
      } else if (now == birthTime[i]) {
        System.out.println("Today is birthday.");
      }
    }
  }
}

运行结果:
在这里插入图片描述

  1. 运用面向对象的程序设计思想,把表1中的学生信息存储在List集合(ArrayList或者LinkedList)中。编写程序实现下列功能:
    表1 学生信息
    | 学号 |姓名 | 出生日期 |
    |–|--|–|
    |201644001 | 张三 |1997年2月3日
    |201644002| 李四 |1998年11月11日
    |201644003 | 王五 |1996年3月2日
    |201644004 | 赵六|1996年12月12日
    |201644005 | 周正 |1997年10月10日

(1)创建Student学生类,类中包括三个成员变量,分别为学号、姓名、出生日期,添加不带参数的构造方法,添加含以上三个参数的构造方法,添加各成员变量的 Getter和Setter方法,改写toString()方法(返回字符串格式:学号 姓名 出生日期)
(2)将表1中的学生依次添加到List中;
对于list接口 不太了解的童鞋可以查看:
https://www.cnblogs.com/zcscnn/p/7743507.html
(3)输出所有的学生信息(使用迭代器Iterator);
(4)有学生(学号:201644006,姓名:李明,出生日期:1998年1月12日)中途入学,将其添加到List集合中;
(5)有学生“王五”中途退学,将其从List集合中删除;
(6)再一次遍历输出所有的学生信息(使用foreach语句)。
(7)输出年龄最小的学生的学号、姓名和出生日期(考虑最小年龄的学生不止一个的情况)

class Student {
	  private Integer sno;
	  private String sname;
	  private String sbirth;

	  public Integer getSno() {
	    return sno;
	  }

	  public void setSno(Integer sno) {
	    this.sno = sno;
	  }

	  public String getSname() {
	    return sname;
	  }

	  public void setSname(String sname) {
	    this.sname = sname;
	  }

	  public String getSbirth() {
	    return sbirth;
	  }

	  public void setSbirth(String sbirth) {
	    this.sbirth = sbirth;
	  }
	  Student() {};
	  
	  public Student(int sno,String sname,String sbirth ){
		  this.sno=sno;
		  this.sname=sname;
		  this.sbirth=sbirth;
	  };
	  
	  @Override
	  public String toString() {
	    return "sno:" + getSno() + " sname:" + getSname() + " sbirth:" + getSbirth();
	  }
	}

	public class StudentMain {

	  public static void main(String[] args) {
	    // 创建学生对象并初始化
	    Student s1 = new Student();
	    s1.setSno(201644001);
	    s1.setSname("张三");
	    s1.setSbirth("1997年02月03日");
	    Student s2 = new Student();
	    s2.setSno(201644002);
	    s2.setSname("李四");
	    s2.setSbirth("1998年11月11日");
	    Student s3 = new Student();
	    s3.setSno(201644003);
	    s3.setSname("王五");
	    s3.setSbirth("1996年03月02日");
	    Student s4 = new Student();
	    s4.setSno(201644004);
	    s4.setSname("赵六");
	    s4.setSbirth("1996年12月12日");
	    Student s5 = new Student();
	    s5.setSno(201644005);
	    s5.setSname("周正");
	    s5.setSbirth("1997年10月10日");

	    // 创建ArrayList 并添加学生信息
	    List<Student> Astu = new ArrayList<Student>();//这句创建了一个ArrayList实现类的对象后把它上溯到了List接口。
	    //此时它就是一个List对象了,它有些ArrayList类具有的,但是List接口没有的属性和方法,它就不能再用了
	    Astu.add(s1);
	    Astu.add(s2);
	    Astu.add(s3);
	    Astu.add(s4);
	    Astu.add(s5);

	    // 迭代器输出
	    ListIterator<Student> listIter = Astu.listIterator();
	    if (listIter.hasNext()) { // 如果有后继元素
	      System.out.println("我的迭代器输出:"+Astu);
	    }

	    // 添加新同学
	    Student newStu = new Student();
	    newStu.setSno(201644006);
	    newStu.setSname("李明");
	    newStu.setSbirth("1998年1月12日");
	    Astu.add(newStu);

	    // 删除王五
	    Astu.remove(s3);

	    // foreach语句输出,明显麻烦很多,而且慢很多。
	    for (Student stu : Astu) {
	      System.out.println(stu.getSno() + " " + stu.getSname() + " " + stu.getSbirth());
	    }

	    // 输出年龄最小的童鞋
	    int n = 0;
	    List<Student> minStu = new ArrayList<Student>(); // 创建ArrayList 存放最小的学生
	    for (Student stu : Astu) {
	      String birth = stu.getSbirth();
	      birth = birth.replaceAll( "\\D+", "");
	      int t = Integer.parseInt(birth);
	      // System.out.println(t);
	      if (t > n) {
	        n = t;
	        for (int i = 0; i < minStu.size(); i++) {
	          minStu.remove(i);
	        }
	        minStu.add(stu);
	      } else if (t == n) {
	        minStu.add(stu);
	      }
	    }
	    System.out.println("最小的学生:");
	    for (Student stu : minStu) {
	      System.out.println(stu.getSno() + " " + stu.getSname() + " " + stu.getSbirth());
	    }
	  }
	}

运行结果:
在这里插入图片描述

4、 编程模拟用户注册功能,要求:利用Set集合存放用户信息(含用户名、昵称、密码),实现用户注册功能,如果用户名已经存在,则无法注册。用户注册成功或者失败,请输出相应的提示信息。注意:用户名不区分大小写。
假定已经存在以下用户信息:
在这里插入图片描述

class userInfo {
  private String userName;
  private String passWord;

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getPassWord() {
    return passWord;
  }

  public void setPassWord(String passWord) {
    this.passWord = passWord;
  }

  @Override
  public String toString() {
    return "userName: " + getUserName() + " passWord: " + getPassWord();
  }
}

public class Set {

  public static void main(String[] args) {
    // 添加初始信息
    userInfo user1 = new userInfo();
    user1.setUserName("Tim");
    user1.setPassWord("112233");
    userInfo user2 = new userInfo();
    user2.setUserName("Barton");
    user2.setPassWord("123456");
    userInfo user3 = new userInfo();
    user3.setUserName("Mary");
    user3.setPassWord("654321");

    // 创建hash对象
    HashSet<userInfo> user = new HashSet<userInfo>();
    user.add(user1);
    user.add(user2);
    user.add(user3);

    // 输出
    Iterator<userInfo> hashIter = user.iterator();
    while (hashIter.hasNext()) System.out.println(hashIter.next());

    // 新用户
    userInfo newUser = new userInfo();
    newUser.setUserName("tim");
    newUser.setPassWord("112273");
    System.out.println("新的信息:" + newUser.toString());
    // 测试
    if (!user.add(newUser)) System.out.println("已经注册");
    else System.out.println("注册成功");

    // 二次迭代
    hashIter = user.iterator();
    while (hashIter.hasNext()) System.out.println(hashIter.next());
  }
}

运行结果:
在这里插入图片描述

5、 请利用Map按表2提供的信息创建一个“专业-学院”对应关系表,编程实现:当用户输入专业名称时,输出所属学院名称。要求:允许用户输入专业时可以有前导或后导空格。
在这里插入图片描述

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Map2 {

	  public static void main(String[] args) {
	      Map<String, String> hm = new HashMap<String, String>();
	      
	     hm.put("计算机科学与技术","智能技术与工程");
	      hm.put("物联网工程","智能技术与工程");
	      hm.put("软件工程","智能技术与工程");
	     /* hm.put("智能科学与技术","智能技术与工程");
	      hm.put("物流管理","工商管理");
	      hm.put("市场营销", "工商管理");
	      hm.put("酒店管理", "工商管理");
	      hm.put("人力资源管理", "工商管理");
	      hm.put("英语", "外国语");
	      hm.put("西班牙语", "外国语");*/

	      Scanner reader = new Scanner(System.in);
	      String key = reader.nextLine();
	      String key2 = reader.nextLine();
	      String nkey = key.trim(); //去掉字符串两端的多余的空格
	      String nkey2 = key2.trim(); 
	      hm.put(nkey,nkey2);
	      //map输出方法;
	      System.out.println(hm);
	      hm.clear();
	      
	  }
	}

运行结果:
在这里插入图片描述

发布了20 篇原创文章 · 获赞 1 · 访问量 423

猜你喜欢

转载自blog.csdn.net/XMY_UPUPUP/article/details/103768748