无断点摩尔斯码转译的java代码(结果还挺多的,没有筛选)

不废话,开冲

package mosi.main;

import java.lang.Character.Subset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Calcu {
	public static void main(String[] args) {
		Map<String,String> map=new HashMap();
		 map.put("A", ".-");
	     map.put("B", "-...");
	     map.put("C", "-.-.");
	     map.put("D", "-..");
	     map.put("E", ".");
	     map.put("F", "..-.");
	     map.put("G", "--.");
	     map.put("H", "....");
	     map.put("I", "..");
	     map.put("J", ".---");
	     map.put("K", "-.-");
	     map.put("L", ".-..");
	     map.put("M", "--");
	     map.put("N", "-.");
	     map.put("O", "---");
	     map.put("P", ".--.");
	     map.put("Q", "--.-");
	     map.put("R", ".-.");
	     map.put("S", "...");
	     map.put("T", "-");
	     map.put("U", "..-");
	     map.put("V", "...-");
	     map.put("W", ".--");
	     map.put("X", "-..-");
	     map.put("Y", "-.--");
	     map.put("Z", "--..");
/*	     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", "----.");
	     map.put("0", "-----");
	     map.put("?", "..--..");
	     map.put("/", "-..-.");
	     map.put("-", "-...-");
	     map.put(".", ".-.-.-");
	     map.put("()", "-.--.-");*/
	     
	     //输入的摩斯码
	     String a="----...-.--....";
	    
	     
	    Map<String, String> charsMap=new HashMap<String, String>();
	    charsMap.put("char","");
	    charsMap.put("nogo",a);
	    List<Map<String, String>> result = nextChar(map,charsMap);
	    List<Map<String, String>> tmplresult = new ArrayList<Map<String,String>>();
	     
	    while (hasNogo(result)) {
		tmplresult.addAll(result);
	    result.removeAll(result);
	    for (int i = 0; i < tmplresult.size(); i++) {
			Map temp=tmplresult.get(i);
			result.addAll(nextChar(map,temp));
		}
	    
		tmplresult.removeAll(tmplresult);
	}
	    for (int i = 0; i < result.size(); i++) {
 			Map temp=result.get(i);
 			System.out.println(temp.get("char"));
 		}
	    System.out.println(result.size());
	
	}
//根据value 获取 map的key
	public static String getKey(Map<String, String> map,String value){
        String key = null;
        //Map,HashMap并没有实现Iteratable接口.不能用于增强for循环.
        for(String getKey: map.keySet()){
            if(map.get(getKey).equals(value)){
                key = getKey;
            }
        }
        return key;
        //这个key肯定是最后一个满足该条件的key.
    }
	
	//获取下一个char和获取完char所剩的电码
	public static List<Map<String,String>> nextChar(Map<String, String> paraMap,Map<String, String> charsMap){
		String mono;
		String a=charsMap.get("nogo");
		List result=new ArrayList<Map<String, String>>();
		if (a.length()>0) {
			String chars=charsMap.get("char");
			String b;
			 Set set2 = paraMap.entrySet();
		     for(Iterator iter = set2.iterator();iter.hasNext();){
		    	 Map.Entry entry = (Map.Entry)iter.next();
		    	 mono=(String) entry.getValue();
		    	 if (a.length()>=mono.length()) {
		    		 if (a.substring(0,mono.length()).equals(mono)) {
			    		 Map<String, String> map=new HashMap<String, String>();
			    		 b=a.substring(mono.length());
				    	 map.put("char",(chars+getKey(paraMap, mono)));
				    	 map.put("nogo",b);
				    	 result.add(map);
					}
				}
			    	 
		     }
		}else{
			result.add(charsMap);
		}
		return result;
	     
		
	}
	
	//判断是否仍有电码未解读成char
	public static Boolean hasNogo(List<Map<String, String>> result){
		String s;
		Map<String, String> m=new HashMap<String, String>();
		for(Iterator<Map<String, String>> it=result.iterator();it.hasNext();)
        {
			m=it.next();
			s=m.get("nogo");
			/*System.out.println(s+"now s");
			System.out.println(m.get("char")+"nowchar");*/
			if (s.length()>0) {
				
				/*System.out.println("return ture");*/
				return true;
			}
        }
			return false;
	}


}


我完事了
就输入一小段算的时间还挺长的
暂时这样有时间再优化
谁能想到我是为了游戏彩蛋搞的这东西呢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值