------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
在做黑马基础测试时,我遇到一道一对一映射问题,当时我只能想到用Map集合,但做完后我发现这样做很麻烦。因此这几天我一直在思考有没有更简单的方法解决此类问题,今天我找到了一个更好的方法查表法,以下是对此类问题的总结,由于能力有限,有错误或不完善的地方或更好的方法,还请不吝赐教,谢谢!
一问题描述:
从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
二解决方案:
1:查表法。
2:Map集合。
三思路:
1:构造一张阿拉伯数字-中文数字转换表。
2:键盘输入一个数字,将数字转换为字符串数组 。
3:查表,根据表格输出对应中文形式。
四实现代码:
1:查表法
package com.itheima;
import java.util.Scanner;
/*
* 思路:
* 1:根基查表法,构造一张阿拉伯数字-中文数字转换表
* 2:键盘输入一个数字,根据要求, 将数字转换为字符串数组
* 3:先将字符串装换为整数,在查表,根据表格输出对应中文形式
*/
public class Test1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//查表法构造表格
String[] table = {"零","一","二","三","四","五","六","七","八","九"};
System.out.println("从键盘上输入一个数字");
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
int x = input.nextInt();
String[] str_arr =toStringArray(x);
System.out.print(x+"所对应的中文数字:" );
for(int i = 0; i < str_arr.length; i++){
System.out.print(table[Integer.parseInt(str_arr[i])]);//将字符串转化为整数
}
}
/**
* @param x
* 把一个整数各位转化为一个字符串数组
*/
public static String[] toStringArray(int x) {
Integer i = x;
String str = i.toString();
char[] ch_arr = str.toCharArray();
String[] str_arr = new String[str.length()];
for(int j= 0; j <str.length(); j++){
str_arr[j] = String.valueOf(ch_arr[j]);
}
return str_arr;
}
}
2:Map集合:
/**
* 思路:
* 1:构造一张阿拉伯数字-中文数字转换表
* 根据Map集合泛型特点,先构造一张字符串形式的阿拉伯数字-字符串形式中文数字表格
* 2:键盘输入一个数字,根据构造表特点, 将数字转换为字符串数组
* 3:查表,根据表格输出对应中文形式
*
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
System.out.println("从键盘上输入一个数字");
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
int x = input.nextInt();
map = hashtable();
String[] str_arr =toStringArray(x);
System.out.print(x+"所对应的中文数字:" );
searchHashTable(map, str_arr);
}
/**
* @param map
* 根据表格,查询数字对应的中文,并输出
*/
public static void searchHashTable(HashMap<String, String> map,String[] str_arr) {
for(int i = 0; i <str_arr.length; i++){
System.out.print(map.get(str_arr[i]));
}
}
/**
* @param x
* 把一个整数各位转化为一个字符串数组
*/
public static String[] toStringArray(int x) {
Integer i = x;
String str = i.toString();
char[] ch_arr = str.toCharArray();
String[] str_arr = new String[str.length()];
for(int j= 0; j <str.length(); j++){
str_arr[j] = String.valueOf(ch_arr[j]);
}
return str_arr;
}
/*
* 用于构造一张表,完成数字的中文表示格式的映射
*/
private static HashMap<String, String> hashtable() {
HashMap<String, String> map = new HashMap<String, String>();
map.put("0", "零");
map.put("1", "一");
map.put("2", "二");
map.put("3", "三");
map.put("4", "四");
map.put("5", "五");
map.put("6", "六");
map.put("7", "七");
map.put("8", "八");
map.put("9", "九");
return map;
}
}
五总结:
以上述代码看,查表法解决的效率更高,但查表法只能解决键值可以转化为从零开始依次递增整数的情况。Map集合相对效率低,但适用范围广。