Da binario a decimale
Posso rendere questo codice in qualche modo più veloce ed è leggibile? Sono un principiante e in seguito farò un'altra lezione con la conversione da decimale a binario, ma prima devo sapere come farlo.
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!");
}
}
}
```
Risposte
Ci sono cose buone da sottolineare nella tua soluzione oltre alla formattazione del codice. Se usi eclipse puoi premere ctrl + maiusc + f e questo renderà il tuo codice più modificabile.
È un metodo binario
- In Java, i valori inviati come parametri non sono influenzati in altre funzioni (ci sono alcune eccezioni come con i nodi delle strutture dati). Quindi puoi salvare la
inputNumbvariabile - Rendi descrittivo il nome delle tue variabili, metodi e classi per tutti i lettori possibili del tuo codice. In futuro non lavorerai da solo.
public static boolean isBinary(int number) {
while (number > 0) {
if(number % 10 > 1)
return false;
number /= 10;
}
return true;
}
Metodo da binario a decimale
- Se una variabile viene dichiarata e utilizzata una sola volta (as
lastDigit), sostituire il valore assegnato ad essa dove appare tale variabile. - Fai commenti quando necessario
- Genera eccezioni quando trovi un'incongruenza che interferirà con il corretto flusso di lavoro del tuo programma
- Non controllare due volte una condizione booleana, se
if elseun'istruzione dipende da una sola condizione non devi controllare se non era vera nelelseblocco, è ridondante,elseviene eseguita una condizione quando la condizione nel bloccoiffallisce
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;
}
Il isCorrectmetodo potrebbe essere omesso poiché è usato una volta.
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!");
}
}
Vorrei che ti fosse d'aiuto.
Una cosa, ho notato. A mio avviso un numero binario è solitamente rappresentato da una raccolta di cifre (stringa, carattere [], byte [], ecc.) Non un numero intero con solo 0 e 1. Non solo questo approccio sarebbe più tipico, ma semplificherebbe notevolmente il tuo algoritmo poiché le cifre sono già separate.
Un altro aspetto da considerare, un numero intero è limitato al numero di cifre, mentre un numero binario può tipicamente avere 32, 64 o anche 128 bit.