1、已知郑州市内燃油车限行政策如下:
每周一 限行 尾号为 1,6的车牌号
每周二 限行 尾号为 2,7的车牌号
每周三 限行 尾号为 3,8的车牌号
每周四 限行 尾号为 4,9的车牌号
每周五 限行 尾号为 5,0的车牌号
如果车牌号尾号不为数字,那么往前推一位,直到是数字为止,进行限行
例如: 豫A558A9 尾号为9
豫A5589B 尾号也为9
编写一个程序,用户随意输入一个车牌,判断该车牌今日是否限行。
package com.qfedu.homework;
import java.util.Calendar;
import java.util.Scanner;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/11 9:58
* @Version 1.0
*/
public class Demo01 {
/**
* 已知郑州市内燃油车限行政策如下:
* 每周一 限行 尾号为 1,6的车牌号
* 每周二 限行 尾号为 2,7的车牌号
* 每周三 限行 尾号为 3,8的车牌号
* 每周四 限行 尾号为 4,9的车牌号
* 每周五 限行 尾号为 5,0的车牌号
* 如果车牌号尾号不为数字,那么往前推一位,直到是数字为止,进行限行
* 例如: 豫A558A9 尾号为9
* 豫A5589B 尾号也为9
* 编写一个程序,用户随意输入一个车牌,判断该车牌今日是否限行。
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个车牌号:");
String carNum = scanner.next();
System.out.println(validateCarNum(carNum) ? "该车牌限行":"今天不限行,随便开");
}
/**
* 给定一个车牌号,返回
* true : 限行
* false : 不限行
*/
private static boolean validateCarNum(String carNum) {
/**
* 变为字符数组
* 使用lastIndexOf
*/
char[] arr = carNum.toCharArray();
int endNum = -1 ;
for (int i = arr.length -1 ; i >= 0 ; i--) {
/**
* '0' --> 48
* '9' --> 57
*/
if(arr[i] >= 48 && arr[i] <= 57){
// 得到了一个 '9' --> 9
/*
字符转换为 数字 也可以通过 将字符变为字符串,字符串再变为 int
*/
endNum = arr[i] - 48;
break;
}
}
System.out.println("尾号为:"+endNum);
int weekDay = todayIsWeekDay();
/**
* endNum 1 6 限行 1
* endNum 2 7 限行 2
*/
/*if(endNum % 5 == weekDay ){
return true;
}*/
if(endNum == weekDay || (endNum + 5) % 10 == weekDay){
return true;
}
return false;
}
/**
* 获取当天的星期数
*/
private static int todayIsWeekDay() {
Calendar instance = Calendar.getInstance();
return instance.get(Calendar.DAY_OF_WEEK) - 1;
}
}
2、
【难】从控制台输入一个字符串,记录出现次数最多的字符,并输出这个字符出现了多少次。
例如:
从控制台输入 hello,输出: 出现次数最多的字符是 ‘l’,出现了2次。
从控制台输入 helle,输出: 出现次数最多是字符出 ‘l’和’e’,出现了2次。
package com.qfedu.homework;
import java.util.Arrays;
import java.util.Scanner;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/11 10:50
* @Version 1.0
*/
public class Demo02 {
/**
* 从控制台输入一个字符串,记录出现次数最多的字符,并输出这个字符出现了多少次。
* 例如:
* 从控制台输入 hello,输出: 出现次数最多的字符是 'l',出现了2次。
* 从控制台输入 helle,输出: 出现次数最多是字符出 'l'和'e',出现了2次。
*
* 想法一:
* 数组 [0,0,0,0,0]
* 数组 [h,e,l,l,o]
* [1,1,2,1,1]
* 求数组中的最大值,然后找最大值对应的字符是哪个
* 第二种思路:
* 定义一个类
* class ZiMu{
* String str ; --> h
* int num ; --> 出现的次数
* }
* ZiMu[] arr =new ZiMu[];
* 封装一个个的对象 出现一个字母,次数就加1
* 后来进行排序: 需要自定义排序规则
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String inPut = scanner.next();
char[] arr = inPut.toCharArray();
// 这个sb 是用来拼接最终的打印输出的
StringBuilder sb =new StringBuilder("您输入的字符串中出现次数最多的字符是:") ;
// 我需要定义一个数组,这个数组中存放对应的字符出现的次数
int[] nums = new int[inPut.length()]; // [1,1,2,2,1]
// helle
for (int i = 0; i < arr.length; i++) {
int count = 0;
for (int j = i; j < arr.length; j++) {
if(arr[i] == arr[j]){
count++;
}
}
nums[i] = count;
}
System.out.println(Arrays.toString(nums));
// 此处求出数组中的最大值
int max = getMax(nums);
System.out.println("max="+max);
// 找出来最大值对应的下标所对应的字符
for (int i = 0; i < nums.length; i++) {
if(max == nums[i]){
sb.append(arr[i]);
sb.append(",它出现了").append(max+"次;");
}
}
System.out.println(sb.toString());
}
/**
* 得到数组中的最大值
* @param arr
* @return
*/
public static int getMax(int[] arr){
if(arr.length > 0){
int max = arr[0];
for (int a:arr) {
if(max < a){
max = a;
}
}
return max;
}else{
return -1;
}
}
}
3、编写一个方法,传入一个字符串,将该字符串反转输出。(不可以直接使用反转方法)
package com.qfedu.homework;
import java.util.Scanner;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/11 11:31
* @Version 1.0
*/
public class Demo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String inPut = scanner.next();
System.out.println(reverse(inPut));
}
private static String reverse(String str) {
char[] arr = str.toCharArray();
/*
[h,e,l,l,o]
*/
for (int i = 0; i < arr.length / 2; i++) {
char temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
return new String(arr);
}
}
4、给定一个长度,生成一个指定长度的字符串,这个字符串由随机的字母、数字或下划线组成。(不用必须同时包含字母、数字、下划线)
package com.qfedu.homework;
import java.util.Random;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/11 11:39
* @Version 1.0
*/
public class Demo04 {
/**
* 4、给定一个长度,生成一个指定长度的字符串,这个字符串由随机的字母、数字或下划线组成。(不用必须同时包含字母、数字、下划线)
* @param args
*/
public static void main(String[] args) {
String validateCode = getValidateCode(5);
System.out.println(validateCode);
}
private static String getValidateCode(int length) {
// 数字 字母 下划线
String source = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_";
char[] arr = source.toCharArray();
String validateCode = "";
Random random = new Random();
for (int i = 0; i < length; i++) {
int index = random.nextInt(source.length());
char c = arr[index];
validateCode += c;
}
return validateCode;
}
}
5、如下字符串:
01#张三#20*02#李四#18*03#王五#22*04#赵六#20*05#田七#21 <br />创建Student类,属性:学号 姓名 年龄<br /> 1.将这些Student对象放进数组中<br /> 2.查询里面有没有叫田七的学生如果存在则打印学生的具体信息(封装成方法,键盘输入姓名)<br /> 3.计算所有学生的平均年龄,最大年龄,最小年龄<br /> 4.如果存在名字叫张三的将名字改为张兵
package com.qfedu.homework;
import java.util.Arrays;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/11 11:47
* @Version 1.0
*/
class Student{
private int id;
private String name;
private int age;
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Demo05 {
/**
* 5、如下字符串:
*
* 01#张三#20*02#李四#18*03#王五#22*04#赵六#20*05#田七#21
* 创建Student类,属性:学号 姓名 年龄
* 1.将这些Student对象放进数组中
* 2.查询里面有没有叫田七的学生如果存在则打印学生的具体信息(封装成方法,键盘输入姓名)
* 3.计算所有学生的平均年龄,最大年龄,最小年龄
* 4.如果存在名字叫张三的将名字改为张兵
* @param args
*/
public static void main(String[] args) {
Student[] students = getData();
Student stu = searchStuByName(students,"田七");
System.out.println(stu);
showMaxAndMinAndAvgAge(students);
editStuByName(students,"张三","张兵");
}
private static void editStuByName(Student[] students, String oldName, String newName) {
Student student = searchStuByName(students, oldName);
student.setName(newName);
System.out.println(Arrays.toString(students));
}
private static void showMaxAndMinAndAvgAge(Student[] students) {
int maxAge = students[0].getAge();
int minAge = students[0].getAge();
int countAge = 0;
for (Student stu:students) {
int stuAge = stu.getAge();
if( stuAge> maxAge){
maxAge = stuAge;
}
if(stuAge < minAge){
minAge = stuAge;
}
countAge += stuAge;
}
System.out.println("最大年龄是:"+maxAge+",最小年龄:"+minAge + ".平均年龄:"+(countAge*1.0/students.length));
}
private static Student searchStuByName(Student[] students, String name) {
for (Student stu :students) {
if(stu.getName().equals(name)){
return stu;
}
}
return null;
}
public static Student[] getData(){
String source = "01#张三#20*02#李四#18*03#王五#22*04#赵六#20*05#田七#21";
String[] arr = source.split("\\*");
Student[] stuArr = new Student[arr.length];
for (int i=0;i<arr.length;i++) {
//01#张三#20
String stuStr = arr[i];
String[] s = stuStr.split("#");
Student student = new Student(Integer.valueOf(s[0]), s[1], Integer.valueOf(s[2]));
stuArr[i] = student;
}
System.out.println(Arrays.toString(stuArr));
return stuArr;
}
}
6、联系人
public interface Operation {/ /添加联系人public abstract LinkMan[] addLinkMan(LinkMan linkMan, LinkMan[] linkMans);//按姓名删除联系人public abstract LinkMan[] deleteLinkManByName (String name, LinkMan[] linkMans);/ /按联系号码删除联系人public abstract LinkMan[] deleteLinkManByNumber (String number, LinkMan[] linkMans);/ /按姓名修改联系人号码public abstract LinkMan[] setLinkMan( String name, String number , LinkMan[] linkMans);/ /按姓名查询联系人public abstract LinkMan searchL inkMan(String name, LinkMan[] linkMans);/ /查询所有的联系人public abstract void searchA1l(LinkMan[] linkMans);}设计一个类,实现Operation接口,完成功能向电话本中添加,删除,修改,查询联系人信息,所有的联系人信息存储在数组中设计LinkMan类,姓名,年龄,性别,号码属性,get/set, 构造方法,重写toString所有逻辑功能,要求设计一个工具类
package com.qfedu.homework.linkman;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/9 17:24
* @Version 1.0
*
* ctrl + alt + L 格式化代码
* Code 工具栏中的
*/
public interface Operation {
//添加联系人
public abstract LinkMan[] addLinkMan(LinkMan linkMan, LinkMan[] linkMans);
//按姓名删除联系人
public abstract LinkMan[] deleteLinkManByName(String name, LinkMan[] linkMans);
//按联系号码删除联系人
public abstract LinkMan[] deleteLinkManByNumber(String number, LinkMan[] linkMans);
//按姓名修改联系人号码
public abstract LinkMan[] setLinkMan(String name, String number, LinkMan[] linkMans);
//按姓名查询联系人
public abstract LinkMan searchLinkMan(String name, LinkMan[] linkMans);
//查询所有的联系人
public abstract void searchA1l(LinkMan[] linkMans);
}
package com.qfedu.homework.linkman;
import java.util.Arrays;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/9 17:26
* @Version 1.0
*/
public class TelephoneTools implements Operation{
@Override
public LinkMan[] addLinkMan(LinkMan linkMan, LinkMan[] linkMans) {
/**
* 思路:
*/
LinkMan[] newLinkMans = Arrays.copyOf(linkMans,linkMans.length+1);
newLinkMans[newLinkMans.length-1] = linkMan;
return newLinkMans;
}
@Override
public LinkMan[] deleteLinkManByName(String name, LinkMan[] linkMans) {
return new LinkMan[0];
}
/**
* [zhangsan,lisi,wangwu,zhaoliu,tianqi] 删除李四
* [zhangsan,wangwu]
* @param number
* @param linkMans
* @return
*/
@Override
public LinkMan[] deleteLinkManByNumber(String number, LinkMan[] linkMans) {
//LinkMan[] newLinkMans = new LinkMan[linkMans]
for (int i = 0; i < linkMans.length; i++) {
if(number.equals(linkMans[i].getPhone())){
// 可以获取到 该手机号码对应的这个联系人的下标, 从这个下标开始,后面的往前移动
// [zhangsan,lisi,wangwu,zhaoliu,tianqi]
// [zhangsan,wangwu,zhaoliu,tianqi,tianqi]
for (int j = i; j < linkMans.length - 1 ; j++) {
linkMans[j] = linkMans[j+1];
}
}
}
linkMans = Arrays.copyOfRange(linkMans,0,linkMans.length-1);
return linkMans;
}
@Override
public LinkMan[] setLinkMan(String name, String number, LinkMan[] linkMans) {
LinkMan linkMan = searchLinkMan(name, linkMans);
linkMan.setPhone(number);
return linkMans;
}
@Override
public LinkMan searchLinkMan(String name, LinkMan[] linkMans) {
for (LinkMan linkMan: linkMans) {
if(name.equals(linkMan.getName())){
return linkMan;
}
}
return null;
}
/**
* 展示所有联系人
* @param linkMans
*/
@Override
public void searchA1l(LinkMan[] linkMans) {
for (LinkMan man:linkMans) {
if(null == man){
System.out.println("已经展示完毕,再见!");
break;
}
System.out.println(man);
}
}
}
package com.qfedu.homework.linkman;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/9 17:21
* @Version 1.0
*
* 设计LinkMan类,姓名,年龄,
* 性别,号码属性,get/set, 构造方法,重写toString
*/
public class LinkMan {
private String name;
private int age;
private char gender;
private String phone;
public LinkMan(String name, int age, char gender, String phone) {
this.name = name;
this.age = age;
this.gender = gender;
this.phone = phone;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return name + "\t" + age + "\t" + gender + "\t" + phone ;
}
}
package com.qfedu.homework.linkman;
import java.util.Arrays;
import java.util.Scanner;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/9 17:30
* @Version 1.0
*/
public class MainScreen {
/**
* 打印操作界面
*/
public static void showScreen() {
System.out.println("欢迎来到xx手机联系人系统");
String[] arr = {"1.查询所有联系人", "2.通过手机号码删除联系人", "3.通过姓名删除联系人", "4.添加联系人", "5.按照姓名查询联系人", "6.按照姓名修改联系人"};
for (String opration : arr) {
System.out.println(opration);
}
System.out.println("请输入您要选择功能序号[1~6]:");
}
/**
* 判断一个字符串是否为数字,便于转换
*
* @param str
* @return
*/
public static boolean isNum(String str) {
String regex = "[0-9]+";
return str.matches(regex);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
TelephoneTools telephoneTools = new TelephoneTools();
// 将来存储所有的联系人,目前里面有100个空的联系人 [null,null,xxxxxxx,xxx....]
LinkMan[] linkMans = new LinkMan[0];
do {
showScreen();
String numStr = scanner.next();
if (isNum(numStr)) {
/**
* 如何判定用户输入的是数字呢?
*/
Integer num = Integer.valueOf(numStr);
if (num >= 1 && num <= 6) {
switch (num) {
case 1:
//此处查询所有联系人
// 打印所有联系人
telephoneTools.searchA1l(linkMans);
// 展示主要屏幕
showScreen();
break;
case 2:
//2.通过手机号码删除联系人
System.out.println("请输入手机号码:");
String _phone = scanner.next();
// 每一次不管是添加还是删除,都会产生新的数组,需要使用老的linkMans 变量指向新的数组。
linkMans = telephoneTools.deleteLinkManByNumber(_phone,linkMans);
telephoneTools.searchA1l(linkMans);
break;
case 3:
//3.通过姓名删除联系人
break;
case 4:
System.out.println("请输入姓名,年龄,性别,手机号码以' '隔开:");
String name = scanner.next();
int age = scanner.nextInt();
char sex = scanner.next().charAt(0);
String phone = scanner.next();
LinkMan linkMan = new LinkMan(name, age, sex, phone);
// 添加联系人核心方法
linkMans = telephoneTools.addLinkMan(linkMan, linkMans);
//System.out.println(Arrays.toString(linkMEN));
// 展示所有的联系人信息
telephoneTools.searchA1l(linkMans);
break;
case 5:
System.out.println("请输入姓名:");
String _name = scanner.next();
LinkMan linkMan1 = telephoneTools.searchLinkMan(_name, linkMans);
System.out.println(linkMan1);
break;
case 6:
System.out.println("请输入要修改的用户的姓名以及要修改的手机号码:");
String name2 = scanner.next();
String phoneNum = scanner.next();
telephoneTools.setLinkMan(name2,phoneNum,linkMans);
telephoneTools.searchA1l(linkMans);
break;
}
} else {
System.out.println("输入有误,请输入1~6 之间的数字:");
}
} else {
System.out.println("输入有误,请输入数字类型");
}
} while (true);
}
}
7、DVD 案例
package com.qfedu.homework.dvd;
import java.util.Date;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/11 16:26
* @Version 1.0
*/
public class DVD {
private String name;
private int status = 1; // 0 代表借出,1 代表可借
private Date lendDate; // 借出日期
private int lendTime; // 借出了多少次
public DVD(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getStatus() {
return status;
}
public String getStatusStr(){
if(status == 0){
return "不可借";
}
return "可借";
}
public void setStatus(int status) {
this.status = status;
}
public Date getLendDate() {
return lendDate;
}
public void setLendDate(Date lendDate) {
this.lendDate = lendDate;
}
public int getLendTime() {
return lendTime;
}
public void setLendTime(int lendTime) {
this.lendTime = lendTime;
}
@Override
public String toString() {
return "DVD{" +
"name='" + name + '\'' +
", status=" + status +
", lendDate=" + lendDate +
", lendTime=" + lendTime +
'}';
}
}
package com.qfedu.homework.dvd;
import java.util.Arrays;
import java.util.Date;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/11 16:26
* @Version 1.0
*/
public class DVDTools {
public static DVD[] addDvd(DVD dvd, DVD[] dvdArr) {
dvdArr = Arrays.copyOf(dvdArr, dvdArr.length + 1);
dvdArr[dvdArr.length-1] = dvd;
System.out.println(Arrays.toString(dvdArr));
System.out.println("添加成功");
return dvdArr;
}
/**
* 删除
* @param dvdName
* @param dvdArr
* @return
*/
public static DVD[] deleteDvd(String dvdName, DVD[] dvdArr) {
for (int i = 0; i < dvdArr.length; i++) {
if(dvdName.equals(dvdArr[i].getName())){
for (int j = i; j < dvdArr.length-1; j++) {
dvdArr[j]=dvdArr[j+1];
}
}
}
dvdArr = Arrays.copyOfRange(dvdArr,0,dvdArr.length-1);
return dvdArr;
}
/**
*
* @param dvdArr
*/
public static DVD[] lendDvd(String dvdName, DVD[] dvdArr) {
for (int i = 0; i < dvdArr.length; i++) {
DVD dvd = dvdArr[i];
if(dvdName.equals(dvd.getName())){
dvd.setStatus(0);
dvd.setLendTime(dvd.getLendTime()+1);
dvd.setLendDate(new Date());
}
}
return dvdArr;
}
public static void show(DVD[] dvdArr) {
System.out.println("序号 状态 名称 借出如期 借出次数");
for (int i=0;i < dvdArr.length;i++) {
DVD dvd = dvdArr[i];
System.out.println((i+1)+" "+dvd.getStatusStr()+" "+dvd.getName()+" "+dvd.getLendDate()+" "+dvd.getLendTime());
}
}
}
package com.qfedu.homework.dvd;
import com.qfedu.homework.linkman.LinkMan;
import com.qfedu.homework.linkman.TelephoneTools;
import java.util.Scanner;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/11 16:27
* @Version 1.0
*/
public class MainScreen {
/**
* 打印操作界面
*/
public static void showScreen() {
System.out.println("欢迎来到DVD租赁系统");
String[] arr = {"1.新增", "2.查看", "3.删除", "4.借出", "5.归还", "6.退出"};
for (String opration : arr) {
System.out.println(opration);
}
System.out.println("请输入您要选择功能序号[1~6]:");
}
/**
* 判断一个字符串是否为数字,便于转换
*
* @param str
* @return
*/
public static boolean isNum(String str) {
String regex = "[0-9]+";
return str.matches(regex);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
DVDTools dvdTools = new DVDTools();
// 将来存储所有的联系人,目前里面有100个空的联系人 [null,null,xxxxxxx,xxx....]
DVD[] dvdArr = new DVD[0];
do {
showScreen();
String numStr = scanner.next();
if (isNum(numStr)) {
/**
* 如何判定用户输入的是数字呢?
*/
Integer num = Integer.valueOf(numStr);
if (num >= 1 && num <= 6) {
switch (num) {
case 1:
System.out.println("请输入DVD名字:");
String name = scanner.next();
DVD dvd = new DVD(name);
dvdArr = DVDTools.addDvd(dvd,dvdArr);
// 此处需要调用一个查看方法
DVDTools.show(dvdArr);
// 展示主要屏幕
showScreen();
break;
case 2:
DVDTools.show(dvdArr);
break;
case 3:
System.out.println("请输入要删除的DVD名字:");
String _name = scanner.next();
// DVDTools.deleteDvd(_name,dvdArr); // 错误演示
dvdArr =DVDTools.deleteDvd(_name,dvdArr);
DVDTools.show(dvdArr);
break;
case 4:
System.out.println("请输入要借出的DVD名字:");
String name2 = scanner.next();
DVDTools.lendDvd(name2,dvdArr);
DVDTools.show(dvdArr);
break;
case 5:
break;
case 6:
break;
}
} else {
System.out.println("输入有误,请输入1~6 之间的数字:");
}
} else {
System.out.println("输入有误,请输入数字类型");
}
} while (true);
}
}