游戏:九头和尾巴。我遇到二进制问题

时间:2014-04-07 04:44:49

标签: binary 2d

你可能不明白我写的内容,因为英语不是我的第一语言。

无论如何,这是我写的。

public class Exercises7point11 {

public static void main(String[] args) {
    java.util.Scanner input = new java.util.Scanner(System.in);
    int[][] binaryNumber = {{0,0,0},{0,0,0},{0,0,0}};

    System.out.print("Enter a number between 0 and 511: ");
    int decimalNumber = input.nextInt();
    int subtractNumber = 256, number = decimalNumber;

    for (int row = 0 ; row < 3; row++){
        for (int column = 0 ; column < 3; column++) {
            if(number >= subtractNumber) {
                binaryNumber[row][column] = 1;
                number = number - subtractNumber;
            }
            else {
                subtractNumber = subtractNumber / 2;
                binaryNumber[row][column] = 0;
                }

        }
    }


    // print
    for (int row = 0; row < binaryNumber.length; row++){
        for (int column = 0; column < binaryNumber[row].length; column++){
            if (binaryNumber[row][column] == 1)
            System.out.print("T ");
            else if (binaryNumber[row][column] == 0)
            System.out.print("H ");

            if (column == 2)
                System.out.print("\n");
        }
    }

}

以下是详细信息。九枚硬币放在一个3乘3的矩阵中,一些面朝上,一些面朝下。您可以使用值为0(头部)和1(尾部)的3乘3矩阵来表示硬币的状态。 如,

1 0 0

0 1 0

1 1 0。

总共有512种可能性,因此我可以使用十进制数0,1,2,3,...,511来表示矩阵的所有状态。编写一个程序,提示用户输入0到511之间的数字,并显示字符为H和T的相应矩阵。

我的问题是&#34; subtractNumber = subtractNumber / 2; binaryNumber [row] [column] = 0;&#34;在18和19行。即使&#39;数大于或等于subtractNumber,也会读取18和19行。

我不知道如何解决它。

非常感谢!!

1 个答案:

答案 0 :(得分:0)

输出是3x3矩阵,但这并不意味着你需要使用2d数组。

这是一种更简单的方法。我们使用toBinaryString方法将用户的输入转换为二进制字符串,然后将二进制字符串转换为H / T.

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    System.out.print("Enter a number between 0 and 511: ");
    int input = sc.nextInt();

    // Turn input to binary string
    String binary = Integer.toBinaryString(input);

    // Add enough zeros in front so that the string has 9 characters
    binary = binary.format("%09d", Integer.parseInt(binary));

    // Iterate through binary string one char at a time
    for (int i = 1; i < 10; i++) {
        if ('0' == binary.charAt(i - 1)) {
            System.out.print("H ");
        } else {
            System.out.print("T ");
        }

        // New line after 3 letters
        if (i % 3 == 0) {
            System.out.println();
        }
    }
}

示例输出

二进制12是000001100

Enter a number between 0 and 511: 12
H H H 
H H T 
T H H