梁 - 头和尾的游戏

时间:2012-10-30 18:07:40

标签: java random

我对这本关于Java书的介绍中的一个问题感到困惑 - 这就是问题所在:

“16个硬币被放置在一个4乘4的矩阵中,其中一些面朝上,一些面朝下。你可以使用一个4乘4的矩阵表示硬币的状态,值为0(头部)和1(以下是一些例子:

0000
0100
0000
0010

每个状态也可以使用二进制数(上面的串联)来重复。编写一个程序,提示用户输入0到65,536之间的数字,并显示相应的矩阵 - 7的标题将给00000111。

我的问题是你如何验证7的情况?我甚至不确定如何开始这样的方法原型 - 也许int x =(int)Math.rand(1)并分配给每个行/列?

也许有人可以给我一些关于从哪里开始的提示?

2 个答案:

答案 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位二进制文​​件。或者,转换示例代码以操作字符串以满足您的需要。