Java Dezimal -> Dual

Pilly

Lt. Commander
Registriert
Juli 2004
Beiträge
1.264
Ich möchte eine Dezimalzahl in eine Dualzahl umwandeln und ausgeben. Also Beispielweise der User gibt 10 ein die Ausgabe soll dann demnach 1010 sein.
Habe da auch eine Code, der macht das ganze aber falsch herum (also 0101 statt 1010).
Code:
while (x != 0) {
			if(x%2==0) {
				System.out.print("1");
			}
			else {
				System.out.print("0");
			}
			x = x/2;
		}

Ich weiß, dass man das u.U. über Arrays lösen kann bzw. die Funktion Integer.toBinaryString() nimmt. Soll aber beides noch nicht verwendet werden.
 
ist ganz normal. zwischenpuffern und danach in umgekehrter reihenfolge ausgeben. is die vermutlich intuitivste lösung.
 
Könnte ich wahrscheinlich alles realisieren. Aber die Frage ist auch wie weit ein Programm schon in der dritten Woche der ersten Semesters sein darf... :P
 
Neija Blitzmerkers Ansatz ist ein ganz normaler Ansatz auf den man nach nichtmal 2 Minuten nachdenken kommt, und das kann man von einem Student schon erwarten. Und da ihr sowohl Schleifen und If-Bedingungen hattet, kann man das schon vorraussetzen.
 
Wie gesagt ich selbst könnte das mit einem Array bzw. der Integer.toBinary() Funktion lösen aber am Anfang ist es ja doch so, dass nur das verwendet werden darf, was auch in der Vorlesung dran war..
 
Also ich finde vortäuschen von fehlenden Kenntnissen ermüdend und irgendwie völlig sinnlos.
Nimm deinen Code, dreh die Ausgabe um und fertig.

was passiert wenn du

Code:
while (x != 0) {
			if(x%2==0) {
				System.out.print("0");
			}
			else {
				System.out.print("1");
			}
			x = x/2;
		}

machst?
müsste da nicht die umgekehrte ausgabe herauskommen?
 
Dann kommt die invertierte Ausgabe nicht die umgekehrte.
Willst du zB statt 0001 1000 ausgeben würde aber 1110 kommen ;)
 
achso richtig ... verdammt^^
 
ice-breaker schrieb:
Neija Blitzmerkers Ansatz ist ein ganz normaler Ansatz (...) Und da ihr sowohl Schleifen und If-Bedingungen hattet, kann man das schon vorraussetzen.

Bitmanipulationen sind meines Erachtens kein Thema der ersten Vorlesungseinheiten. Da werden erst mal wichtigere Themen wie Schleifen, Variablen, Funktionen, Parameter und Rückgabe, Arrays, Pointer, struct, Listen, Datenströme etc. behandelt.
Um die von Blitzmerker vorgeschlagene Lösung zu verstehen ist sicherlich erst mal einiges an Lektüre zu lesen (für einen, der noch am Anfang seines Studiums steht, ohne Vorkenntnisse).
 
Zuletzt bearbeitet:
Nicht verzagen, Riker fragen ;)
Der Gedankengang ist folgender:

1. int = int1 + int2
ist was anderes als
2. String = String + int

Bsp:

1. 5+8 würde 13 ergeben

2. 5+8 würde 58 ergeben (da nicht addiert, sondern einfach eine Art der Konkatenierung... ;) ).

Lange Rede kurzer Sinn - hier die Lösung aller Probleme Deines Lebens ;)

PHP:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class DecToBin {

	public static void main(String[] args) throws IOException {

		BufferedReader bin = new BufferedReader(
				new InputStreamReader(System.in));

		System.out.println("Bitte Zahl eingeben: ");
		String zahl = bin.readLine();
		int zahl_int = Integer.parseInt(zahl);
		String inv = "";
		int x = 1;
		int y = 0;
		
		while (zahl_int != 0) {
			if (zahl_int % 2 == 0) {
				inv = y+inv;
			}
			else {
				inv = x+inv;
			}
			
			zahl_int = zahl_int / 2;
			
		}
		System.out.print(inv);

	}

}
 
Hattet ihr schon Rekursion? Wenn ja:

PHP:
public String decToBin(int zahl){
		if(zahl < 2){
			return ""+zahl;
		}else{
			return decToBin(zahl/2) + zahl%2;
		}
	}
 
Zurück
Oben