Java题解—1014 福尔摩斯的约会 (20 分)
原题
代码
易错点
这道题本人完全就在找错上了,有些隐形条件不知道怎么看的。就看的别人正确的答案来对比的。
1、找分钟:
大写字母和小写字母都可以。只能第一个找到的相同字符为准。(我以为可以多个,还搞了一个相加总和,这样应该会超过60.是不对的)
2、找小时:
这个也要求是第几个字符。在找到周几后(用一个标志量来确定),再找到的第一个字符作为小时(用标志或break)。
3、格式化:分钟和小时都要格式化成两位数。(小时格式化的问题我找了半天)
4、索引越界:两个字符串大小不同,要先比较
学到的:
对char字符的ASCII对比
格式化可以自动补0
char数组和String类方便的索引操作
错误代码
package pat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[] day_hour1 = scanner.nextLine().toCharArray();
char[] day_hour2 = scanner.nextLine().toCharArray();
char[] minute1 = scanner.nextLine().toCharArray();
char[] minute2 = scanner.nextLine().toCharArray();
boolean flag=false;//用来判断找到周几后才能找小时
String[] week={"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
for (int i=0;i<Math.min(day_hour1.length,day_hour2.length);i++){
if (day_hour1[i]==day_hour2[i]){
//找星期几
if (day_hour1[i]>='A'&&day_hour1[i]<='G'&&!flag){
System.out.print(week[day_hour1[i] - 65]);
flag=true;
continue;//找到周几后,略过这次循环再往下查找
}
//找小时
if (flag){
if (day_hour1[i]>='0'&&day_hour1[i]<='9'){
System.out.print(" "+(day_hour1[i]-48)+":");
}
if (day_hour1[i]>='A'&&day_hour1[i]<='N'){
System.out.print(" "+(day_hour1[i]-65+10)+":");
}
}
}
}
//找分钟(大写也可以)
int sum=0;
for (int j=0;j<Math.min(minute1.length, minute2.length);j++){
if(minute1[j]==minute2[j]){
if ((minute1[j]>='A'&&minute1[j]<='Z')||(minute1[j]>='a'&&minute1[j]<='z'))
sum+=j;
}
}
if (sum<10){
System.out.print("0"+sum);
}else
System.out.print(sum);
}
}
修改后的
完全参照的这个博客长生的梦呓的题解
package pat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[] day_hour1 = scanner.nextLine().toCharArray();
char[] day_hour2 = scanner.nextLine().toCharArray();
char[] minute1 = scanner.nextLine().toCharArray();
char[] minute2 = scanner.nextLine().toCharArray();
boolean isFindWeek=false;//用来判断是否找到周几
boolean isFindHour=false;//用来判断是否找到小时
String[] week={"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
for (int i=0;i<Math.min(day_hour1.length,day_hour2.length);i++){
if (day_hour1[i]==day_hour2[i]){
//找星期几
if (day_hour1[i]>='A'&&day_hour1[i]<='G'&&!isFindWeek){
System.out.print(week[day_hour1[i] - 65]+" ");
isFindWeek=true;
continue;//找到周几后,略过这次循环再往下查找
}
//找小时
if (isFindWeek&&(!isFindHour)){
if (day_hour1[i]>='0'&&day_hour1[i]<='9'){
System.out.printf("%02d:",(day_hour1[i]-48));//注意:小时也要格式化成两位数
isFindHour=true;
}
if (day_hour1[i]>='A'&&day_hour1[i]<='N'){
System.out.print((day_hour1[i]-65+10)+":");
isFindHour=true;
}
}
}
}
//找分钟(大写也可以)
for (int j=0;j<Math.min(minute1.length, minute2.length);j++){
if(minute1[j]==minute2[j]) {
if ((minute1[j] >= 'A' && minute1[j] <= 'Z') || (minute1[j] >= 'a' && minute1[j] <= 'z')) {
System.out.printf("%02d",j);//强制两位数格式化输出
break;//只能有一个相同的字符
}
}
}
}
}