Java Programm Umrechnung Dezimal zu Binärsystem?

TechPech1984  01.06.2021, 19:22

Was macht es stattdessen?

Gibt es Fehlermeldungen, welche?

Code bitte in </> formatiert hier rein

danke

DerAmateur98 
Beitragsersteller
 01.06.2021, 19:26

Wenn ich die Dezimalzahl eingebe, kommt auch wieder nur die Dezimalzahl raus. Der rechnet nichts um.

Fehlermeldungen sagt er mir nichts.

Quelltext kommt gleich.

4 Antworten

Von einem Experten bestätigt

Erwartest du jetzt, dass wir das Programm im Kopf durchgehen oder es abtippen und gucken, was vielleicht falsch sein könnte?

Standardfragen:

  • Was soll das Programm machen? (hast du schon gesagt)
  • Was macht es stattdessen?
  • Gibt es Fehlermeldungen, welche?

Quelltext hier posten und (ganz wichtig!) als Quelltext formatieren, indem du im Eingabefenster oben </> anklickst

Du hast ein "int Endergebnis", darauf addierst du Nullen und Einsen. So erhältst du die binäre Quersumme. Die binären Quersummen hängst in jedem Durchlauf an einen String hinten an und gibst ihn nach getaner Tat umgedreht aus.

Du willst aber die Nullen und Einsen sehen und nicht zusammenaddieren.

Also deklarierst du einen "String endergebnis", initialisierst ihn mit "" (Leerstring) und stellst das Teilergebnis (0 oder 1) voran:

endergebnis = teilergebnis + endergebnis

Das sollte helfen


Saftschubsex  01.06.2021, 19:29

Das ist sauber erklärt was eine Frage zu Quellcode beinhalten sollte
Nicer Post :)

0
DerAmateur98 
Beitragsersteller
 01.06.2021, 19:25

Wenn ich die Dezimalzahl eingebe, kommt auch wieder nur die Dezimalzahl raus. Der rechnet nichts um.

Fehlermeldungen sagt er mir nichts.

0
DerAmateur98 
Beitragsersteller
 01.06.2021, 19:27
@DerAmateur98
import java.util.Scanner;

public class dezibinär {

	 public static void main(String[] args) {
	     
	    try (Scanner eingabe = new Scanner(System.in)) {
				System.out.println("23");
				
				int Teilergebnis;
				int Endergebnis = 0;
				StringBuilder Umdrehen = new StringBuilder();
				//ZE= Zwischenergebnis
				
				for (int ZE = eingabe.nextInt(); ZE> 0; ZE = ZE/2)
				   
				{
				   
				  Teilergebnis = ZE % 2;
				  Endergebnis = Endergebnis + Teilergebnis;
				   
				  Umdrehen.append(Endergebnis);
				   
				   
				System.out.print(Umdrehen.reverse());
				
				}
			}
	     
	     
	  }
	   
	}
0
Schachpapa  01.06.2021, 19:37
@DerAmateur98

Die kleinste Änderung, damit es funktioniert wäre, statt

Umdrehen.append(Endergebnis)

zu schreiben

Umdrehen.append(Teilergebnis)

Die Variable Endergebnis brauchst du nicht, du sammelst die Binärziffern in Umdrehen.

BTW: Ich habe gelernt, dass man in Java Klassen groß schreibt und Variablen und Methoden klein. Du machst es genau umgekehrt. Gewöhn es dir am besten frühzeitig richtig an.

2
DerAmateur98 
Beitragsersteller
 01.06.2021, 19:40
@Schachpapa

Danke für die Hilfe. Komischerweise funktioniert es nicht.

0
Schachpapa  01.06.2021, 19:45
@DerAmateur98

Mach aus

System.out.print(Umdrehen.reverse());

bitte

System.out.println(Umdrehen.reverse());

Ich nehme an, du kennst den Unterschied.

1
DerAmateur98 
Beitragsersteller
 01.06.2021, 20:01
@Schachpapa

Ja, ich lass den ja durchlaufen, aber das Ergebnis ist dasselbe. Er zeigt mir nur die Dezimalzahl an.

0
Schachpapa  01.06.2021, 20:07
@Schachpapa
import java.util.Scanner;

public class dezi {

    public static void main(String[] args) {

        try (Scanner eingabe = new Scanner(System.in)) {
            System.out.println("23");

            int Teilergebnis;
            int Endergebnis = 0;
            StringBuilder Umdrehen = new StringBuilder();
            //ZE= Zwischenergebnis

            for (int ZE = eingabe.nextInt(); ZE > 0; ZE = ZE / 2) {
                Teilergebnis = ZE % 2;
                // Endergebnis = Endergebnis + Teilergebnis;
                Umdrehen.append(Teilergebnis);
                System.out.println(Umdrehen.reverse());
            }
        }
    }
}

Bei mir läuft das und tut was es soll.

2
Schachpapa  01.06.2021, 20:09
@DerAmateur98
Ja, ich lass den ja durchlaufen, aber das Ergebnis ist dasselbe. Er zeigt mir nur die Dezimalzahl an.

Das ist etwas anderes als nichts!

Meist hilft es, wenn man sein Problem einfach richtig formuliert. Sonst wird das ein Ratespiel, bei dem man schnell die Lust verliert. So wie ich jetzt.

Lauffähige Version siehe andere Antwort hier.

1

Ich kenne zwar dein genaues Problem nicht, aber für mich sehen die Zeilen:
Endergebnis = Endergebnis + Teilergebnis
Umdrehen.append(Endergebnis)
nicht ganz so gut aus.
Versuche doch einfach mal
Umdrehen.append(Endergebnis)
Vielleicht macht dann dein Programm was du willst.


Saftschubsex  01.06.2021, 19:32

Umdrehen.append(Teilergebins) natürlich. copy - paste Fehler

1

Die in den anderen Antworten überarbeitete Fassung deines Quelltextes funktioniert. Zwei Anmerkungen noch dazu: Klassennamen sollten m.E. keine Umlaute enthalten und die Ausgabe der 23 macht irgendwie keinen Sinn.

Und hier noch eine etwas andere Version des Ganzen:

public class DecToBin {

     public static void main(String []args) {
         
         // Umzuwandelnde Dezimalzahl
         int dec = 23;
         
         // Initialisierung von Hilfsvariablen
         int result = 0;
         int rest = 0;
         StringBuilder bin = new StringBuilder();
         
         // Umrechnung nach Restwertverfahren
         while (dec > 0) {
             
             result = dec/2;
             rest = dec%2;
             
             System.out.println(dec + " : 2 = " + result + " R " + rest);
             
             dec = result;
             bin.append(rest);

         }
         
         System.out.println("=> " + bin.reverse());
         
     }
}
import java.util.Scanner;

public class dezibinär {

	 public static void main(String[] args) {
	     
	    try (Scanner eingabe = new Scanner(System.in)) {
				System.out.println("23");
				
				int Teilergebnis;
				int Endergebnis = 0;
				StringBuilder Umdrehen = new StringBuilder();
				//ZE= Zwischenergebnis
				
				for (int ZE = eingabe.nextInt(); ZE> 0; ZE = ZE/2)
				   
				{
				   
				  Teilergebnis = ZE % 2;
				  Endergebnis = Endergebnis + Teilergebnis;
				   
				  Umdrehen.append(Endergebnis);
				   
				   
				System.out.print(Umdrehen.reverse());
				
				}
			}
	     
	     
	  }
	   
	}