题目:
把手放在键盘上时,稍不注意就会往右错一位。这样的话,Q会变成W,J会变成K等。
电脑键盘如图所示:
输入一个错位后敲出的字符串,输出打字员本来想打出的句子。
样例输入:O S, GOMR YPFSU/
样例输出:I AM FINE TODAY.
【分析】根据题目的意思每个输入的字符,对应的输出都是它左边的字符。分析一下,键盘上的tab、backsp、control、alt、enter这几个键应该排除掉。一个很笨的解决办法就是用if或者switch方式,比如if(c == ';') System.out.print('L')这样子,用这种方式我们可以想象得出会写很多的判断代码。继续仔细思考一下,有没有更简约的办法呢,这个时候如果我们引入一种数据结构---数组,把键盘中的字符按照从左到右从上到下的顺序都存入到字符数组中,会不会为我们的程序带来简约的解决方式呢,如果有这样一个数组的话,不难想象,输出字符就是输入字符的位置向左移动一个位置的字符,那么我们程序也就能够简约起来了。
【java源码】
public class Test017 {
public static void main(String[] args) {
//在这里如果写成char数组的话,要写很多得单引号和逗号,写成字符串会比较简约
String s = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
sc.close();
StringBuilder ret = new StringBuilder();
for(int i=0; i<input.length(); i++){
char c = input.charAt(i);
int index = s.indexOf(c);
if(index == -1){
//如果没找到,比如空格,就直接输出空格
ret.append(c);
}else{
//如果找到了,就输出它左边的那个字符
ret.append(s.charAt(index-1));
}
}
System.out.println(ret);
}
}