데이터에 대해 RandomAccess를 구현하는 ArrayList를 만듭니다. 시간 : 분 객체에 Comparator를 구현합니다. 이 목록에 배열을 넣어 처리하고 정렬합니다.
정상적인 방법으로 현재 시간부터 시간과 분을 가져옵니다.
Collections.binarySearch()를 실행하여 일치하거나 다음 줄에있는 목록 항목의 색인을 가져 와서 반환하십시오 (binarySearch의 기본 동작).
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.RandomAccess;
public class scratchpad {
public static void main(String [] args){
String[] hourMinuteStringArray = {"6:58","7:41","8:08","8:28","8:48","9:08","9:43","10:13","10:43","11:13","11:43","12:09","12:29","12:49","13:09","13:29","13:49","14:09","14:29","14:49","15:09","15:29","15:49","16:09","16:29","16:49","17:09","17:29","17:49","18:29","19:09","19:47","20:27","21:07","21:47","22:27"};
HourMinuteList hourMinuteList = convertHMStringArrayToHMArray(hourMinuteStringArray);
Collections.sort(hourMinuteList);
Calendar calendar = new GregorianCalendar();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
scratchpad s = new scratchpad();
HourMinute now = s.new HourMinute(hour,minute);
System.out.println("Now is " + hour + ":" + minute);
int nearestTimeIndex = Collections.binarySearch(hourMinuteList, now);
if(nearestTimeIndex < 0){
nearestTimeIndex = nearestTimeIndex * -1 -1;
}
System.out.println("Next time is " + ((HourMinute) hourMinuteList.get(nearestTimeIndex)).getHour() + ":" + ((HourMinute) hourMinuteList.get(nearestTimeIndex)).getMinuteString());
}
private static HourMinuteList convertHMStringArrayToHMArray(String[] times){
scratchpad s = new scratchpad();
HourMinuteList list = s.new HourMinuteList();
for(String time : times){
String[] splitTime = time.split(":");
int hour = Integer.parseInt(splitTime[0]);
int minute = Integer.parseInt(splitTime[1]);
HourMinute hm = s.new HourMinute(hour,minute);
list.add(hm);
}
return list;
}
class HourMinuteList extends ArrayList implements RandomAccess{
}
class HourMinute implements Comparable {
int hour;
int minute;
public HourMinute(int hour, int minute) {
setHour(hour);
setMinute(minute);
}
int getMinute() {
return this.minute;
}
String getMinuteString(){
if(this.minute < 10){
return "0" + this.minute;
}else{
return "" + this.minute;
}
}
int getHour() {
return this.hour;
}
void setHour(int hour) {
this.hour = hour;
}
void setMinute(int minute) {
this.minute = minute;
}
@Override
public int compareTo(Object aThat) {
if (aThat instanceof HourMinute) {
HourMinute that = (HourMinute) aThat;
if (this.getHour() == that.getHour()) {
if (this.getMinute() > that.getMinute()) {
return 1;
} else if (this.getMinute() < that.getMinute()) {
return -1;
} else {
return 0;
}
} else if (this.getHour() > that.getHour()) {
return 1;
} else if (this.getHour() < that.getHour()) {
return -1;
} else {
return 0;
}
}
return 0;
}
}
} 코드에 대한
감사합니다. 나는 확실히 그것을 알아낼 수 있었지만 당신은 나에게 약간의 시간을 절약했다. 나는 약간의 변화를 만들어야 만했지만 당신이 제안한 것은 그 자리에있었습니다. 감사! – tgai