Binär bis dezimal
Kann ich diesen Code irgendwie schneller machen und ist er lesbar? Ich bin ein Anfänger und werde später eine weitere Klasse mit der Konvertierung von Dezimal in Binär machen, aber zuerst muss ich wissen, wie das geht.
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!");
}
}
}
```
Antworten
Abgesehen von der Code-Formatierung gibt es in Ihrer Lösung gute Dinge zu beachten. Wenn Sie Eclipse verwenden, können Sie Strg + Umschalt + F drücken. Dadurch wird Ihr Code besser lesbar.
Ist eine binäre Methode
- In Java sind die Werte, die Sie als Parameter senden, in anderen Funktionen nicht betroffen (es gibt einige Ausnahmen wie bei Datenstrukturknoten). Daher können Sie die
inputNumbVariable speichern - Machen Sie den Namen Ihrer Variablen, Methoden und Klassen für alle möglichen Leser Ihres Codes beschreibend. In Zukunft werden Sie nicht mehr alleine arbeiten.
public static boolean isBinary(int number) {
while (number > 0) {
if(number % 10 > 1)
return false;
number /= 10;
}
return true;
}
Binär-Dezimal-Methode
- Wenn eine Variable als nur einmal (als
lastDigit) verwendet deklariert wird , ersetzen Sie den ihr zugewiesenen Wert, wenn eine solche Variable angezeigt wird. - Machen Sie bei Bedarf Kommentare
- Wirf Ausnahmen aus, wenn du eine Inkonsistenz findest, die den korrekten Workflow deines Programms beeinträchtigt
- Überprüfen Sie eine boolesche Bedingung nicht zweimal. Wenn eine
if elseAnweisung nur von einer Bedingung abhängt, müssen Sie nicht überprüfen, ob dies imelseBlock nicht der Fall ist. Sie ist redundant undelsewird ausgeführt, wenn die Bedingung in der Bedingungiffehlschlägt
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;
}
Die isCorrectMethode kann weggelassen werden, da sie einmal verwendet wird.
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!");
}
}
Ich wünschte, es wäre hilfreich für Sie.
Eines ist mir aufgefallen. Meiner Meinung nach wird eine Binärzahl normalerweise durch eine Sammlung von Ziffern (Zeichenfolge, Zeichen [], Byte [] usw.) dargestellt, nicht durch eine Ganzzahl mit nur Nullen und Einsen. Dieser Ansatz wäre nicht nur typischer, sondern würde Ihren Algorithmus auch erheblich vereinfachen, da die Ziffern bereits getrennt sind.
Ein weiterer zu berücksichtigender Aspekt ist, dass eine Ganzzahl auf die Anzahl der Ziffern beschränkt ist, während eine Binärzahl typischerweise 32, 64 oder sogar 128 Bit haben kann.