2012-01-28 2 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

학교 일입니다. 우리는 지금까지 우리가 가지고있는 제한된 지식을 사용하여 이것을 달성해야합니다 (2 주 정도의 재료 만 다룹니다). 나는 내 자신의 길을 고투하고 난 후에 내가 온라인에서 찾을 수있는 대체 솔루션을 보게 될 것이다. :). – Deimos

답변

4

자신에게 호의를 수행하고 날짜/시간이 자신을 산술 수행하지 않습니다.

대신, 당신을 위해 그것을 처리하기 위해 Joda Time를 사용

  • 과 같이 첫 번째 입력을 구문 분석 LocalTime
  • (DateTimeFormatter.parseLocalTime를 통해) Period 값이 Period.hours(), Period.minutes()Period.seconds()
  • 를 사용하는 것과 다음 3 개 개의 입력을 구문 분석
  • LocalTime.plus(ReadablePeriod)을 사용하여 시간을 추가하십시오.
  • 원하는 형식으로 출력하십시오.
+0

숙제입니다. 죄송합니다. : P –

+0

@RobertHarvey : 아 글쎄 - 나는 비슷한 것을하고있는 누군가를 위해 이것을 남겨 둘 것이다. :) –

+0

입력 해 주셔서 감사합니다. 이것은 내가 길을 더 많이 배우는 때를 들여다 볼 무언가를 줄 것이다. 지금은 나에게 너무 진보 된 것처럼 보입니다. – Deimos

0

숙제이므로 전체 답변을 작성하지는 않겠지 만 생각해 볼만한 것이 있습니다.

모든 시간과 날짜는 신기원에서 밀리 초 단위로 저장됩니다 (예 : 1970 년 1 월 1 일). 이 문제에 접근하는 방법은 사용자가 입력 한 날짜를 가져 와서 java.util.Date() 객체를 생성하는 것입니다. 해당 Date 객체에서 사용자의 "기간"에서 밀리 초 수를 더하거나 뺍니다.

그러면 새로운 날짜 개체를 인쇄하는 연습이됩니다.

물론이 클래스가 클래스에 비해 너무 복잡할지 모르겠지만 타사 라이브러리 (예 : Joda Time)를 사용하지 않고도 상당히 간단한 접근 방식입니다 (이미 Date 객체를 사용했다고 가정).).

+0

우리는 아직 Date 객체를 사용하지 않았습니다. 그러나 나는 앞으로이 포스트를 되돌아보고 더 많은 지식을 얻었을 때 새로운 것을 배울 것입니다. 귀하의 의견을 보내 주셔서 감사합니다. – Deimos

0

@ 존 스킷이 언급했듯이 조다 타임을 사용하십시오. 복잡한 날짜 계산을 쉽게하는 데 도움이됩니다.

관련 문제