首先題目以下:算法
/** * * 假設淵子原來一個BBS上的密碼爲zvbo9441987,爲了方便記憶,他經過一種算法把這個密碼變換成YUANzhi1987, * 這個密碼是他的名字和出生年份,怎麼忘都忘不了,並且能夠明目張膽地放在顯眼的地方而不被別人知道真正的密碼。 * * 他是這麼變換的,你們都知道手機上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, * tuv--8 wxyz--9, 0--0,就這麼簡單,淵子把密碼中出現的小寫字母都變成對應的數字,數字和其餘的符號都不作變換, * * 聲明:密碼中沒有空格,而密碼中出現的大寫字母則變成小寫以後日後移一位,如:X,先變成小寫,再日後移一位,不就是y了嘛,簡單吧。記住,z日後移是a哦。 * @author L_Sivan */
先來分析下題目,首先必需要區分大小寫和數字了,區分的話,上一篇博客已經提到了,剩下的就是大寫轉變爲小寫,小寫變數字,其實就是這麼簡單。下面是代碼:spa
1 public class KillPassword { 2 3 public static void main(String[] args){ 4 Scanner sc = new Scanner(System.in); 5 String password = sc.nextLine(); 6 char[] charArray = password.toCharArray(); 7 char[] newPasswordArray = new char[charArray.length]; 8 for(int i = 0;i<charArray.length;i++){ 9 int num = judgeType(charArray[i]); 10 if(num == 1){ 11 char c = big2Small(charArray[i]); 12 newPasswordArray[i] = c; 13 }else if(num == 0){ 14 char c = small2Num(charArray[i]); 15 newPasswordArray[i] = c; 16 }else{ 17 newPasswordArray[i] = charArray[i]; 18 } 19 } 20 System.out.println(newPasswordArray); 21 } 22 23 public static int judgeType(char c){ 24 25 if(c >= 'A' && c <= 'Z'){ 26 return 1; 27 }else if(c >= 'a' && c<= 'z'){ 28 return 0; 29 }else{ 30 return 10; 31 } 32 } 33 34 public static char small2Num(char c){ 35 switch(c){ 36 case 'a': 37 case 'b': 38 case 'c': 39 return '2'; 40 case 'd': 41 case 'e': 42 case 'f': 43 return '3'; 44 case 'g': 45 case 'h': 46 case 'i': 47 return '4'; 48 case 'j': 49 case 'k': 50 case 'l': 51 return '5'; 52 case 'm': 53 case 'n': 54 case 'o': 55 return '6'; 56 case 'p': 57 case 'q': 58 case 'r': 59 case 's': 60 return '7'; 61 case 't': 62 case 'u': 63 case 'v': 64 return '8'; 65 case 'w': 66 case 'x': 67 case 'y': 68 case 'z': 69 return '9'; 70 default: 71 return '0'; 72 } 73 } 74 public static char big2Small(char c){ 75 char[] small = { 76 'a','b','c','d','e','f','g','h', 77 'i','j','k','l','m','n','o','p', 78 'q','r','s','t','u','v','w','x', 79 'y','z' 80 }; 81 char[] big = { 82 'A','B','C','D','E','F','G','H', 83 'I','J','K','L','M','N','O','P', 84 'Q','R','S','T','U','V','W','X', 85 'Y','Z' 86 }; 87 for(int i = 0;i<big.length;i++) 88 if(c == big[i]){ 89 if(c == 'Z') 90 return 'a'; 91 else 92 return small[i + 1]; 93 } 94 return '0'; 95 } 96 }