2013-01-05 17 views
1

我正在创建一个程序,它将单个字符作为32到126的ASCII码之间的任意字符,并将结果作为二进制返回。这是一堆如果语句与.contains(“”)的。代码在返回单个字符时起作用,但当输入单词时,字符串以二进制重新字母顺序返回。因此,如果我输入名字劳伦它像这样出现在二进制文件:010011000110000101100101011011100111001001110101-Laenru(资本首先仍然)。字符串内的文本被提交并返回后重新排列

这里是我的所有代码:

Main.java

import java.util.Scanner; 

    public class Main { 

     public static Scanner input = new Scanner(System.in); 

     public static void main (String[] args) { 

       Letters l = new Letters(); 

       l.Letters(); 
     } 
    } 

Letters.java

公共类快报扩展主要{

@SuppressWarnings("null") 
public static void Letters() { 
     System.out.println("Enter your letter(s)"); 

     String givenLetters = input.next(); 

      if (givenLetters.contains("A")) 
       System.out.println("01000001"); 

      if (givenLetters.contains("B")) 
       System.out.println("01000010"); 

      if (givenLetters.contains("C")) 
       System.out.println("01000011"); 

      if (givenLetters.contains("D")) 
       System.out.println("01000100"); 

      if (givenLetters.contains("E")) 
       System.out.println("01000101"); 

      if (givenLetters.contains("F")) 
       System.out.println("01000110"); 

      if (givenLetters.contains("G")) 
       System.out.println("01000111"); 

      if (givenLetters.contains("H")) 
       System.out.println("01001000"); 

      if (givenLetters.contains("I")) 
       System.out.println("01001001"); 

      if (givenLetters.contains("J")) 
       System.out.println("01001010"); 

      if (givenLetters.contains("K")) 
       System.out.println("01001011"); 

      if (givenLetters.contains("L")) 
       System.out.println("01001100"); 

      if (givenLetters.contains("M")) 
       System.out.println("01001101"); 

      if (givenLetters.contains("N")) 
       System.out.println("01001110"); 

      if (givenLetters.contains("O")) 
       System.out.println("01001111"); 

      if (givenLetters.contains("P")) 
       System.out.println("01010000"); 

      if (givenLetters.contains("Q")) 
       System.out.println("01010001"); 

      if (givenLetters.contains("R")) 
       System.out.println("01010010"); 

      if (givenLetters.contains("S")) 
       System.out.println("01010011"); 

      if (givenLetters.contains("T")) 
       System.out.println("01010100"); 

      if (givenLetters.contains("U")) 
       System.out.println("01010101"); 

      if (givenLetters.contains("V")) 
       System.out.println("01010110"); 

      if (givenLetters.contains("W")) 
       System.out.println("01010111"); 

      if (givenLetters.contains("X")) 
       System.out.println("01011000"); 

      if (givenLetters.contains("Y")) 
       System.out.println("01011001"); 

      if (givenLetters.contains("Z")) 
       System.out.println("01011010"); 

      if (givenLetters.contains(" ")) 
       System.out.println("00100000"); 

      if (givenLetters.contains("a")) 
       System.out.println("01100001"); 

      if (givenLetters.contains("b")) 
       System.out.println("01100010"); 

      if (givenLetters.contains("c")) 
       System.out.println("01100011"); 

      if (givenLetters.contains("d")) 
       System.out.println("01100100"); 

      if (givenLetters.contains("e")) 
       System.out.println("01100101"); 

      if (givenLetters.contains("f")) 
       System.out.println("01100110"); 

      if (givenLetters.contains("g")) 
       System.out.println("01100111"); 

      if (givenLetters.contains("h")) 
       System.out.println("01101000"); 

      if (givenLetters.contains("i")) 
       System.out.println("01101001"); 

      if (givenLetters.contains("j")) 
       System.out.println("01101010"); 

      if (givenLetters.contains("k")) 
       System.out.println("01101011"); 

      if (givenLetters.contains("l")) 
       System.out.println("01101100"); 

      if (givenLetters.contains("m")) 
       System.out.println("01101101"); 

      if (givenLetters.contains("n")) 
       System.out.println("01101110"); 

      if (givenLetters.contains("o")) 
       System.out.println("01101111"); 

      if (givenLetters.contains("p")) 
       System.out.println("01110000"); 

      if (givenLetters.contains("q")) 
       System.out.println("01110001"); 

      if (givenLetters.contains("r")) 
       System.out.println("01110010"); 

      if (givenLetters.contains("s")) 
       System.out.println("01110011"); 

      if (givenLetters.contains("t")) 
       System.out.println("01110100"); 

      if (givenLetters.contains("u")) 
       System.out.println("01110101"); 

      if (givenLetters.contains("v")) 
       System.out.println("01110110"); 

      if (givenLetters.contains("w")) 
       System.out.println("01110111"); 

      if (givenLetters.contains("x")) 
       System.out.println("01111000"); 

      if (givenLetters.contains("y")) 
       System.out.println("01111001"); 

      if (givenLetters.contains("z")) 
       System.out.println("01111010"); 
     } 

} 

我希望字符串出来如果这意味着我必须添加代码以重新排列,则用户将输入它的方式相同这些字母或我需要修复我的错误代码中的某些内容。 感谢先进! :)

回答

2

尝试

String givenLetters = input.next(); 
    for(char c : givenLetters.toCharArray()) { 
     if (c == 'A') 
      System.out.println("01000001"); 
.... 

或更好地创造一个地图

static Map<Character, String> map = new HashMap<>(); 

    static { 
     map.put('A', "01000001"); 
     ... 
    } 

那么代码将

for(char c : givenLetters.toCharArray()) { 
     String s = map.get(c); 
     if (s != null) { 
      System.out.print(s); 
     } 
... 
+0

所以才来对于每个字符我都会使用这些代码行(无需输入)。下一个();当然,我会为每个字符使用一个不同的变量(不重复使用“c”),为什么你认为使用char而不是String是有用的。 对不起,我问了这么多问题,我只想清楚我在做什么,特别是因为我没有那么多人的一半好。 谢谢! – gymbry

+0

否。for循环将会用c的第一个字母替换c的值,然后使用c中的第二个字母重新运行循环,依此类推。 –

+0

@gymbry看到我的更新 –

0

两点意见:

1)遍历字符串中的字符...

for(int i=0; i<givenLetters.length(); i++) { 
    char c = givenLetters.charAt(i); 
    System.out.println(code[c]); 
} 

2)请与您的代码的数组,以避免if语句那个讨厌的

private static String code[255]; 

static { 
    code['A'] = "01000001"; 
    code['B'] = "01000010"; 

(等)

这让你在地方,巨大的,如果链条中使用System.out.println(code[c]) 。 如果你想从字面上把在同一行的二进制,print

1

您的问题取代printlngivenLetters.contains("X")返回true,如果子"X"发现任何地方字符串givenLetters英寸正如Evgeniy Dorofeev所建议的,您应该做的是逐个循环字符串中的字符。

当然,使用一个巨大的if语句列表(或者甚至是一个巨大的数组)是将字符转换为二进制的愚蠢方式。取而代之的是,你可以通过位做到这一点位(demo on ideone.com):

char[] bits = new char[8]; 
for (char c : givenLetters.toCharArray()) { 
    for (int i = 0; i < 8; i++) { 
     int bitmask = 1 << (7-i); 
     bits[i] = ((c & bitmask) == 0 ? '0' : '1'); 
    } 
    System.out.println(bits); 
} 

(请注意,Java的字符实际上是16位长,这个代码将只打印每一个的最低8位。)

相关问题