4

私は時間変換プログラム(つまり、秒から分、分秒など)を書きましたが、後でこれらのクラスが同様の操作を実行することがわかりました.これらのクラスを関連付ける方法はありますか?もしそうなら、解決策と提案を教えてください. これが私のコードです....

Second.java

import java.util.concurrent.*;

public class Second {

    private long secondsValue;

    public Second() {
        secondsValue = 0L;
    }

    public Second(String from, String to, long unitValue) {
        unitSelection(from, to, unitValue);
    }

    private void convertSecondToMinute(long unitValue) {
        unitValue = TimeUnit.MINUTES.convert(unitValue, TimeUnit.SECONDS);
        secondsValue = unitValue;
    }

    private void convertSecondToHour(long unitValue) {
        unitValue = TimeUnit.HOURS.convert(unitValue, TimeUnit.SECONDS);
        secondsValue = unitValue;
    }

    private void convertSecondToDay(long unitValue) {
        unitValue = TimeUnit.DAYS.convert(unitValue, TimeUnit.SECONDS);
        secondsValue = unitValue;
    }

    private void convertSecondToWeek(long unitValue) {
        unitValue = unitValue/60/60/24/7;
        secondsValue = unitValue;
    }

    public long getSeconds() {
        return secondsValue;
    }

    private void unitSelection(String from, String to,
            long unitValue) {
        if( from.equalsIgnoreCase("second")) {
            if(to.equalsIgnoreCase("minute")) {
                convertSecondToMinute(unitValue);
            }
            else if(to.equalsIgnoreCase("hour")) {
                convertSecondToHour(unitValue);             
            }
            else if(to.equalsIgnoreCase("day")) {
                convertSecondToDay(unitValue);
            }
            else if(to.equalsIgnoreCase("week") ) {
                convertSecondToWeek(unitValue);
            }
            else {
                System.out.println("Invalid argument...!");
            }
        }
    }
}

分.java

import java.util.concurrent.TimeUnit;

public class Minute {
    private long unitMinute;

    public Minute() {
        unitMinute = 0L;
    }
    public Minute(String from, String to,
            long unitValue) {
        unitSelection(from, to, unitValue);
    }

    private void convertMinuteToSecond(long unitValue) {
        unitValue = TimeUnit.SECONDS.convert(unitValue, TimeUnit.MINUTES);
        unitMinute = unitValue;
    }
    private void convertMinuteToHour(long unitValue) {
        unitValue = TimeUnit.HOURS.convert(unitValue, TimeUnit.MINUTES);
        unitMinute = unitValue;
    }
    private void convertMinuteToDay(long unitValue) {
        unitValue = TimeUnit.DAYS.convert(unitValue, TimeUnit.MINUTES);
        unitMinute = unitValue;
    }
    private void convertMinuteToWeek(long unitValue) {
        long value = unitValue /60/24/7;
        unitMinute = value;
    }
    public long getUnitMinute() {
        return unitMinute;
    }
    private void unitSelection(String from, String to,
            long unitValue) {
        if( from.equalsIgnoreCase("minute")) {
            if(to.equalsIgnoreCase("second")) {
                convertMinuteToSecond(unitValue);
            }
            else if(to.equalsIgnoreCase("hour")) {
                convertMinuteToHour(unitValue);             
            }
            else if(to.equalsIgnoreCase("day")) {
                convertMinuteToDay(unitValue);
            }
            else if(to.equalsIgnoreCase("week") ) {
                convertMinuteToWeek(unitValue);
            }
            else {
                System.out.println("Invalid argument...!");
            }
        }   
    }
}
4

3 に答える 3

5

コードを改善する最善の方法は、すべてのクラスを削除してTimeUnit代わりに使用することです。

TimeUnitには、このすべての機能 (およびそれ以上) があり、JDK が付属しています。
車輪を再発明しないでください。

于 2013-06-10T04:46:53.897 に答える
0

「関連」というと、非常に広い話題です。ただし、開始する正しい方法は、Javaパッケージメカニズムを使用してクラスを非常に高いレベルで関連付けることです。Inheritance と Polymorphismを使用して、(可能であれば) コードを管理できます。@Bohemianが提案したように、sth newを実行し、学習目的で実行するまで、または実行しない限り、既存のJavaライブラリを使用してください。

于 2013-06-10T04:57:12.833 に答える
0

2 つのオプションが表示されます。

1. 両方を単一のクラスとして再定義します。これは、普遍的な値の標準 (たとえば、ミリ秒数) の使用を提案し、分、時間などのさまざまな尺度でそれが何を意味するかを提供します。

class Duration
{
    private long secondsValue;

    public Duration() {
        secondsValue = 0L;
    }

    public Duration(String format, long value) {
        if (format.equals("SECONDS")) secondsValue = value;
        else if (format.equals("MINUTES")) secondsValue = value*60;
        else if (format.equals("HOURS")) secondsValue = value*60*60;
        else if (format.equals("DAYS")) secondsValue = value*60*60*24;
        else if (format.equals("WEEKS")) secondsValue = value*60*60*24*7;
    }

    public long  asMinutes() {
        return value/60;
    }

    public long asHours() {
        return value/(60*60);
    }

    public long asDays() {
        return value/(60*60*24);
    }

    public long asWeeks() {
        return unitValue/(60*60*24*7);
    }

    public long asSeconds() {
        return secondsValue;
    }
}

2. コンバータ ユーティリティ クラスを使用する:TimeUnit.MINUTES.convert(unitValue, TimeUnit.SECONDS);秒から分への変換に使用する方法と同様

于 2013-06-10T05:30:38.457 に答える