POJ_1002_java

POJ_1002_java

算法描述略,针对某算法进行知识点复习。

算法出处:http://www.2cto.com/kf/201304/203331.html

java算法:

package test;
import java.io.BufferedInputStream;  
import java.io.DataInputStream;  
import java.io.IOException;  
import java.util.Iterator;  
import java.util.Map;  
import java.util.Scanner;  
import java.util.Set;  
import java.util.TreeMap;  
public class POJ_1002 {	
	/**
	* 以下方法主要完成以下功能:
	* 如果是一个数字,则直接返回,如果只一个字符,则返回它对应的数字
	* @param c
	* @return
	*/
	       
	public static char getNum(char c) {  
	    //如果这个字符是一个数字,则直接返回
	    if (Character.isDigit(c)) {  
	            return c;  
	        }  
	   
	    //如果这个字符是A或B或C,则返回2.以下规则类似
	        if (c == 'A' || c == 'B' || c == 'C') {  
	            return '2';  
	        }  
	        if (c == 'D' || c == 'E' || c == 'F') {  
	            return '3';  
	        }  
	        if (c == 'G' || c == 'H' || c == 'I') {  
	            return '4';  
	        }  
	        if (c == 'J' || c == 'K' || c == 'L') {  
	            return '5';  
	        }  
	        if (c == 'M' || c == 'N' || c == 'O') {  
	            return '6';  
	        }  
	        if (c == 'P' || c == 'R' || c == 'S') {  
	            return '7';  
	        }  
	        if (c == 'T' || c == 'U' || c == 'V') {  
	            return '8';  
	        }  
	        if (c == 'W' || c == 'X' || c == 'Y') {  
	            return '9';  
	        }  
	        return '#';  
	    }  
	 
	    public static void main(String[] args) throws IOException {  
	       
	    //DataInputStream(InputStream in).使用指定的底层 InputStream 创建一个 DataInputStream。
	    DataInputStream scan = new DataInputStream(new BufferedInputStream(System.in));  
	       
	    //TreeMap() .使用键的自然顺序构造一个新的、空的树映射。
	    Map< String, Integer> tm = new TreeMap(); 
	   
	        int n = Integer.parseInt(scan.readLine().trim());
	        for (int i = 0; i < n; i++){  
	       
	        //将输入号码中的"-"去掉
	            String s = scan.readLine().replace("-", "");
	           
	            StringBuilder sb = new StringBuilder();  
	            for (int k = 0; k < s.length(); k++) {  
	               
	            //得到的c可能是数字、#
	            char c = getNum(s.charAt(k));  
	               
	                //isDigit(char ch).确定指定字符是否为数字。
	                /**
	                 * if语句的主要逻辑是:
	                 * 如果c是数字,则将他加入到标准号码串中
	                 */
	            if (Character.isDigit(c)) {  
	                    sb.append(c);  
	                }  
	            }  
	           
	            //将字符串转换成标准形式的号码
	            String result = sb.toString().substring(0, 3) + '-' + sb.toString().substring(3);  
	           
	            //containsValue(Object value) . 如果此映射为指定值映射一个或多个键,则返回 true。
	            /**
	             * if···else主要完成以下逻辑
	             * 1)判断TreeMap里面是否应含有这个号码,如果有,则将其对应的次数+1.
	             * 2)如果没有,则将该号码的次数设置为1
	             */
	            if (tm.containsKey(result)) {  
	               
	            //get(Object key) .返回指定键所映射的值
	            //,如果对于该键而言,此映射不包含任何映射关系,则返回 null。
	            int count = tm.get(result) + 1;  
	                tm.put(result, count);  
	            } else {  
	            //TreeMap中还没有该号码,将该号码的次数设置为1
	                tm.put(result, 1);  
	            }  
	        }  
	       
	        //keySet().返回此映射包含的key的 Set 视图。
	        Set se = tm.keySet();  
	        Iterator it = se.iterator();  
	        boolean flag = false;  
	        while (it.hasNext()) {  
	            String s = it.next().toString();  
	            int count = tm.get(s);  
	           
	            /**
	             * 以下if语句主要完成以下功能:
	             * 如果出现次数大于1,则将号码及它的出现次数打印出来
	             */
	            if (count > 1) {  
	                flag = true;  
	                System.out.println(s + " " + count);  
	            }  
	        }
	       
	        //如果所有标准形式的号码都没有重复的
	        //则输出No duplicates.
	        if (!flag) {  
	            System.out.println("No duplicates. ");  
	        }  
	    }  
	}  



@@知识点讲解:

(1)

Character 类用于对单个字符进行操作。Character 类在对象中包装一个基本类型 char 的值,

然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情况。为了解决这个问题,Java语言为内置数据类型char提供了包装类Character类。Character类提供了一系列方法来操纵字符。你可以使用Character的构造方法创建一个Character类对象,例:Character ch = new Character('a');

常用方法:isDigit--是否是一个数字字符;isLetter()--是否是一个字母;

(2) 此中用到了很多Map,Set,Iterator等知识,这些数据结构是很重要的一部分,特单独开博讲。

(3)等我把以上部分完全理解后,在回来对算法进行强力解析。


isLetter()
是否是一个字母
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值