Java - целые числа и двоичные файлы - PullRequest
0 голосов
/ 17 февраля 2019

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

import java.util.Scanner;
   class ABC{
      public static void main(String[] args){
        Scanner toy = new Scanner(System.in);
        int x = toy.nextInt();
        int y = toy.nextInt();
        x = 0bx; y=0by; ------------> ERROR SHOWS UP
        int z = x + y;
        System.out.println(Integer.toBinaryString(z));
        }
     }

Сообщение об ошибке гласит:

binary numbers must contain at least one binary digit 
';' expected

Идеальный пример:

x = 101 (integer) --> x = 5 (binary meaning of 101)
y = 10  (integer) --> y = 2 (binary meaning of 10)
z = x + y = 5 + 2 = 7
return binary form of 7 (111)

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы написали 0bx, что было бы неплохо, если бы он работал.Это не так, как вы сами испытали.

Чтобы понять почему, вам нужно знать, что написанный вами код сначала интерпретируется целиком и переводится компилятором в программу в машинном коде.В принципе, компилятор может выяснить, что вы пытаетесь сказать с помощью выражения 0bx.Просто язык программирования Java не допускает этого выражения.

Он говорит что-то похожее на:

Бинарный литерал записывается как 0b, за которым следуют только 0 и1, по крайней мере, один и как можно больше.

Слово литерал означает нечто, относящееся к буквам, «как написано».Поэтому вы не можете использовать эту часть языка программирования.

Но есть и другая часть.Метод Integer.parseInt имеет 2 варианта: Integer.parseInt("12345") преобразует десятичное представление числа в это число.Вариант Integer.parseInt("101110101101", 2) разбивает двоичное представление числа на это число.

Если есть метод toy.nextInt(2), вы можете использовать его.В противном случае вы должны использовать Integer.parseInt(toy.next(), 2).

0 голосов
/ 17 февраля 2019

Если вы хотите, чтобы ваши входные числа были проанализированы в двоичном виде, вы должны прочитать их как String s и проанализировать до int в основании 2:

int x = Integer.parseInt(toy.next(),2);
int y = Integer.parseInt(toy.next(),2);    
int z = x + y;
System.out.println(Integer.toBinaryString(z));

Что касается вашей ошибки:

x = 0bx; y=0by;

недопустимый синтаксис.Префикс 0b позволяет вводить числовые литералы, которые будут обрабатываться как двоичные литералы (например, x = 0b1001;), но вы не можете комбинировать их с переменной.

...