JavaExp7:常用实用类

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 + "元");
    }
}

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值