Binär zu Dezimal mit do-while JAVA

TheRealAmex

Cadet 4th Year
Registriert
Dez. 2016
Beiträge
110
Hi,

ich hab als Aufgabe bekommen Binär zu Dezimal umzuwandeln und mit while hab ich das auch geschafft,

jedoch komm ich einfach auf keinen grünen Zweig das mit do-while hinzukriegen.

public static void main(String[] args) {
int num, decimal = 0, i=0;

Scanner in = new Scanner(System.in);
System.out.println("Gib eine Binäre Nummer ein");
String binary = in.nextLine();
num = Integer.parseInt(binary);

while(num != 0){
decimal += (num%10)*Math.pow(2, i);
num = num /10;
i++;
}

System.out.println("Zahl : "+ decimal);
}
}

Das ist mein Code für while.

Hat da jemand eine Idee wie ich das verändern kann?

Danke im Voraus
 
Das erste wäre, die Code-Tags hier zu benutzen und das zweite, sich das mal anzugucken, also die Unterschiede zu verstehen:
https://www.quora.com/What-is-the-difference-between-the-while-and-do-while-loop-in-C

Interessant wäre natürlich auch, was du bisher versucht hast, damit man sehen kann, wo du falsch abgebogen bist. Schließlich möchtest du den Lösungsweg verstehen, nicht, dass wir deine Hausaufgaben machen, zumal das gegen die Forenregeln verstößt.
 
  • Gefällt mir
Reaktionen: Raijin, Asghan und bongo122
do{
decimal += (num%10)*Math.pow(2, i);
num = num /10;
i++;
} while(num != 0);

Einfach nur die Reihenfolge der Anweisungen geändert
 
  • Gefällt mir
Reaktionen: TheRealAmex
bongo122 schrieb:
do{
decimal += (num%10)*Math.pow(2, i);
num = num /10;
i++;
} while(num != 0);

Einfach nur die Reihenfolge der Anweisungen geändert

Das ich darauf nicht früher gekommen bin🤦‍♂️. Vielen Dank!
 
Du kannst es noch etwas optimieren indem du den left shift operator verwendest

decimal += (num%10)*(1 << i);

da num eh nur 0 oder 1 sein kann kann man es weiter vereinfachten zu

decimal += (num%10) << i ;

Math.pow liefert einen Diuble Wert der dann in der Zuweisung an decimal erst wieder in einen int umgwandelt wird
Fur integer bekommst du mit 1 << i das gleiche Ergebnis wie mit
(int) Math. pow(2,i) nur schneller 🙂


Ich würde es übrigens so machen (ohne jetzt zu Überprüfen ob der String eine gültige Binärzahl ist)
Java:
public class MyClass {
    public static void main(String[] args) {
     int decimal = 0,
     Scanner in = new               Scanner(System.in);
     System.out.println("Gib eine Binäre Nummer ein");
     String binary = in.nextLine();

     for  (int i =0 ; i < binary.length();i++ ){
      decimal = (decimal << 1) + binary.charAt(i) - '0';
     }

     System.out.println("Zahl : "+ decimal);
  }
}
 
Zuletzt bearbeitet:
Zurück
Oben