Справка по бинарной матрице символов - PullRequest
1 голос
/ 09 февраля 2010

К вашему сведению: это практическое домашнее задание. Я работал над этим, но теперь я застрял. Любые советы / помощь будут оценены. Я смотрел на это некоторое время, и никакого прогресса достигнуто не было.

Обобщенный вопрос: Девять монет помещаются в матрицу 3х3, некоторые лицевой стороной вверх, а некоторые лицевой стороной вниз. Головы = 0 и хвосты = 1. Каждое состояние также может быть представлено с помощью двоичного числа. Есть 512 возможностей. Проблема: Напишите программу, которая запрашивает у пользователя число от 0 до 5 и отображает соответствующую матрицу с символами H и T следующим образом:

Пользователь вводит номер 7 (это 000000111 или ЧЧЧХХХТТТ) Дисплей должен быть: H H H H H H Т Т Т

Это то, что я имею до сих пор. Я не спрашиваю ответ обязательно, я просто хотел бы толчок в правильном направлении. Спасибо

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 ]

4 голосов
/ 09 февраля 2010

Ты действительно близко. Некоторые заметки:

  • Scanner#nextInt может генерировать исключения; обращаться с ними изящно.
  • Вам необходимо убедиться, что number находится в диапазоне (0-511).
  • Получив bin, вы получаете 1-9 двоичных цифр - 0 с и 1 с. Вы хотите убедиться, что у вас их ровно 9, поэтому вставьте все пропущенные 0 s впереди.
  • Теперь у вас есть 9 0 с и 1 с; Вы хотите H с и T с. Выезд String#replace.
  • Теперь у вас есть строка с 9 H с и T с. Выведите его в три строки по три символа в строке. Выезд String#substring.
1 голос
/ 09 февраля 2010

Я бы использовал StringBuilder для создания «доски», и распечатывал ее только потом. Я бы создал метод с именем "createBoard", который имеет в качестве параметров число, ширину и глубину. Всегда программируйте для гибкости. Я бы использовал два счетчика, скажем, x и y, которые перебирают ширину и глубину (достаточно простого цикла для следующего цикла). позиция = х * ширина + у Я бы использовал BigInteger.valueOf () и использовал BigInteger.testBit (position). Я бы действительно убедился, что мой код выглядит красиво и содержит комментарии.
1 голос
/ 09 февраля 2010

String.replace(CharSequence, CharSequence) может быть полезно здесь.

1 голос
/ 09 февраля 2010

intToString.toCharArray ();

Это должно быть bin.toCharArray(), метинкс.

С чем еще у вас проблемы?

...