题目要求
题目分析
题目输入一个手机号码,手机号码是11位数,用字符串表示。
程序读入了一个字符串,利用循环遍历每一个字符,然后利用set集合的性质,自动去除重复的元素;
保存在集合当中的元素复制到数组当中,然后利用数组的自动排序功能实现降序排序。
读到的字符减去一个字符零,然后就是字符表示的数字本身。
遍历原本电话号码的元素保存在一个新的数组当中,用嵌套循环,遍历这个数组的同时再遍历保存字母的数组,匹配一个,保存一个下标。
示例代码
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class L1_027 {
public static void main(String[] args) {
//以字符串的形式读入电话号码
Scanner sc = new Scanner(System.in);
String phoneNumber = sc.nextLine();
sc.close();
//定义一个集合类,用来存储电话号码中新出现的字符,用集合自动去重
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < 11; i++) {
//存储的时候,减去一个字符零,这样再转换成 int 的时候就是数字本身
set.add(phoneNumber.charAt(i) - '0');
}
//迭代器,用来遍历集合
Iterator<Integer> it = set.iterator();
//数组,数组大小是集合的大小
int[] arr = new int[set.size()];
int i = 0;
while(it.hasNext()) {
//遍历集合,将元素赋值到数组当中
arr[i] = it.next();
i++;
}
//利用数组的性质实现自动排序
Arrays.sort(arr);
int[] arr_to = new int[arr.length];
//输出数组
System.out.print("int[] arr = new int[]{");
for(int k = arr.length - 1; k >= 0; k--) {
//新数组保存数字元素
arr_to[Math.abs((k - arr.length + 1))] = arr[k];
if(k == 0) {
System.out.print(arr[k] + "};");
}else {
System.out.print(arr[k] + ",");
}
}
System.out.println();
System.out.print("int[] index = new int[]{");
for(int m = 0; m < 11; m++) {
for(int index = 0; index < arr.length; index++) {
//找到手机号码中的数字的下标
if((phoneNumber.charAt(m) - '0') == arr_to[index]) {
if(m == 10) {
System.out.print(index + "};");
}else {
System.out.print(index + ",");
}
}
}
}
}
}