2015-10-07 3 views
1

Для класса я создаю конвертер Binary to Denary, и я не могу заставить его работать. Мое использование операторов if и else if, похоже, делает мой код очень загроможденным.Есть ли способ уменьшить количество утверждений «если», которые я использую?

Есть ли способ уменьшить количество беспорядков? В задаче говорится, что было бы полезно исследовать: .toString, .substring(int a, int b) и java.lang.Math.pow(double a, double b). В любом случае, чтобы заставить это работать? Все значения, так как они определены как 0, чтобы начать с, в конечном итоге все быть 0.

import java.util.Scanner; 


public static void main(String[] args) { 

Scanner userInput = new Scanner(System.in);  
    String binary; 
    int value0 = 0; 
    int value1 = 0; 
    int value2 = 0; 
    int value3 = 0; 
    int value4 = 0; 
    int value5 = 0; 
    int value6 = 0; 
    int value7 = 0; 

    System.out.println("Welcome to the Binary to Denary converter!"); 
    System.out.println("Please enter an 8-BIT Binary value:"); 

    binary = userInput.next(); 
    char result0 = binary.charAt(0); 
    char result1 = binary.charAt(1); 
    char result2 = binary.charAt(2); 
    char result3 = binary.charAt(3); 
    char result4 = binary.charAt(4); 
    char result5 = binary.charAt(5); 
    char result6 = binary.charAt(6); 
    char result7 = binary.charAt(7); 

    if (result0 == 1){ 
    value0 = 128; 
    } 
    else if (result0 == 0){ 
    value0=0; 
}  
    if (result1 == 1){ 
    value1 = 64;  
    } 
    else if (result1 == 0){ 
    value1=0;  
} 
    if (result2 == 1){ 
    value2 = 32;   
    } 
    else if (result2 == 0){ 
    value2=0; 
} 
    if (result3 == 1){ 
    value3 = 16;   
    } 
    else if (result3 == 0){ 
    value3=0; 
} 
    if (result4 == 1){ 
    value4 = 8;   
    } 
    else if (result4 == 0){ 
    value4=0; 
} 
    if (result5 == 1){ 
    value5 = 4;   
    } 
    else if (result5 == 0){ 
    value5=0; 
} 
    if (result6 == 1){ 
    value6 = 2;   
    } 
    else if (result6 == 0){ 
    value6=0; 
} 
    if (result7 == 1){ 
    value7 = 1;   
    } 
    else if (result7 == 0){ 
    value7=0; 
} 
    int answer = value0+value1+value2+value3+value4+value5+value6+value7; 

    System.out.println("Your Denary value is:"+value0+"+"+value1+"+"+value2+"+"+value3+"+"+value4+"+"+value5+"+"+value6+"+"+value7+"="+answer); 
} 
} 
+2

Почему бы не использовать массивы? Это значительно сократит код. –

+0

Используйте оператор switch. Посмотрите на oracles docs https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html. это был бы самый простой способ сконденсировать беспорядок –

+0

Вместо того, чтобы писать отдельный код для каждой цифры, напишите цикл. Чтобы включить это, вы захотите использовать массив вместо переменных 'valuen'. В качестве бонуса вам не нужно больше одной (скалярной) переменной, в которой теперь вы используете все 'resultn'. –

ответ

2

Как другие говорили в комментариях, вы используете слишком много переменных.

Попробуйте это:

public static void main (String[] args) throws java.lang.Exception 
{ 
    Scanner userInput = new Scanner(System.in);  
    String binary; 
    int answer = 0; 
    System.out.println("Welcome to the Binary to Denary converter!"); 
    System.out.println("Please enter an 8-BIT Binary value:"); 

    binary = userInput.next(); 

    for (int i = 0; i < binary.length(); i++) { 
     if (binary.charAt(i) == '1') { 
      answer += java.lang.Math.pow(2, binary.length() - i - 1); 
     } 
    } 

    System.out.println("Your Denary value is:"+answer); 
} 

Если вы понимаете бинарное преобразование правильно, мы идем справа налево и приращения по power of 2. Поэтому вместо проверки для каждого значения сравнивайте каждый символ в строке и проверяйте, является ли оно 1 и увеличивайте, если оно есть.

Here - рабочая демонстрация приведенного выше кода.

+0

Отличный ответ! Спасибо за помощь: 3 – wkndite

+0

не проблема :) – sam

Смежные вопросы