2

さて、最初は24時間制に設定されている時計クラスがありますが、このメソッドのみを使用して、時計を12時間制として表示する必要があります。私は何時間も試しましたが、足りませんでした!助けてください。時計に時刻を12時間制(hh:mm:ss AM / PM)として表示させます。抽象化を使用します-updateDisplay()メソッド以外は変更しないでください。時計は「隠蔽」された軍事時間を使用できます。getTime()が呼び出されたときに、適切な文字列を返す必要があります。

private void updateDisplay()
{
    String AM = "AM";
    String PM = "PM";

    if(hours.getValue() == 0) {
        hours.setValue(hours.getValue() + 12);
        PM = "";
    }
    else if(hours.getValue() == 1 < hours.getValue() && hours.getValue() < 11) {
        PM = "";
    }
    else if(hours.getValue() == 12) {
       AM = "";
    }
    else if(hours.getValue() == 13 > 24) {
        hours.setValue(hours.getValue() - 12);
       AM = "";
    }

    displayString = hours.getDisplayValue() + ":" + 
    minutes.getDisplayValue() + ":" +
    seconds.getDisplayValue() + PM + AM;
}
4

3 に答える 3

3

24時間時計Hは、0 <= H<=23から実行されます。が0の場合H div 12はAM、それ以外の場合はPMです。その場合、12時間制hは、H mod 12その値が0でない限り、h = 12ですhours.setValue(...)。表示コードの値()を変更したり、秒に変換したりする必要はありません。コードの問題は、最初の条件付きステートメントの構文の問題にすぎないと思います。

... if(hours.getValue() == 1 < hours.getValue() ... // This is wrong

時間の値を1と比較し、次に比較の結果を時間と比較しています。boolsはintと比較できないため、これはjavaではコンパイルされません。

注:私が言うときdiv、私は整数除算(つまり/、Javaの切り捨てられた演算子)modを意味し、私が言うとき、私は整数モジュラス(%Javaの演算子)を意味します。

更新:あなたがする必要があるのはhours.getValue()、表示のためにあなたの24時間の値を12時間に相当するものに変換することです。次のようなもの:

// Not correct Java!
string meridianNess = (hours.getValue()/12==0?"AM":"PM");
int h = hours.getValue()%12;
if (h==0) h = 12;
System.out.print(h+":"+new NumberFormat("00").format(minutes.getValue())+":"+
    new NumberFormat("00").format(seconds.getValue())+" "+meridianNess);
于 2013-01-28T03:39:57.063 に答える
1

これをうまく機能させるための簡潔な式は、11を追加し、次に「モジュロ12」を取り、さらにもう1つ追加することです。

hours.setValue(((hours.getValue()+11)%12)+1);

すなわち

h_12 = ( (h_24+11) % 12 ) + 1

これは、hours = 0、hours=12などを含む任意の値に対して望ましい結果を与えるように機能します。

(そしてもちろん、AM / PMディスプレイについて前述したソリューションのいずれかを使用します)

于 2015-03-11T08:29:17.467 に答える
0

24時間の時間を秒に変換してみてください。そうすれば簡単なはずです...

于 2013-01-28T03:20:56.493 に答える