Я не могу запретить моей программе принимать только двоичные числа

1

Я создаю программу для своего конвертера номера gui. Я хочу, чтобы моя программа запрашивала у пользователя двоичную строку, и если он не вводит двоичный номер, программа покажет ему сообщение об ошибке и попросит его войти снова. Проблема состоит в том, что я могу добавить ограничение на алфавиты, но когда дело доходит до чисел, то это выходит из строя или оно продолжает показывать сообщение об ошибке.

import java.util.*;

public class test {
    Scanner key = new Scanner(System.in);
    String in;
    int b;
    public test(){
        do{
            System.out.println("Enter the binary string of 5 numbers");
            in = key.nextLine();
            int i,j;
            char ch;
            for (i=0 ; i<=5 ; i++){
                b = 0;
                ch = in.charAt(i);
                j = ch;
                if (Character.isDigit(ch) && ch<=0 && ch>=1)
                    b = 1;
                else
                    System.out.println("Please enter a binary number (1 , 0)");
                break;
                //b = 1;
            }
        }while(b != 1);

        int c;
        c = Integer.parseInt(in);
        System.out.println("your number is: " + c );
    }

    public static void main (String args[]){
        test obj = new test();
    }
}
  • 0
    Вы могли бы взглянуть на этот вопрос .
  • 0
    @FredLarson Полагаю, это имеет огромное значение :-)
Теги:

3 ответа

7
Лучший ответ

ch<=0 && ch>=1 не делает того, что вы думаете. Коды символов для "0" и "1" равны 48 и 49, поэтому вы должны их проверить. Кроме того, ваши >= компараторы назад, но это не самый ясный способ написать этот код. И поскольку вы сравниваете только эти два значения, Character.isDigit(ch) является избыточным.

Попробуйте один из них:

ch == 48 || ch == 49

ch == '0' || ch == '1'
  • 0
    также может быть Character.isDigit (ch) && (ch == '0' || ch == '1')
  • 0
    Правильно; либо один должен работать.
Показать ещё 3 комментария
2

Scanner имеет перегруженный метод nextInt который использует радиус

int binaryNumber = scanner.nextInt(2);
  • 0
    приятно упомянуть это! для начинающих немного сложнее, но просто и чисто!
  • 0
    Я не настолько продвинут в Java, чтобы использовать radix. все еще начинающий, в любом случае большое спасибо
0

1) Первая логическая ошибка здесь for (i=0; i<=5; i++) заменить i<=5 на i<5

2) измените условие if else, как показано ниже

if (Character.isDigit(ch) && (ch == '0' || ch == '1'))
{
     b = 1;
}
else
{
     System.out.println("Please enter a binary number (1 , 0)");
     break;
}
  • 0
    Вы только добавили { } в части 2) или я что-то упустил?
  • 0
    Условие if никогда не будет совпадать - '0'! = 0
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню