因此,我试图编写一个程序,告诉用户他们可以乘坐什么样的公共汽车来上课。我现在有一个问题:我希望让用户传递一个int来与int值的ArrayList进行比较,告诉他们是否可以捕获该总线。
但是,我想将输出转换为12小时字符串,但我无法找到一种有效的方法!到目前为止,这是我的代码。
package bus;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
public class busSchedule {
public static void main(String[]args){
int classTime = 0;
Scanner scnr = new Scanner(System.in);
System.out.print("What time do you have to be in class?: ");
classTime = scnr.nextInt();
for(int i = 0; i < AB.toCampus.size() - 1; ++i){
if(classTime > AB.toCampus.get(i)){
String timeString = Integer.toString(AB.toCampus.get(i));
DateFormat f2 = new SimpleDateFormat("h:mm aa");
String newTime = f2.format(timeString).toLowerCase();
System.out.println("You can take the " + AB.line + " line at " + newTime + " to get to class.");
}
}
}
}
我还有班级AB
,这是该行的名称。它如下:
package bus;
import java.util.ArrayList;
import java.util.Arrays;
public class AB {
static String line = "A-B";
static ArrayList<Integer> toCampus = new ArrayList<Integer>(
Arrays.asList(623, 1234, 1734, 2100)
);
}
就这样,输出只反复打印下午4点。
感谢任何帮助!
答案 0 :(得分:3)
您可以简单地将军事时间解析为时间等级,然后将其格式化为您想要的输出,例如......
ArrayList<Integer> toCampus = new ArrayList<>(
Arrays.asList(623, 1234, 1734, 2100)
);
for (int time : toCampus) {
String value = String.format("%04d", time);
LocalTime lt = LocalTime.parse(value, DateTimeFormatter.ofPattern("HHmm"));
System.out.println(DateTimeFormatter.ofPattern("hh:mm a").format(lt));
}
哪个输出
06:23 AM
12:34 PM
05:34 PM
09:00 PM
现在,由于您的数据实际已经排序,您可以使用Collections.binarySearch
查找匹配项,例如......
ArrayList<Integer> toCampus = new ArrayList<>(
Arrays.asList(623, 1234, 1734, 2100)
);
Scanner scnr = new Scanner(System.in);
System.out.print("What time do you have to be in class?: ");
int classTime = scnr.nextInt();
int index = Collections.binarySearch(toCampus, classTime);
System.out.println(index);
if (index < 0) {
index = Math.abs(index) - 1;
}
if (index > 0 && index <= toCampus.size()) {
int time = toCampus.get(index - 1);
String value = String.format("%04d", time);
LocalTime lt = LocalTime.parse(value, DateTimeFormatter.ofPattern("HHmm"));
System.out.println(DateTimeFormatter.ofPattern("hh:mm a").format(lt));
} else {
System.out.println("Go back to bed");
}
当Collections.binarySearch
无法找到匹配项时,它会返回&#34 ;-(插入点) - 1&#34; ,这会告诉我们哪个项目会已经出现了,如果它出现在List
。
这使我们能够做出关于列表中哪个值最合适的决定。
例如,如果我们输入630
,则binarySearch
将返回-2
,为偏移添加1
,这会给我们-1
,将其转换为为正数而1
。现在,1
处的元素显然是1234
,但如果我们采用前一个元素,它会返回623
!