JavaExp7:常用实用类
(1) 重写equals方法。
(a)设计Student类,定义sid变量表示学号,重写equals()方法,判断进行比较的两个学生对象学号是否相同,相同即为同一个学生,否则不是。
(b)编写测试类,创建两个Student的对象Lily和Lucy,并分别调用set方法为学号赋值,最后通过打印语句,输出这两个对象通过“==”和重写后的equals()方法比较后的结果。
package EXP2020.exp7;
import java.util.Scanner;
/**
* @author JMChen
* @date 2020/4/21
*/
class Student {
public String sid;
public void setSid(String str) {
sid = str;
}
public boolean equals(Object obj) {
Student stu = (Student) obj;
return (stu.sid.equals(this.sid));
}
}
public class MainTestOne {
public static void main(String[] args) {
Student Lily = new Student();
Student Lucy = new Student();
Lily.setSid("2020123");
Lucy.setSid("2020123");
System.out.println("使用重写后的 equals:" + Lily.equals(Lucy));
System.out.println("使用 '==' :" + (Lily == Lucy));
}
}
(2) 编写程序剔除一个字符串中的全部非数字字符,例如,将形如“ab123you”的非数字字符全部剔除,得到字符串“123”(参看课本例子10)。
package EXP2020.exp7;
import java.util.Scanner;
/**
* @author JMChen
* @date 2020/4/21
*/
public class MainTestTwo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String regex = "[^0-9]+";
String str = sc.nextLine();
System.out.println("剔除数字前:原字符串为:" + str);
str = str.replaceAll(regex, "");
System.out.println("剔除非数字后的字符串为:" + str);
}
}
(3) 使用Scanner类的实例解析字符串:"数学87分,物理76分,英语96分"中的考试成绩,并计算出总成绩以及平均分数(参看课本例子13)。
package EXP2020.exp7;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* @author JMChen
* @date 2020/4/21
*/
class GetScore {
public static double calSum(String massage) {
Scanner scanner = new Scanner(massage);
scanner.useDelimiter("[^0-9.]+");
double sum = 0;
while (scanner.hasNext()) {
try {
double score = scanner.nextDouble();
sum += score;
} catch (InputMismatchException e) {
String t = scanner.next();
}
}
return sum;
}
}
public class MainTestThree {
public static void main(String[] args) {
String massage = "数学87分,物理76分,英语96分";
double sum, avg;
sum = GetScore.calSum(massage);
avg = sum / 3.0;
System.out.println("总成绩 = " + sum + " 平均分 = " + avg);
}
}
(4) 编写一个计算利息(按天计息)的程序,存款的数目和起止时间用户可以从键盘输入。(提示:利息=本金*利率*天数)
package EXP2020.exp7;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author JMChen
* @date 2020/4/21
*/
class CalInterest {
private double rate = 0.0025;
public double getInterest(double money, long days) {
return money * days * rate;
}
}
class SpiltYearMonthDay {
public static int[] getStartTime(String startTime) {
String regex = "[0-9]+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(startTime);
int[] startTime1 = new int[3];
int i = 0;
while (m.find()) {
startTime1[i] = Integer.parseInt(m.group());
i++;
}
return startTime1;
}
}
public class MainTestFour {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入存款的起始时间:");
String startTime = sc.nextLine();
System.out.println("请输入存款数目:");
double money = sc.nextDouble();
int[] startTime1 = SpiltYearMonthDay.getStartTime(startTime);
Calendar calendar = Calendar.getInstance();
calendar.set(startTime1[0], startTime1[1] - 1, startTime1[2]);
long time1 = calendar.getTimeInMillis();
calendar.setTime(new Date());
int[] endTime = {calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)};
calendar.set(endTime[0], endTime[1], endTime[2]);
long time2 = calendar.getTimeInMillis();
long days = (time2 - time1) / (1000 * 24 * 60 * 60);
double interest = new CalInterest().getInterest(money, days);
System.out.println("距离存放起始时间已有:" + days + "天");
System.out.println("您获得的利息为:" + interest);
}
}
/*
请输入存款的起始时间:
2020年3月12日
请输入存款数目:
2000
距离存放起始时间已有:40天
您获得的利息为:200.0
Process finished with exit code 0
*/
- 输入年月日如果提醒用户输入,那样可以不用再切分,这里只是想练练用用正则表达式,否则可以简化些。如下简化:
package EXP2020.exp7;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
* @author JMChen
* @date 2020/4/21
*/
public class task4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Calendar calendar = Calendar.getInstance();
double rate = 0.025, interest;
long days, startTime, endTime;
int year, month, day;
System.out.println("请输入存款数目:");
double moeny = sc.nextDouble();
System.out.println("请输入存款的起始年:");
year = sc.nextInt();
System.out.println("请输入存款的起始月:");
month = sc.nextInt();
System.out.println("请输入存款的起始日:");
day = sc.nextInt();
calendar.set(year, month-1, day);
startTime = calendar.getTimeInMillis();
calendar.setTime(new Date());
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
endTime = calendar.getTimeInMillis();
days = (endTime-startTime)/(1000*60*60*24);
interest = rate*days*moeny;
System.out.println("距离存放起始时间已有:" + days + "天");
System.out.println("您获得的利息为:" + interest + "元");
}
}