2016-03-10 2 views
1

Для простоты, я получил следующий метод расчета ли число вводится в двоичном (принимает только 1 и 0)Простая математическая проблема?

public static void checkBinary(int BinaryNumber) { 
    String bNumber = String.valueOf(BinaryNumber); 
    char[] Digits = bNumber.toCharArray(); 
    for (int i = 0; i < Digits.length; i++) { 
     if (Digits[i] > 1) { 
      System.out.println("You can't have the digit " + Digits[i]); 
      System.out.println("Your number is not a binary number."); 
      System.exit(0); 
     } 
    } 
} 

Однако, когда я пытаюсь работаю checkBinary(1010); я получаю следующий вывод

You can't have the digit 1 
Your number is not a binary number. 

Любая идея, почему он подсчитывает начальный 1, как больше 1?

Спасибо заранее, ребята!

+5

символ ''1'' имеет значение ascii 49, которое больше 1. –

+0

BTW. На 48 символов меньше, чем' '0'', поэтому вам нужно проверить меньше, чем это возможно. например пространство равно 32. –

+0

заменить 'if (Цифры [i]> 1)' с 'if (Цифры [i]! = '0' && Цифры [i]! = '1')' –

ответ

1

Вы вводите в заблуждение цифры с представлениями чисел. Нет смысла спрашивать, больше ли «0» или «1». «0» и «1» - цифры, а одно - числовое значение.

Цифры: '0' - это цифра. «1» - это цифра. «Три» - это не цифра. Цифры - это символы, которые могут выражать число или часть числа в некоторой конкретной базе.

Номера: «0», «ноль» и «один меньше одного» означают одно и то же, они одинакового числа. Числа представляют собой суммы и могут быть представлены различными способами, в том числе по последовательностям цифр.

Тщательно понимая разницу между значениями и представлениями значений, является критический навык программирования.

1

Цифры [i] - это char, вы сравниваете его с 1 (как целое).

Вы должны использовать

Integer.valueOf(Digits[i]) 

вместо этого.

4

ASCII '1' не является такой же, как 1. Вы должны быть сравнения:

if (Digits[i] > '1') { 
    ... 
} 

ASCII '1' является 0x31 или 49 десятичное.

EDIT: также помните, что если номер ввода отрицательный, в вашем массиве символов вы получите ASCII '-' (0x2d, dec 45). На самом деле, вы должны быть сравнения с «0» и «1» только, не используя>

+1

Большое вам спасибо за ответ! Я полностью забыл, что не могу сравнивать символы с целыми целыми –

0

Вот вопрос: if (Digits[i] > 1)

Вы сравниваете char к int. Вероятно, вы должны изменить эту логику. Либо сравнить char с char, либо int - int.

2

попробуйте сравнить character с character, а не number. Изменение вашей сравнительной оценки на:

Digits[i] > '1' 

Зафиксирует этот код.

"1" представление в ASCII-коде имеет десятичное значение 49, как представлено в следующей таблице:

ascii table

1

Поскольку Digits[i] равна 49, что больше, чем 1.

Вы используете символы, а не номера:

char[] Digits = bNumber.toCharArray(); 

При сравнении char Ань int, то char неявно преобразуется в int используя целочисленное значение этого символа. И целое значение '1' - 49.

Простой подход будет использовать символы с обеих сторон сравнения:

if (Digits[i] > '1') 

Или, возможно, использовать интуитивную числовое значение char:

if (Character.getNumericValue(Digits[i]) > 1) 
0

В Java символов приравнивает к ASCII кода, поэтому вы должны изменить свой оператор if в своей функции следующим образом:

public static void checkBinary(int BinaryNumber) { 
     String bNumber = String.valueOf(BinaryNumber); 

     char[] Digits = bNumber.toCharArray(); 
     for (int i = 0; i < Digits.length; i++) { 
      if (Character.getNumericValue(Digits[i]) > 1) { 
       System.out.println("You can't have the digit " + Digits[i]); 
       System.out.println("Your number is not a binary number."); 
       System.exit(0); 
      } 
     } 
    } 
Смежные вопросы