关于“ciberin”java,如何知道字符数组索引的排列而不重复字母
char alphabet[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
Scanner scanner = new Scanner(System.in);
String msg = scanner.nextLine();
char Array_of_msg[] = msg.toCharArray();
String key = scanner.nextLine();
char[] Array_of_key = key.toCharArray();
char[] SortedKey = key.toCharArray();
Arrays.sort(SortedKey);
char[] result_msg = new char[Array_of_msg.length];
int[] Array_of_indexKey = new int[Array_of_key.length];
int y = 0;
for (int i = 0; i < Array_of_key.length; i++) {
for (y = 0; y < SortedKey.length; y++) {
if (Array_of_key[i] == SortedKey[y] ) {
Array_of_indexKey[i] = y;
}
}
}
for (int aa = 0; aa < Array_of_indexKey.length; aa++) {
System.out.print(Array_of_indexKey[aa]);
}
这段代码处理的是字符串"Hani" -> "1032"
,但不处理像"gamal" -> "20413"
这样具有两倍字符“A”的名称
# 1 楼答案
您应该使用整数集来存储有效值。我的意思是:
在您的实现中,让我们看看输入为“gamal”时的情况。然后,排序后的数组是“aaglm”,内部循环找到了第一个“a”两次(第二次,这个内部for循环不知道它以前找到了这个“a”,所以我们应该用“validvalue”检查它)