题目点击上面链接
解题思路:
- 总觉得这道题题目有点歧义,我的理解如下
- 星期是找第一对相同的大写字母且在A-G之间;小时是在第一对相同的大写字母后继续找,而不是重头开始找;分钟是找第一对相同的英文字母
- 用string接收个字符串并调用toCharArray()方法,将其转换为字符数组
- 定义weekIndex()方法用于返回第一对相同大写字母所在索引index
- 利用index可以取出对应大写字母,再利用switch将字母转换为对应星期几
- 从index+1位置循环查找第二对相同的字符,如果字符为0-9则可以减'0'得到对应数字,若为A-N可以减'A'再加10可以得到小时
- 遍历后两个字符数组找到相同且为英文字母的位置返回索引即可(见代码)
- 注意打印格式,小时和分钟如果小于10,需要先打印一个“0”
代码如下:
package BasicLevel;
import java.util.Scanner;
public class HolmesDate {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
String str3 = sc.nextLine();
String str4 = sc.nextLine();
char[] arr1 = str1.toCharArray();
char[] arr2 = str2.toCharArray();
char[] arr3 = str3.toCharArray();
char[] arr4 = str4.toCharArray();
int weekindex = weekIndex(arr1, arr2);
String week = week(arr1[weekindex]);
int houre = houre(arr1, arr2, weekindex);
int minute = minute(arr3, arr4);
System.out.print(week + " ");
if(houre<10){
System.out.print("0" + houre + ":");
}else {
System.out.print(houre + ":");
}
if(minute<10){
System.out.print("0" + minute);
}else {
System.out.print(minute);
}
}
//返回第一对相同大写字母所在索引
public static int weekIndex(char[] arr1, char[] arr2){
int min = arr1.length < arr2.length ? arr1.length : arr2.length;
int index = -1;
for (int i = 0; i < min; i++) {
if(arr1[i] == arr2[i] && (arr1[i] >= 'A' && arr1[i] <= 'G')){
index = i;
break;
}
}
return index;
}
//将A-G返回为对应的星期
public static String week(char c) {
String str = null;
switch (c) {
case 'A':
str = "MON";
break;
case 'B':
str = "TUE";
break;
case 'C':
str = "WED";
break;
case 'D':
str = "THU";
break;
case 'E':
str = "FRI";
break;
case 'F':
str = "SAT";
break;
case 'G':
str = "SUN";
break;
}
return str;
}
//找到第二对相同字符,并返回对应小时
public static int houre(char[] arr1, char[] arr2, int index) {
int houre = -1;
int min = arr1.length < arr2.length ? arr1.length : arr2.length;
for(int i=index+1;i<min;i++) {
//如果字符相同且为0-9
if (arr1[i] == arr2[i] && (arr1[i] >= '0' && arr1[i] <= '9')) {
houre = arr1[i] - '0';
break;
}
//如果字符相同且为A-N
if (arr1[i] == arr2[i] && (arr1[i] >= 'A' && arr1[i] <= 'N')) {
houre = arr1[i] - 'A' + 10;
break;
}
}
return houre;
}
//找到第一对相同字母,并返回其索引作为分钟
public static int minute(char[] arr3, char[] arr4) {
int m = -1;
int min = arr3.length < arr4.length ? arr3.length : arr4.length;
for (int i = 0; i < min; i++) {
if (arr3[i] == arr4[i] && (arr3[i] >= 'a' && arr3[i] <= 'z')) {
m = i;
break;
}else if(arr3[i] == arr4[i] && (arr3[i] >= 'A' && arr3[i] <= 'Z')){
m = i;
break;
}
}
return m;
}
}

京公网安备 11010502036488号