#java
#java
Вопрос:
1. Это мой код для преобразования двоичного кода в десятичный, но он не работает.Значение c повторяется по некоторым причинам.
/**
* Created by Ranjan Yadav on 11.10.2016.
*/
public class BinaryToDecimal {
public static void main(String[] args) {
java.util.Scanner read = new java.util.Scanner(System.in);
System.out.println("Enter a binary number: ");
int binary = read.nextInt();
int total = 0;
int n = 1;
int c = 0;
int number = 0;
while (binary != 0) {
c = binary % ((int) Math.pow(10, n));
binary = binary / 10;
number = c * (int)(Math.pow(2, (n - 1)));
total = number;
n;
}
System.out.printf("The decimal of the binary is %d", total);
}
}
Комментарии:
1. Допустим, я ввожу 1110111. В первый раз
1110111 % 10
значение равно 1, иbinary
ему присваивается значение 111011. Во второй раз, что такое111011 % 100
?2. Спасибо, c должен быть уменьшен только на 10 все время.
3. Просмотрите свой код в отладчике IDE и проверяйте промежуточные значения на каждом шаге. Это должно быстро показать вам проблему, и вы кое-чему научитесь.
4. Я отладил его в intellij, но я не знаю, как работает отладчик
5. @RANJANYADAV Вам действительно нужно научиться отлаживать свой код, после этого ваши навыки программирования повысятся на 300%. Быстрый старт: jetbrains.com/help/idea/2016.2/debugging.html
Ответ №1:
Вы одновременно увеличивали n на 1 и делили двоичный код на 10, равный n. Из-за этого вы не смогли получить цифру единицы двоичного числа после 1-й итерации. Чтобы решить эту проблему, вам нужно получить двоичный код по модулю 10 (не 10, увеличенный до n) на каждой итерации, а также сохранить оператор двоичного деления на 10.
Я упростил, а также внес некоторые небольшие изменения в ваш код для повышения удобочитаемости. Вот исправленный метод main :
public static void main (String[] args){
java.util.Scanner read = new java.util.Scanner(System.in);
System.out.println("Enter a binary number: ");
int binary = read.nextInt();
int total = 0;
int n = 0;
int c = 0;
int number = 0;
while (binary != 0) {
c = binary % 10;
binary = binary / 10;
number = c * (int)(Math.pow(2, n));
total = number;
n;
}
System.out.println("The decimal of the binary is " total);
}
Код работает и дает желаемые результаты. Дайте мне знать, если у вас возникнут какие-либо дополнительные сомнения.
Ответ №2:
Вы можете просто проанализировать целое число с parseInt
помощью метода:
java.util.Scanner read = new java.util.Scanner(System.in);
System.out.println("Enter a binary number: ");
String binary = read.nextLine();
int decimal = Integer.parseInt(binary, 2); // 2 here means the string "binary" is in binary
Если вам не разрешено использовать это, попробуйте этот алгоритм:
- Создайте переменную
total
и сделайте ее 0. - Перебирайте двоичную строку с помощью цикла for, подобного этому:
for (int i = 0 ; i < binaryString.length() ; i )
- На каждой итерации, если символ равен 1, добавьте
Math.pow(2, binaryString.length() - 1 - i)
. В противном случае ничего не делайте.