我被梁 Java 简介书中的一个问题所困扰 - 问题如下:
“十六枚硬币被放置在一个 4×4 矩阵中,其中一些面朝上,一些面朝下。您可以使用值为 0(头)和 1(尾)的 4×4 矩阵来表示硬币的状态。以下是一些示例:
0000
0100
0000
0010
每个状态也可以使用二进制数(上述的串联)来表示。编写一个程序,提示用户输入 0 到 65,536 之间的数字并显示相应的矩阵 - 7 的值将给出 00000111。
我的问题是您如何验证 7 的情况是否如此?我什至不确定如何开始对这样的方法进行原型(prototype)设计 - 也许 int x = (int)Math.rand(1) 并分配给每个行/列?
也许有人可以给我一些关于从哪里开始的提示?
最佳答案
问题本质上是将 [0, 65536] 范围内的整数转换为其二进制表示形式。这可以通过 Integer.toBinaryString
来完成。例如,
Integer.toBinaryString(7);
将产生字符串111
。现在,我们希望字符串的总长度为16,因此需要在左侧补上0
,得到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
替换为您从用户那里读取的任何整数,但想法是相同的。
关于java - 梁 - 正面与反面的游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13145108/