1

私は、liang の Java 入門書の問題からかなり行き詰まっています。問題は次のとおりです。

「16 枚のコインが 4 行 4 列の行列に配置され、表向きのものと下向きのものがあります。値 0 (表) と値 1 (裏) を持つ 4 行 4 列の行列を使用して、コインの状態を表すことができます。ここではいくつかの例を示します。

0000
0100
0000
0010

各状態は、2 進数 (上記の連結) を使用して表すこともできます。ユーザーに 0 から 65,536 までの数値を入力するように促し、対応する行列を表示するプログラムを作成します。値が 7 の場合は 00000111 になります。

私の質問は、これが 7 の場合であることをどのように確認しますか? そのようなメソッドのプロトタイピングを開始する方法もわかりません-おそらく int x = (int)Math.rand(1) で、各行/列に割り当てますか?

おそらく、誰かがどこから始めるべきかについてのヒントを教えてくれるでしょうか?

4

2 に答える 2

1

問題は基本的に、範囲[0, 65536]の整数をそのバイナリ表現に変換することです。これは で行うことができますInteger.toBinaryString。例えば、

Integer.toBinaryString(7);

文字列になります111。ここで、文字列の全長を160にしたいので、 を得るために左側に sをパディングする必要があり0000000000000111ます。次のようなことができます。

String.format("%16s", Integer.toBinaryString(7)).replace(' ', '0');

結果は string になります0000000000000111

これを取得したら、単純に 4x4 int (または boolean) 配列にコピーできます。または、すぐにデータを印刷することもできます。

String bin = String.format("%16s", Integer.toBinaryString(7)).replace(' ', '0');

for (int i = 0 ; i < 4 ; i++)
    System.out.println(bin.substring(4 * i, 4 * (i + 1)));

出力:

0000   
0000  
0000  
0111

もちろん、それを7ユーザーから読み取った整数に置き換えることができますが、考え方は同じです。

于 2012-10-30T18:16:35.100 に答える
0

質問に答えるために書くことになっている実際のプログラムは次のとおりです。Write a program that prompts the user to enter a number between 0 and 65,536 and displays the corresponding matrix - a value of 7 would give 00000111.

これは、「10 進数を 2 進数に変換して出力する」という非常に複雑な言い方のように聞こえます。

import java.lang.*;
import java.io.*;

...
public static void printBinaryRepOfDecimal() throws IOException {
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter a number between 0 and 65,536:");
    String hex = bf.readLine();
    int i = Integer.parseInt(hex);  
    String by = Integer.toBinaryString(i);
    for (int i = 0; i < (16 - by.length); i++) {
        System.out.print("0");
    }
    System.out.println(by);
} 

これにより、必要な 16 ビットのバイナリが出力されます。または、サンプル コードを変換して、必要に応じて文字列を操作します。

于 2012-10-30T18:18:13.513 に答える