【发布时间】:2014-10-17 12:24:08
【问题描述】:
我正在尝试制作一个可以将英语转换为我的自定义二进制文件的翻译器,反之亦然。它可以将英语翻译成二进制,但不能将二进制翻译成英语。有人可以帮助我并告诉我我做错了什么吗?
我想输入诸如“01000 00101 01100 01100 01111”之类的内容并得到“HELLO”作为输出。现在程序只允许我一次输入一个字符。例如,我输入“01000”,我得到 h。但是当我输入像“01000 00101”这样的东西时,我得到了同样的东西。我想知道如何解决这个问题。
代码如下:
import java.util.Scanner;
public class Translator
{
public static void main ( String [] args )
{
Scanner input = new Scanner( System.in );
System.out.print( "Would you like to convert English to Binary (yes or no)? " );
String answer = input.nextLine();
if( answer.equals( "yes" ) )
{
System.out.println( "Enter English text here: " );
String english = input.nextLine();
System.out.println( stringToBinary( english ) );
}
if (answer.equalsIgnoreCase( "no" ) )
{
System.out.print( "Binary to English? " );
String answer2 = input.nextLine();
if (answer2.equalsIgnoreCase( "yes" ) )
{
System.out.println( "Enter Binary text here: " );
// enter binary here
String code = input.nextLine();
System.out.println( stringToEnglish( code ) );
}
}
}
public static String encode (String toEncode)
{
String binary = toEncode;
if (toEncode.equalsIgnoreCase("a"))
binary = "00001";
if (toEncode.equalsIgnoreCase("b"))
binary = "00010";
if (toEncode.equalsIgnoreCase("c"))
binary = "00011";
if (toEncode.equalsIgnoreCase("d"))
binary = "00100";
if (toEncode.equalsIgnoreCase("e"))
binary = "00101";
if (toEncode.equalsIgnoreCase("f"))
binary = "00110";
if (toEncode.equalsIgnoreCase("g"))
binary = "00111";
if (toEncode.equalsIgnoreCase("h"))
binary = "01000";
if (toEncode.equalsIgnoreCase("i"))
binary = "01001";
if (toEncode.equalsIgnoreCase("j"))
binary = "01010";
if (toEncode.equalsIgnoreCase("k"))
binary = "01011";
if (toEncode.equalsIgnoreCase("l"))
binary = "01100";
if (toEncode.equalsIgnoreCase("m"))
binary = "01101";
if (toEncode.equalsIgnoreCase("n"))
binary = "01110";
if (toEncode.equalsIgnoreCase("o"))
binary = "01111";
if (toEncode.equalsIgnoreCase("p"))
binary = "10000";
if (toEncode.equalsIgnoreCase("q"))
binary = "10001";
if (toEncode.equalsIgnoreCase("r"))
binary = "10010";
if (toEncode.equalsIgnoreCase("s"))
binary = "10011";
if (toEncode.equalsIgnoreCase("t"))
binary = "10100";
if (toEncode.equalsIgnoreCase("u"))
binary = "10101";
if (toEncode.equalsIgnoreCase("v"))
binary = "10110";
if (toEncode.equalsIgnoreCase("w"))
binary = "10111";
if (toEncode.equalsIgnoreCase("x"))
binary = "11000";
if (toEncode.equalsIgnoreCase("y"))
binary = "11001";
if (toEncode.equalsIgnoreCase("z"))
binary = "11010";
if (toEncode.equalsIgnoreCase(""))
binary = " ";
return binary;
}
public static String stringToBinary( String text )
{
String newText = "";
String selectedChar;
String convertedChar;
for (int i = 0; i < text.length(); i++)
{
selectedChar = text.charAt(i) + "";
convertedChar = encode(selectedChar);
if (convertedChar.equals(" "))
{
newText = newText + " ";
}
else
{
newText = newText + convertedChar;
if (!convertedChar.equals(" "))
{
newText = newText + " ";
}
}
}
return newText;
}
public static String stringToEnglish( String text )
{
String english = text;
if (text.equalsIgnoreCase("00001"))
english = "a";
if (text.equalsIgnoreCase("00010"))
english = "b";
if (text.equalsIgnoreCase("00011"))
english = "c";
if (text.equalsIgnoreCase("00100"))
english = "d";
if (text.equalsIgnoreCase("00101"))
english = "e";
if (text.equalsIgnoreCase("00110"))
english = "f";
if (text.equalsIgnoreCase("00111"))
english = "g";
if (text.equalsIgnoreCase("01000"))
english = "h";
if (text.equalsIgnoreCase("01001"))
english = "i";
if (text.equalsIgnoreCase("01010"))
english = "j";
if (text.equalsIgnoreCase("01011"))
english = "k";
if (text.equalsIgnoreCase("01100"))
english = "l";
if (text.equalsIgnoreCase("01101"))
english = "m";
if (text.equalsIgnoreCase("01110"))
english = "n";
if (text.equalsIgnoreCase("01111"))
english = "o";
if (text.equalsIgnoreCase("10000"))
english = "p";
if (text.equalsIgnoreCase("10001"))
english = "q";
if (text.equalsIgnoreCase("10010"))
english = "r";
if (text.equalsIgnoreCase("10011"))
english = "s";
if (text.equalsIgnoreCase("10100"))
english = "t";
if (text.equalsIgnoreCase("10101"))
english = "u";
if (text.equalsIgnoreCase("10110"))
english = "v";
if (text.equalsIgnoreCase("10111"))
english = "w";
if (text.equalsIgnoreCase("11000"))
english = "x";
if (text.equalsIgnoreCase("11001"))
english = "y";
if (text.equalsIgnoreCase("11010"))
english = "z";
if (text.equalsIgnoreCase(" "))
english = " ";
return english ;
}
}
【问题讨论】:
-
如果反对的选民能说明原因,那肯定会有所帮助。至于您的问题,我们需要知道您期望的输出是什么,然后才能说出它为什么不起作用
-
使用调试器一步步运行你的代码,你就会发现哪里出了问题。
-
不是一个完整的答案,所以这是一个评论,但这应该帮助 -
StringBuilder和一个循环。 -
@jdphenix 你建议我在哪里插入?我才刚刚开始。
-
stringToEnglish()方法的结构应该类似于stringToBinary()方法 - 在stringToBinary()中,您将每个字符转换为您的表示形式 - 现在在stringToEnglish()中进行逆向处理