1

ASCII コード 32 ~ 126 の間の任意の文字を 1 つ取り、結果をバイナリとして返すプログラムを作成しています。これは、.contains("") を含む一連のifステートメントです。このコードは単一の文字を返すときに機能しますが、単語を入力すると、文字列はアルファベットを付け直したバイナリで返されます。したがって、Lauren という名前を入力すると、次のようにバイナリで表示されます。

ここにすべての私のコードがあります:

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();
         }
    }

文字.java

public class Letters extends Main {

@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");
        }

 }

文字を再配置するコードを追加する必要がある場合、またはバグのあるコードで何かを修正する必要がある場合は、ユーザーが入力したのと同じ方法で文字列を出力したいと考えています。ありがとうございます!:)

4

3 に答える 3

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);
       }
 ...
于 2013-01-05T06:19:26.183 に答える
1

問題は、部分文字列がstring 内のどこgivenLetters.contains("X")かにある場合に true を返すことです。Evgeniy Dorofeev が示唆するように、代わりに行うべきことは、文字列内の文字を 1 つずつループすることです。"X"givenLetters

もちろん、ifステートメントの巨大なリスト (または巨大な配列) を使用することは、文字をバイナリに変換する愚かな方法です。代わりに、少しずつ行うことができます ( 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 char は実際には 16 ビット長であることに注意してください。このコードでは、それぞれの下位 8 ビットのみが出力されます。)

于 2013-01-05T07:07:41.780 に答える
0

2つのコメント:

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])がその巨大なifチェーンの代わりに使うことを可能にします。文字通りバイナリを同じ行に配置したい場合は、次のように置き換えprintlnますprint

于 2013-01-05T06:51:40.833 に答える