1

我被 liang Introduction to Java 书中的一个问题困住了——这就是问题所在:

“十六个硬币被放置在一个 4×4 矩阵中,一些面朝上,一些面朝下。您可以使用值为 0(正面)和 1(尾部)的 4×4 矩阵来表示硬币的状态。这里有些例子:

0000
0100
0000
0010

每个状态也可以使用二进制数(上述的串联)来表示。编写一个程序,提示用户输入一个介于 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');

这导致字符串0000000000000111

一旦你有了这个,你可以简单地将它复制到一个 4x4 int(或布尔)数组中。或者,您可以立即打印数据,

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.

这听起来像是一种非常复杂的说法:“将十进制转换为二进制并打印”:

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 回答