我对这本关于Java书的介绍中的一个问题感到困惑 - 这就是问题所在:
“16个硬币被放置在一个4乘4的矩阵中,其中一些面朝上,一些面朝下。你可以使用一个4乘4的矩阵表示硬币的状态,值为0(头部)和1(以下是一些例子:
0000
0100
0000
0010
每个状态也可以使用二进制数(上面的串联)来重复。编写一个程序,提示用户输入0到65,536之间的数字,并显示相应的矩阵 - 7的标题将给00000111。
我的问题是你如何验证7的情况?我甚至不确定如何开始这样的方法原型 - 也许int x =(int)Math.rand(1)并分配给每个行/列?
也许有人可以给我一些关于从哪里开始的提示?
答案 0 :(得分:1)
问题实际上是将 [0,65536] 范围内的整数转换为二进制表示。这可以使用Integer.toBinaryString
完成。例如,
Integer.toBinaryString(7);
会产生字符串111
。现在,我们希望字符串的总长度 16 ,因此我们需要在左侧填充0
s以获取0000000000000111
。我们可以这样做:
String.format("%16s", Integer.toBinaryString(7)).replace(' ', '0');
会产生字符串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
替换为您从用户那里读取的整数,但想法是相同的。
答案 1 :(得分: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位二进制文件。或者,转换示例代码以操作字符串以满足您的需要。