Binario a decimal
¿Puedo hacer este código de alguna manera más rápido y es legible? Soy un principiante y luego haré otra clase con conversión de decimal a binario, pero primero tengo que saber cómo hacerlo.
package convert.console.binaryToDecimal;
import java.util.InputMismatchException;
import java.util.Scanner;
public class ConversionProgram {
//check if number is actually binary
public static boolean isBin(int numb){
int inputNumb = numb;
while(inputNumb > 0){
if(inputNumb % 10 > 1){
return false;
}
inputNumb /= 10;
}
return true;
}
public static int binaryToDecimal(int input){
int number = input;
int decimalNumber = 0;
int baseNumber = 1;
int lastDigit;
//check if provided number is binary
if(isBin(number)){
while(number != 0){
//takes last digit from input
lastDigit = number % 10;
//counts decimal number
decimalNumber += lastDigit * baseNumber;
/*every time increase baseNumber by 2
(base number is 1 ,because when u start from right 2pow0 is always 1)
*/
baseNumber *= 2;
//removes last digit from input
number /= 10;
}
}
else if(!isBin(number)){
System.out.println("Wrong!\nProvide binary number - contains only 0 and 1");
}
return decimalNumber;
}
//check if output is correct
public static void isCorrect(int bin, int conv){
if (conv == 0) {
System.out.println("Try again");
} else {
System.out.println("Converted number from binary " + bin + " to decimal is " + conv);
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Input binary number :");
try {
int binaryNumb = input.nextInt();
int convertedNumb = binaryToDecimal(binaryNumb);
isCorrect(binaryNumb, convertedNumb);
}catch(InputMismatchException e){
System.out.println("Wrong input!");
}
}
}
```
Respuestas
Hay cosas buenas que señalar en su solución además del formato del código. Si usa eclipse, puede presionar ctrl + shift + f y eso hará que su código sea más legible.
Es el método binario
- En Java, los valores que envía como parámetros no se ven afectados en otras funciones (hay algunas excepciones como con los nodos de estructuras de datos). Por lo tanto, puede guardar la
inputNumbvariable - Haga que el nombre de sus variables, métodos y clases sea descriptivo para todos los posibles lectores de su código. En el futuro, no trabajará solo.
public static boolean isBinary(int number) {
while (number > 0) {
if(number % 10 > 1)
return false;
number /= 10;
}
return true;
}
Método binario a decimal
- Si una variable se declara y solo se usa una vez (como
lastDigit), sustituya el valor que se le asignó donde aparezca dicha variable. - Haga comentarios cuando sea necesario
- Lanza excepciones cuando encuentres una inconsistencia que interferirá con el flujo de trabajo correcto de tu programa.
- No verifique dos veces una condición booleana, si una
if elsedeclaración depende solo de una condición, no debe verificar si eso no era cierto en elelsebloque, es redundante, yelsese ejecuta cuando la condicióniffalla
public static int binaryToDecimal(int number) {
int decimalNumber = 0;
int powerOfTwo = 1; //renamed, gives more context
if (isBinary(number)) {
while (number != 0) {
decimalNumber += (number % 10) * powerOfTwo;
powerOfTwo *= 2;
number /= 10; //removes the last digit
}
} else throw new InvalidParameterException("Not a binary number");
return decimalNumber;
}
El isCorrectmétodo podría omitirse ya que se usa una vez.
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a binary number: ");
try {
int binaryNumb = input.nextInt();
int convertedNumb = binaryToDecimal(binaryNumb);
System.out.println("The number "+ binaryNumb + " was converted to decimal," +
"\nthe result was: " + convertedNumb);
} catch (InputMismatchException e) {
System.out.println("Wrong input!");
}
}
Ojalá te fuera de ayuda.
Una cosa, me di cuenta. En mi opinión, un número binario generalmente se representa mediante una colección de dígitos (cadena, char [], byte [], etc.), no un número entero con solo 0 y 1. Este enfoque no solo sería más típico, sino que simplificaría significativamente su algoritmo, ya que los dígitos ya están separados.
Otro aspecto a considerar, un número entero está restringido al número de dígitos, mientras que un número binario normalmente puede tener 32, 64 o incluso 128 bits.