Schleifenproblem(e) & Methoden

refuseresist

Neues Mitglied
Hallo,
habe ein Problem mit der Schleife in diesem Code:

Java:
import java.util.Scanner;

public class Binary {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);

		System.out.println("Bitte geben Sie den gewünschten Wert ein der \n"
				+ "in eine Binärzahl umgwandelt werden soll: ");
		int decimal = in.nextInt();

		toBinary(decimal);

	}

	private static void toBinary(int decimal) {

		int ergebnis = decimal;
		
		while (ergebnis > 0) {
			ergebnis = ergebnis / 2;
			int rest = decimal % 2;
			rest = ergebnis % 2;
			
			System.out.println("Binärwert: " + rest);
		}
		

	
	}

}

Jedes mal wenn ich einen Wert (Beispiel siehe unten) wird der Teil um eine Stelle versetzt angezeigt, soll heißen hier bei, Dezimalwert 100 auf binär: 0110010
obwohl er eigentlich so aussehen müsste: 1100100
Woran liegt das?

Konsolenausgabe:
Java:
Bitte geben Sie den gewünschten Wert ein der 
in eine Binärzahl umgwandelt werden soll: 
100
Binärwert: 0
Binärwert: 1
Binärwert: 0
Binärwert: 0
Binärwert: 1
Binärwert: 1
Binärwert: 0


Und hier:
Wie bekomme ich den Wer von 'ggt' in meine Methode bruchKuerzen();
Wenn ich 'ggt' in diese Methode einfügen will meckert ja der Compiler dass 'ggt' noch nicht gesetzt wurde. Was kann man da machen?

Java:
import java.util.Scanner;

public class Brüche {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);

		System.out.println("Bitten geben Sie den Wert für den Zähler ein: ");
		int zähler = in.nextInt();
		System.out.println("Bitte geben Sie den Wert für den Nenner ein: ");
		int nenner = in.nextInt();

		bruchKuerzen(zähler, nenner);

	}

	private static void bruchKuerzen(int zähler, int nenner) {

		groeßterTeiler(zähler, nenner);
		
		// Hier werden Zähler bzw. Nenner durch den ggT geteilt um den vollständig gekürzten Bruch zu erhalten
		System.out.println("Den Bruch kann man auf diese Werte runterkürzen: ");
                zähler = zähler / ggt; // ???
		System.out.println("Zähler: " + zähler);
		System.out.println("Nenner: " + nenner);
	}

	private static void groeßterTeiler(int a, int b) {
		
		// Funktion um den groeßten gemeinsamen Teiler zu ermitteln
		while (b > 0) {
			int r = a % b;
			a = b;
			b = r;
			int ggt = a;

			if (b == 0) {

				System.out.println("Größter gemeinsamer Teiler: " + ggt);
				
			}

		}

	}

}

Schon mal vielen Dank für eure Hilfe!
 
Warum so kompliziert?
Java:
    private static void toBinary(int decimal) {
        while (decimal > 0) {
            int rest = decimal % 2;
            decimal = decimal / 2;
            System.out.println("Binärwert: " + rest);
        }
    }
 
Du hast ggt in einer Methode lokal definiert, also existiert deine Variable "ggt" nur in der Methode groeßterTeiler.

Entweder du lässt sie dir von groeßterTeiler zurückgeben, und verwendest dann dieses Ergebniss in der Methode bruchKuerzen.

Wenn du das nicht willst, dann schreib unter deiner Klassendeklaration "private int ggt;"

Ausserdem muss man nicht unbedingt alle Methoden statisch machen ^^
 

Zurück
Oben