程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj1002的java實現

poj1002的java實現

編輯:C++入門知識

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 Main {  
 
/**
* 以下方法主要完成以下功能:
* 如果是一個數字,則直接返回,如果只一個字符,則返回它對應的數字
* @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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved