不废话,开冲
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;
}
}
我完事了
就输入一小段算的时间还挺长的
暂时这样有时间再优化
谁能想到我是为了游戏彩蛋搞的这东西呢