Umwandlung Binär in Dezimal (ohne array etc.)

spitzboob

Mitglied
Hallo Leute,

Ich hab an der Uni gerade die Aufgabe ein Programm zu schreiben das eine Binärzahl einliest und die richtige Dezimalzahl dazu ausgibt. Davon soll ich jeweils Versionen mit while-, do while- und for- Schleife schreiben. (eine funktionierende Version würde mir schonmal reichen 😀).
Ich bin schon soweit gekommen das es mir die richtigen Ergebnisse ausrechnet, aber bekomm die einzelnen Ergebnisse nicht aus der schleife heraus, damit ich Sie einzeln addieren kann...
Bin mittlerweile echt am verzweifeln :/
Sonst finde ich nur Lösungen im Netz die schon mit arrays und umwandeln von integer in stringer rechnen und soweit sind wir in der Vorlesung noch nicht


Java:
import java.util.Scanner;
public class Umwandlung_Binär_Dezimal {

	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		
		int teiler=100000; //teiler um an die jeweilige Stelle der binärzahl zu kommen
		int exp=5;
		int binär;
		int dezimal;
	
		
		
		  System.out.println("Integer eingeben (Binär): ");
		  binär= input.nextInt();
		  
		  
		  while(teiler >1 && exp >0){  //schleife um teiler und exponent zu verkleinern
			  teiler = teiler / 10;	
			  exp --;
			 
				if(binär / teiler % 10 == 1 ){// ob an jeweiliger stelle 1 oder keine 1
					dezimal = (int) Math.pow(2, exp);
				}else{
						dezimal =0;
					}
				

				System.out.println(dezimal);
		
}
		}
	
		
	}

Ich hoffe mein Ansatz ist nicht komplett falsch.
Würde mich freuen wenn mir jemand weiterhelfen kann.
Vielen Dank im Voraus.
 
Das der Professor etwas noch nicht vorgelesen hat schließt aus, es zu benutzen?

Was ist denn ein stringer? 😀 😛

Was meinst du mit einzelnen Ergebnissen aus der Schleife herausbekommen?

Wenn du das richtige Ergebnis bekommst, dann dürfte dein Ansatz allzu falsch nicht sein.

In Pseudocode, wie ich das machen würde. Fehler sind nicht ausgeschlossen aber ich wage zu behaupten, dass sie unwahrscheinlich sind.

Java:
public void binZuDez(String bin){
  long ergebnis = 0;
  for (von 0 bis bin.length() Laufvariable: i){
    if (bin.CharAt(i) ist eine 0){
      continue;
    } else if (bin.charAt(i) ist eine 1){
      ergebnis plus quad(i);
    } else {
      break;
    }
}

private long quad(int male){
  return 2 male quadriert;
}
 
Danke für die schnell Antwort 🙂

dein Code ist mit Sicherheit um Welten besser als meiner, aber ich verstehen hin halt nicht wirklich^^
Und sollte doch auch auf meine weise funktionieren

damit meine ich, wenn ich jetzt mein code ausführe (funktioniert gerade nur wenn die binärezahl fünfstellig ist) bekomme ich für "System.out.println(dezimal)" die einzelnen richtigen Ergebnisse untereinander ausgedruckt...
kann ich diese ausgaben noch zusammenrechnen?
 
damit meine ich, wenn ich jetzt mein code ausführe (funktioniert gerade nur wenn die binärezahl fünfstellig ist) bekomme ich für "System.out.println(dezimal)" die einzelnen richtigen Ergebnisse untereinander ausgedruckt...
kann ich diese ausgaben noch zusammenrechnen?

Möchtest Du die Zahlen zusammenrechnen oder nebeneinander ausdrucken?

System.out.print(dezimal) druckt nebeneinander
System.out.println(dezimal) druckt untereinander
 
ich möchte sie zusammenrechen. Also wenn ich z.B. als Dualzahl :10101 eingebe druck es mir 16 , 0, 4, 0,1 aus.

was ja die Ergebnisse pro Durchlauf der Schleife sind. Ich möchte die Zahlen noch zusammenrechen(also zu 21) aber weiß nicht wie oder ob es überhaupt funktioniert.
 
Du kannst mit zwei Variablen arbeiten. Die Eine steht für das Ergebnis des einen Durchlaufs und die Andere für das Endergebnis. Die Erste wird immer auf die Zweite drauf gerechnet aber die Zweite wird erst nach der Schleife ausgegeben.
 

Zurück
Oben