时间加法(JAVA)

在程序中,经常要对时间进行操作,请定义实现一个时间类,来满足程序中的需要:

(1)定义名为 MyTime 的类,其中有三个整型:时(hour),分(minute),秒(second)。

(2)为了保证数据的安全性,这三个成员变量应声明为私有。

(3)为 MyTime 类定义构造方法,以方便创建对象时初始化成员变量。

(4)为 MyTime 类添加以下三个方法,分别对时、分、秒进行加减运算。     

addSecond(int second)     

addMinute(int minute)     

addHour(int hour)     

注意时、分、秒可以大于或小于0,在进行计算时还应该注意进位。   

 如当前时间12:20:40,当调用addSecond( 30)时,则时间变为:12:21:10;

(5)重写toString()方法,用于将时间信息打印出来。输出格式为:时:分:秒(12:20:40)。

测试要求如下:

1)初始化时间为 12:20:40

2)增加30秒之后输出时间为:12:21:10

3)增加70分钟后输出时间为:13:31:10 

4)增加25小时后输出时间为:14:31:10

代码示例:


public class MyTime {
    private int hour;
    private int minute;
    private int second;

    public MyTime(int hour, int minute, int second) {
        this.hour = hour;
        this.minute = minute;
        this.second = second;
    }
    public void addSecond(int second){
        this.second += second;
        while(this.second >= 60){
            this.second -= 60;
            addMinute(1);
        }
        while(this.second < 0){
            this.second += 60;
            addMinute(-1);
        }
    }

    public void addMinute(int minute) {
        this.minute += minute;
        while(this.minute >= 60){
            this.minute -= 60;
            addHour(1);
        }
        while(this.minute < 0){
            this.minute += 60;
            addHour(-1);
        }
    }

    public void addHour(int hour) {
        this.hour += hour;
        while(this.hour >= 24){
            this.hour -= 24;
        }
        while(this.hour < 0){
            this.hour += 24;
        }
    }


    public String toString() {
        return (this.hour + ":" + this.minute + ":" + this.second);
    }


}

public class Main {
    public static void main(String[] args) {
        MyTime mytime =new MyTime(12,20,40);
        mytime.addSecond(30);
        System.out.println(mytime.toString());
        mytime.addMinute(70);
        System.out.println(mytime.toString());
        mytime.addHour(25);
        System.out.println(mytime.toString());
    }
}

效果:

(代码和效果仅供参考)

要使用 Java 实现一元多项式加法,可先定义一个表示多项式结点的类,再实现多项式加法的逻辑。 ### 多项式结点类 ```java public class PolynNode { public double coef; // 系数 public int expn; // 指数 public PolynNode next; // 指向下一个结点的引用 public PolynNode(double coef, int expn) { // 构造函数 this.coef = coef; this.expn = expn; this.next = null; } } ``` ### 多项式链表类 ```java public class Polynomial { private PolynNode head; public Polynomial() { head = new PolynNode(0, -1); // 头结点 } // 添项到多项式 public void addTerm(double coef, int expn) { PolynNode newNode = new PolynNode(coef, expn); PolynNode current = head; while (current.next != null && current.next.expn > expn) { current = current.next; } if (current.next != null && current.next.expn == expn) { current.next.coef += coef; if (current.next.coef == 0) { // 如果系数为 0,移除该项 current.next = current.next.next; } } else { newNode.next = current.next; current.next = newNode; } } // 多项式加法 public Polynomial add(Polynomial other) { Polynomial result = new Polynomial(); PolynNode p1 = this.head.next; PolynNode p2 = other.head.next; while (p1 != null && p2 != null) { if (p1.expn > p2.expn) { result.addTerm(p1.coef, p1.expn); p1 = p1.next; } else if (p1.expn < p2.expn) { result.addTerm(p2.coef, p2.expn); p2 = p2.next; } else { double sumCoef = p1.coef + p2.coef; if (sumCoef != 0) { result.addTerm(sumCoef, p1.expn); } p1 = p1.next; p2 = p2.next; } } // 处理剩余的项 while (p1 != null) { result.addTerm(p1.coef, p1.expn); p1 = p1.next; } while (p2 != null) { result.addTerm(p2.coef, p2.expn); p2 = p2.next; } return result; } // 打印多项式 public void print() { PolynNode current = head.next; boolean first = true; while (current != null) { if (!first) { if (current.coef > 0) { System.out.print(" + "); } else { System.out.print(" - "); System.out.print(Math.abs(current.coef)); } } else { if (current.coef < 0) { System.out.print("-"); } System.out.print(Math.abs(current.coef)); first = false; } if (current.expn > 0) { System.out.print("x"); if (current.expn > 1) { System.out.print("^" + current.expn); } } current = current.next; } System.out.println(); } } ``` ### 测试代码 ```java public class Main { public static void main(String[] args) { Polynomial p1 = new Polynomial(); p1.addTerm(2, 2); p1.addTerm(100, 3); p1.addTerm(45, 5); p1.addTerm(3, 20); Polynomial p2 = new Polynomial(); p2.addTerm(3, 2); p2.addTerm(50, 3); p2.addTerm(10, 5); System.out.print("多项式 p1: "); p1.print(); System.out.print("多项式 p2: "); p2.print(); Polynomial result = p1.add(p2); System.out.print("相结果: "); result.print(); } } ``` ### 代码解释 1. **PolynNode 类**:表示多项式的每一项,包含系数 `coef`、指数 `expn` 和指向下一个结点的引用 `next`。 2. **Polynomial 类**: - `addTerm` 方法:将新的项添到多项式中,同时处理指数相同的项合并。 - `add` 方法:实现两个多项式的加法,通过比较指数大小,合并相同指数的项。 - `print` 方法:打印多项式。 3. **Main 类**:创建两个多项式,调用 `add` 方法进行加法运算,并打印结果。 ### 复杂度分析 - **时间复杂度**:$O(m + n)$,其中 $m$ 和 $n$ 分别是两个多项式的项数。 - **空间复杂度**:$O(m + n)$,主要用于存储结果多项式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值