Java Dezimal -> Dual

Pilly

Lt. Commander
Dabei seit
Juli 2004
Beiträge
1.262
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.
 

IceMatrix

Lt. Commander
Dabei seit
Jan. 2008
Beiträge
1.535
ist ganz normal. zwischenpuffern und danach in umgekehrter reihenfolge ausgeben. is die vermutlich intuitivste lösung.
 

Pilly

Lt. Commander
Ersteller dieses Themas
Dabei seit
Juli 2004
Beiträge
1.262
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
 

ice-breaker

Commodore
Dabei seit
Nov. 2008
Beiträge
4.133
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.
 

Pilly

Lt. Commander
Ersteller dieses Themas
Dabei seit
Juli 2004
Beiträge
1.262
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..
 

Timmey92

Commodore
Dabei seit
Okt. 2008
Beiträge
4.523
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?
 

Pilly

Lt. Commander
Ersteller dieses Themas
Dabei seit
Juli 2004
Beiträge
1.262
Dann kommt die invertierte Ausgabe nicht die umgekehrte.
Willst du zB statt 0001 1000 ausgeben würde aber 1110 kommen ;)
 

Timmey92

Commodore
Dabei seit
Okt. 2008
Beiträge
4.523
achso richtig ... verdammt^^
 
S

samotyr

Gast
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:

Riker

Lieutenant
Dabei seit
Jan. 2005
Beiträge
859
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);

	}

}
 

Tarkin

Cadet 2nd Year
Dabei seit
Okt. 2009
Beiträge
26
Hattet ihr schon Rekursion? Wenn ja:

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