二进制到字符矩阵的帮助

时间:2010-02-08 23:28:12

标签: java binary character

仅供参考:这是一项练习作业。我一直在努力,但现在我被卡住了。任何提示/帮助将不胜感激。我已经盯着它看了一会儿,没有取得任何进展。

总结问题: 九个硬币放在3x3矩阵中,一些面朝上,一些面朝下。 Heads = 0且tails = 1.每个状态也可以使用二进制数表示。有512种可能性。问题:编写一个程序,询问用户0-511之间的数字,并显示字符为H和T的相应矩阵,如下所示:

用户输入数字7(即000000111或HHHHHHTTT) 显示应该是: H H H. H H H. T T T

这是我到目前为止所拥有的。我不是要求答案,我只想推动正确的方向。感谢

import java.util.Scanner;

public class converting {
    public static void main(String[] ar) {

    Scanner s = new Scanner(System.in);

        System.out.print("Enter a number between 0 and 511: ");

        int number = s.nextInt();
        if(number <= 511 && number > 0)
        {
             String bin = Integer.toBinaryString(number);
             String tails = bin.replace('1', 'T');

         int count = 0;
         char[] arr = tails.toCharArray();

         for (int i = 0; i < arr.length; i++) {

            System.out.print(arr[i]);
            count++;
            if (count == 3) {
                System.out.println();
                count = 0;
            }
        }
      }
      else{
        System.out.print("Please enter a number between 0 and 511\n");
    }
    }
}

4 个答案:

答案 0 :(得分:4)

你真的很亲密。一些说明:

  • Scanner#nextInt可以抛出异常;优雅地处理它们。
  • 您需要检查number是否在范围内(0-511)。
  • 获得bin后,您有1-9个二进制数字 - 01 s。你想确保你有9个,所以在前面插入任何遗漏的0
  • 您现在有9 01 s;你想要HT。查看String#replace
  • 您现在拥有一个包含9 HT s的字符串。输出三行,每行三个字符。查看String#substring

答案 1 :(得分:1)

  

intToString.toCharArray();

这应该是bin.toCharArray(),也可以是。

你还遇到了什么问题?

答案 2 :(得分:1)

String.replace(CharSequence, CharSequence)在这里可能很有用。

答案 3 :(得分:1)

  • 我会使用StringBuilder构建“board”,然后才打印出来。
  • 我会创建一个名为“createBoard”的方法,它具有数量,宽度和深度作为参数。始终为灵活性而努力。
  • 我会使用两个计数器,比如x和y,它们遍历宽度和深度(下一个循环的简单就足够了)。 position = x * width + y
  • 我会使用BigInteger.valueOf()并使用BigInteger.testBit(position)。
  • 我会确保我的代码看起来不错并且有评论。