華爲優招:電報中用點(.)表示1,用中劃線(-)表示0,序列中間用#號分隔;

字符 . 代表1,字符 - 代表 0。輸入類型“–.#。#-.-”的字符串,字符#是分隔符,可能會有連續的多個#。把形如“–.”的無符號二進制轉換成十進制數字後,有張圖表,根據這張圖表上的映射關係,輸出相應的英文字符(編程的時候要苦逼的把這張表手工輸入到map裏有沒有。。。)。如果輸入只是一連串的#,則輸出一個空字符串,如果轉換後的整數超出了圖

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			String input = sc.nextLine();
			String result= trans(input);
			System.out.println(result);
		}
		sc.close();
	}

	private static String trans(String input) {
		if(input ==null || input.length()==0)
			return "ERROR";
		
		char[] charArray = input.toCharArray();
		int count=0;
		for (int i = 0; i < charArray.length; i++) {
			if(charArray[i]=='#')
				count++;
			if(charArray[i]!='#' && charArray[i]!='.'&&charArray[i]!='-')
				return "ERROR";
		}
		String nothing ="";
		if(count == charArray.length)
			return nothing;
		
		
		StringBuilder sb = new StringBuilder();
		String[] split = input.split("#");
		for (int i = 0; i < split.length; i++) {
			if (split[i].equals("")||split[i].equals(" ")) {
				continue;
			}else{
				String back= binarytrans(split[i]);
				if(back.equals("ERROR"))
					return back;
				sb.append(back);
			}
		}
		return sb.toString();
	}

	private static String binarytrans(String str) {
		String[] myDictionary =new String[]{"F","G","R","S","T","L","M","N","O","P","Q",
				"W","X","Y","Z","U","A","G","H","I","J","K",
				"B","C","D","E","l","m","n","o","p","i","j","k","f","g","h",
				"a","b","c","d","e","q","r","w","x","y","z","s","t","u","v"};
		StringBuilder sb = new StringBuilder();
		char[] cs = str.toCharArray();
		for (int i = 0; i < cs.length; i++) {
			if(cs[i]=='.'){
				sb.append("1");
			}else if (cs[i]=='-') {
				sb.append("0");
			}
		}
		int num=Integer.valueOf(sb.toString(),2);
		if(num<0 || num>51)
			return "ERROR";
		if(num>=0 && num<=51)
		   return myDictionary[num];
		return "ERROR";
	}

}

表裏的0-51得範圍,則輸出“ERROR”
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章