2012-01-28 26 views
0

私はこの論理が健全に見えるかJavaを知りたいと思っています。このクラスの目的は、ユーザーからの入力を12時間形式で受け取ることです。次に、ユーザは一定時間を入力するよう促される。最後に、12時間形式で最終時間(時間の追加とともに)を出力します。私はこれを介していくつかのテストシナリオを実行し、すべてが正常に動作しているようだ。私はそれを良いと呼ぶ前に、訓練された目のいくつかの追加のセットを見ることが好きです。ご協力いただきありがとうございます!Javaクラス - 時間にn時間、分、秒を追加します

import javax.swing.JOptionPane; 

public class M3E7 { 
public static void main(String args[]) { 

    String start_hr = null; 
    String start_min = null; 
    String start_sec = null; 
    String abbr = null; 
    String hr = null; 
    String min = null; 
    String sec = null; 
    int start_hr_num = 0; 
    int start_min_num = 0; 
    int start_sec_num = 0; 
    int hr_num = 0; 
    int min_num = 0; 
    int sec_num = 0; 
    int final_hr = 0; 
    int final_min = 0; 
    int final_sec = 0; 

    start_hr = JOptionPane.showInputDialog("Start time - Enter the hours."); 
    start_min = JOptionPane.showInputDialog("Start time - Enter the minutes."); 
    start_sec = JOptionPane.showInputDialog("Start time - Enter the seconds."); 
    abbr = JOptionPane.showInputDialog("Start time - Enter either am or pm."); 
    hr = JOptionPane.showInputDialog("Enter the number of hours to add (less than 24)."); 
    min = JOptionPane.showInputDialog("Enter the number of minutes to add (less than 60)."); 
    sec = JOptionPane.showInputDialog("Enter the number of seconds to add (less than 60)."); 

    start_hr_num = Integer.parseInt(start_hr); 
    start_min_num = Integer.parseInt(start_min); 
    start_sec_num = Integer.parseInt(start_sec); 
    hr_num = Integer.parseInt(hr); 
    min_num = Integer.parseInt(min); 
    sec_num = Integer.parseInt(sec); 

    if (abbr.equals("pm")); { 
     start_hr_num += 12; 
    } 

    final_hr = (start_hr_num + hr_num); 
    final_min = (start_min_num + min_num); 
    final_sec = (start_sec_num + sec_num); 

    if (final_sec >= 60) { 
     final_min++; 
     final_sec -= 60; 
    } 

    if (final_min >= 60) { 
     final_hr++; 
     final_min -= 60; 
    } 

    if (final_hr >= 24) { 
     final_hr -= 24; 
    } 

    if (final_hr > 12) { 
     final_hr -= 12; 
     abbr.equals("pm"); 
    } 
    else if (final_hr == 12) { 
     final_hr -= 12; 
     abbr.equals("am"); 
    } 
    else { 
     abbr.equals("am"); 
    } 

    JOptionPane.showMessageDialog(null, "The new time of day is " + final_hr + ":" + final_min + ":" + final_sec + " " + abbr); 

    System.exit(0); 
    } 
} 
+0

これは宿題でない場合は、これを行う方法が既に存在することを知っておく必要があります。 http://stackoverflow.com/questions/439903 –

+1

クラス名のE7は、これが「エクササイズ7」であることを指しており、セメスターのその時間の周りにあります。 – Tim

+0

学校の仕事です。私たちは、これまでに限られた知識を使ってこれを達成することになっています(数週間分の資料がカバーされています)。私が自分のやり方で苦労した後、私がオンラインで見つけることができる別の解決策を見てみましょう。:) – Deimos

答えて

4

自分に好意を行うとは、日付/時間を自分で算術演算を実行しないでください。

代わりに、あなたのためにそれを処理するためにJoda Timeを使用します。

  • DateTimeFormatter.parseLocalTime経由)LocalTimeとして、第1の入力をパースする
  • Period.hours()Period.minutes()Period.seconds()
  • を使用して Period値として次の3つの入力をパースします
  • LocalTime.plus(ReadablePeriod)を使用して期間を追加します。
  • 希望する形式と出力
+0

それは宿題です、申し訳ありません。 :P –

+0

@RobertHarvey:ああ - 私はこれを似たようなことをしている人に任せておきます:) –

+0

ありがとう。これは私が道をもっと学ぶときに調べる何かを私に与えるでしょう。今は私のために少し進んでいるように見えます。 – Deimos

0

宿題なので、答え全体を書いておきたいとは思っていませんが、少なくともあなたに何か考えてもらうことはありません。

すべての時刻と日付は、エポックからミリ秒単位で格納されます(例:jan 1、1970)。私が問題にアプローチする方法は、ユーザーが入力した日付をとり、そこからjava.util.Date()オブジェクトを作成することです。そのDateオブジェクトから、ユーザーの「期間」からミリ秒数を単純に加算または減算することができます。

次に、新しい日付オブジェクトを印刷するだけの練習になります。

もちろん、これがあなたのクラスにとってあまりにも複雑すぎるかどうかはわかりませんが、サードパーティ製のライブラリ(Joda Timeなど)を使わずに、かなり簡単な方法です(既にDateオブジェクトを使用していると仮定します)。 )。

+0

Dateオブジェクトはまだ使用されていません。しかし、私は将来この記事を振り返り、もう少し知識を得ると新しいことを学びます。あなたのご意見ありがとうございます。 – Deimos

0

@Jon Skeetが述べたように、Joda Timeを使用してください。複雑な日付の計算を簡単に行うのに役立ちます。

関連する問題