현재 12 시간 시계 (예 : 입력 (16, 47))에서 시간을 작성하기 위해 기본 클래스의 입력과 상호 작용하는 데이터 유형 Time()을 작성하려고합니다. (예 : (28, -148)에 대한 입력 값은 28 시간 평가에서 2 시간 28 분을 제거 할 수 있습니다. ~ (25, 32)이고 25는 1로 평가되어 1:32 AM의 시간을 나타냅니다. 이 드라이버 프로그램을 기반으로 지금까지 내가 만든 것에서 잘못된 값을 얻고 있습니다.12 시간 시계 작성
package newProject;
/**
* A program to test the Time class.
*
*
*/
public class TestTime {
public static void main(String[] args) {
System.out.println("Basic Times\n"
+ "-----------");
testTime(12, 30, 12, 30, "12:30 PM");
testTime(16, 16, "4:00 PM");
testTime(0, 0, 0, 0, "12:00 AM");
testTime(0, 10, 0, 10, "12:10 AM");
testTime(1, 5, 1, 5, "1:05 AM");
testTime(11, 59, 11, 59, "11:59 AM");
testTime(12, 12, "12:00 PM");
testTime(12,1,12,1, "12:01 PM");
testTime(13,55,13,55, "1:55 PM");
testTime(23,55,23,55, "11:55 PM");
System.out.println();
System.out.println("Invalid Times\n"
+ "-------------");
testTime(24, 0, "12:00 AM");
testTime(49, 10, 1, 10, "1:10 AM");
testTime(49, 125, 3, 5, "3:05 AM");
testTime(-1, 23, "11:00 PM");
testTime(0, -1, 23, 59, "11:59 PM");
testTime(-27, 21, "9:00 PM");
testTime(10, -125, 7, 55, "7:55 AM");
testTime(-55, -308, 11, 52, "11:52 AM");
System.out.println();
System.out.println("addMinutes\n"
+ "----------");
testAdd(0, 0, 20, 0, 20, "12:20 AM");
testAdd(0, 0, 90, 1, 30, "1:30 AM");
testAdd(0, 40, 30, 1, 10, "1:10 AM");
testAdd(0, 40, 90, 2, 10, "2:10 AM");
testAdd(23, 50, 11, 0, 1, "12:01 AM");
testAdd(23, 50, 3 * 24 * 60 + 1, 23, 51, "11:51 PM");
System.out.println();
}
/**
* Test whether Time constructor, getters, and print
* are behaving properly when zero minutes.
*
* @param hrs what hour to say to the constructor
* @param finalHrs what hour the Time should end up with
* @param rep how that Time should print out
*/
private static void testTime(int hrs,
int finalHrs,
String rep) {
System.out.print("new Time(" + hrs + ", 0) --> " + finalHrs + ", 0: ");
Time t = new Time(hrs, 0);
if (t.getHour() == finalHrs && t.getMinute() == 0)
System.out.println("PASS");
else
System.out.println("FAIL");
t.print();
System.out.println(" should be " + rep);
}
/**
* Test whether Time constructor, getters, and print are
* behaving properly when minutes are not (necessarily) 0.
*
* @param hrs what hour to give the constructor
* @param mins what minute to give the constructor
* @param finalHrs what hour the Time should end up with
* @param finalMins what minute the Time should end up with
* @param rep how the Time should print out
*/
private static void testTime(int hrs, int mins,
int finalHrs, int finalMins,
String rep) {
System.out.print("new Time(" + hrs + ", " + mins + ") --> "
+ finalHrs + ", " + finalMins + ": ");
Time t = new Time(hrs, mins);
if (t.getHour() == finalHrs && t.getMinute() == finalMins)
System.out.println("PASS");
else
System.out.println("FAIL");
t.print();
System.out.println(" should be " + rep);
}
/**
* Check whether addMinutes, getters, and print are working properly.
* @param hrs what hour to give the constructor
* @param mins what minute to give the constructor
* @param addMins the number of minutes to add to the Time
* @param finalHrs what hour the Time should end up with
* @param finalMins what minute the Time should end up with
* @param rep how the (later) Time should print out
*/
private static void testAdd(int hrs, int mins, int addMins,
int finalHrs, int finalMins,
String rep) {
Time t = new Time(hrs, mins);
Time t2 = t.addMinutes(addMins);
System.out.print("Adding " + addMins + " minutes to ");
t.print();
System.out.print(" --> ");
if (t2.getHour() == finalHrs && t2.getMinute() == finalMins)
System.out.println("PASS");
else
System.out.println("FAIL");
t2.print();
System.out.println(" should be " + rep);
}
}
지금까지 내가이를 수정하는 데 필요한 방법을 함께 넣어했지만, 정말 다음에 어디로 모르는 것입니다.package newProject;
public class Time {
private final int MAX_HOURS = 23;
private final int MIN_HOURS = 0;
private final int MAX_MINUTES = 59;
private final int MIN_MINUTES = 0;
private int hour;
private int minute;
private Time() {
}
public Time(int hrs, int mins) {
this.hour = hrs;
this.minute = mins;
}
private void fixMe() {
if (minute > MAX_MINUTES) {
this.minute %= minute/60;
this.hour = minute/60 + hour;
}
if (minute < MIN_MINUTES) {
this.minute = minute + 60;
}
if (hour > MAX_HOURS) {
this.hour %= hour/24;
}
if(hour < MIN_HOURS) {
this.hour = hour + 24;
}
}
public int getHour() {
return this.hour;
}
public int getMinute() {
return this.minute;
}
public Time addMinutes(int mins) {
Time t = new Time();
t.fixMe();
return t;
}
public void print() {
if (hour == 0) {
hour = 12;
}
if (hour > 1 && hour <= 12) {
System.out.print(hour);
} else {
System.out.print(hour - 12);
}
if (minute < 10) {
System.out.print(":0" + minute);
} else {
System.out.print(minute);
}
if (hour <= 11) {
System.out.print(" AM");
} else
System.out.print(" PM");
}
}
이들은 내가 얻고있는 결과이며, 내가 찾고있는 것과는 거리가 멀다.
run:
Basic Times
-----------
new Time(12, 30) --> 12, 30: PASS
1230 PM should be 12:30 PM
new Time(16, 0) --> 16, 0: PASS
4:00 PM should be 4:00 PM
new Time(0, 0) --> 0, 0: PASS
12:00 PM should be 12:00 AM
new Time(0, 10) --> 0, 10: PASS
1210 PM should be 12:10 AM
new Time(1, 5) --> 1, 5: PASS
-11:05 AM should be 1:05 AM
new Time(11, 59) --> 11, 59: PASS
1159 AM should be 11:59 AM
new Time(12, 0) --> 12, 0: PASS
12:00 PM should be 12:00 PM
new Time(12, 1) --> 12, 1: PASS
12:01 PM should be 12:01 PM
new Time(13, 55) --> 13, 55: PASS
155 PM should be 1:55 PM
new Time(23, 55) --> 23, 55: PASS
1155 PM should be 11:55 PM
Invalid Times
-------------
new Time(24, 0) --> 0, 0: FAIL
12:00 PM should be 12:00 AM
new Time(49, 10) --> 1, 10: FAIL
3710 PM should be 1:10 AM
new Time(49, 125) --> 3, 5: FAIL
37125 PM should be 3:05 AM
new Time(-1, 0) --> 23, 0: FAIL
-13:00 AM should be 11:00 PM
new Time(0, -1) --> 23, 59: FAIL
12:0-1 PM should be 11:59 PM
new Time(-27, 0) --> 21, 0: FAIL
-39:00 AM should be 9:00 PM
new Time(10, -125) --> 7, 55: FAIL
10:0-125 AM should be 7:55 AM
new Time(-55, -308) --> 11, 52: FAIL
-67:0-308 AM should be 11:52 AM
addMinutes
----------
Adding 20 minutes to 12:00 PM --> FAIL
12:00 PM should be 12:20 AM
Adding 90 minutes to 12:00 PM --> FAIL
12:00 PM should be 1:30 AM
Adding 30 minutes to 1240 PM --> FAIL
12:00 PM should be 1:10 AM
Adding 90 minutes to 1240 PM --> FAIL
12:00 PM should be 2:10 AM
Adding 11 minutes to 1150 PM --> FAIL
12:00 PM should be 12:01 AM
Adding 4321 minutes to 1150 PM --> FAIL
12:00 PM should be 11:51 PM
궁극적으로 프로그램이 필요한 것으로 작동하면 모두 통과로 평가됩니다. 어떤 도움을 크게 나는 기존 fixMe
방법이 작동하도록되어 방법을 잘 모르겠어요
'Time.addMinutes (int)'는 빈'Time' 개체 (0,0)를 반환하는 것처럼 보입니다. – qxz