黑马程序员+Java一对一映射问题的探索

来源:互联网 发布:二分搜索算法流程图 编辑:程序博客网 时间:2024/06/05 18:34

------- <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集合相对效率低,但适用范围广。







0 0