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

------- <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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值