Umwandler

Christian9

Mitglied
Guten Morgen, das folgende kleine Programm soll Dezimalzahlen in Binaer umrechnen. Leider kommt immer nur 0 raus, was ich auch am Algorithmus erkennen kann.
Ich denke das Problem ist am Anfang ggf mit dual haette ich arbeiten muessen ?
FUer einen Tip waere ich dankbar…


public class umrechnung {
public static int umw(int a) {
int d =0;
while (a>0) {
d = a%2+d;
a = a/2;

} // end of while
return a;

}
public static void main(String[] args) {
int a;
a = InOut.readInt("Eingabe Dualzahl");
System.out.println(umw(a));
 

Carcharoth

Bekanntes Mitglied
Ein Tipp: lass dir die verschiedenen Werte von d und a in der While-Schleife anzeigen und gehe es Schritt für Schritt durch. Dann kommst du vielleicht dem Problem auf die Spur.
 

Christian9

Mitglied
Habe ich versucht aber es passt irgendwie nicht. Wenn ich es manuell mache sieht es doch so aus:
23:2 = 11 R 1
11:2 = 5 R1
5:2 = 4 R1
4:2 = 2 R0
2:2 = 1 R0
usw…..
Wie ich das eigegeben habe in Java verstehe ich das a =a/2 = 2
dann gehe ich mein d an und hier verleasst mich dann das Wissen…. Ich return a sollte stimmen . Ein Tip waere super versuche es aber auch weiter.
 
K

kneitzel

Gast
Benenne die Variablen richtig! Was ist a, d und r?

Wenn Du die Variablen richtig benennen würdest, dann würdest Du die Variablen (hoffentlich) auch nicht mehr verwechseln.

Da du eine Schleife hast, die so lange läuft, wie a > 0 ist, kann a nur 0 oder kleiner sein! Da a aber immer nur halbiert wird, wird es nie negativ. Somit ist klar: Nach der While Schleife muss a 0 sein. Also kann ein "return a" schon einmal nicht stimmen. Ansonsten könntest Du die ganze Schleife gleich durch ein einfaches return 0; ersetzen.

Das ist aber nur der erste Fehler. Den zweiten Fehler wirst Du aber hoffentlich dann noch selbst heraus finden, wenn Du den ersten Fehler erst einmal beseitigt hast.
 

Christian9

Mitglied
Morgen, danke. Habe das jetzt umgeschrieben
Habe jetzt auch einen String b=""; verwendet da ich mich daran erinnerte das wir mal darueber gesprochen haben.
while (a!=0){
b=(a%2)+b;
a=a/2;
}
return b;

Was jetzt noch Probleme bereitet ist der Ausdruck, da ich da wieder eine Fehlermeldung bekommen. Arbeite da noch dran...
Danke soweit
 
K

kneitzel

Gast
Das sieht erst einmal etwas besser aus. Aber die Variablen haben immer noch schreckliche Namen.

Aber jetzt gibst Du aus, was Du zusammen baust und du versuchst nun, einen String zusammen zu setzen, so dass da nicht einfach die Anzahl der 1er zurück kommt (Dein d wäre sonst z.B. einfach nur 4 gewesen bei Deinem Beispiel ...)
 

Christian9

Mitglied
MORGEN, und nochmals vielen Dank. Habe das mal umgeschrieben. Mein Problem ist der Ausdruck. Wir hatten das noch nicht besprochen und ich bin nicht sicher was in System.out. println und ob das die richtige Anweisung in diesem Fall ist wegen dem String... Waere echt dankbar fuer einen Tip...
public class Dualbinaer {

public String DezBin (int zahl) {
String binaer="";
while (zahl!=0) {
binaer = (zahl%2)+binaer;
zahl=zahl/2;
} // end of while
return binaer;

} // end of main
public static void main (String[]args){

int zahl;
zahl = InOut.readInt("Bitte Dualzahl eingeben");
System.out.println(String (binaer""));
 

temi

Top Contributor
Verwende doch bitte die Codetags </>, damit man das besser lesen kann.
Java:
public class Dualbinaer {

    public String DezBin (int zahl) {
        String binaer="";
        while (zahl!=0) {
            binaer = (zahl%2)+binaer;
            zahl=zahl/2;
        } // end of while

        return binaer;
    } // end of main

    public static void main (String[]args){
        int zahl;
        zahl = InOut.readInt("Bitte Dualzahl eingeben");
        System.out.println(String (binaer""));

Mein Problem ist der Ausdruck.
Welcher?

Meinst du den Aufruf deiner Methode?

z. B. DezBin(42); oder DezBin(zahl); (btw: Methodennamen beginnen in Java per Konvention mit einem Kleinbuchstaben)

Der Rückgabewert ist dann ein String, den du mit println() ausgeben kannst.
 
Zuletzt bearbeitet:

Christian9

Mitglied
Danke, werde das beruecksichtigen.
Mein Problem liegt hier
System.out.println(String (binaer"")); Ich kriege da immer eine Fehlermeldung und Weiss nicht wie ich den String Inhalt zum Ausdruck bringe. Zahl eingeben ist klar und dann muesste aber die Ausgabe kommen aus dem String.....
 

temi

Top Contributor
Die Variable "binaer" ist eine lokale Variable der Methode DezBin(). Außerhalb dieser Methode hast du keinen Zugriff darauf.

Aber die Methode liefert als Rückgabewert direkt einen String, den du ausgeben kannst.

Dein Ablauf ist also:
Zahl einlesen;
Methode DezBin() aufrufen.
Rückgabewert der Methode ausgeben.

Wie du eine Methode aufrufst und den Rückgabewert einer Variablen zuweist, das kennst du. Du machst es z. B. hier zahl = InOut.readInt("Bitte Dualzahl eingeben"); Da wird die Methode readInt() aufgerufen.

Und noch ein Tipp:
Ich kriege da immer eine Fehlermeldung
Wenn du schon eine Fehlermeldung bekommst, dann solltest du sie uns auch mitteilen. Wir sind ja keine Hellseher.
 
Zuletzt bearbeitet:

Christian9

Mitglied
Temi, vielen Dank. Ich stehe aber irgendwie auf dem Schlauch… Habe jetzt
System.out.println(binaer)"")); aber das scheint natuerlich nicht logisch.. FInde dazu auch nix im Internet was ich jetzt hier eingeben muss.. Gucke weiter. Die Logik die du beschrieben hast war schon einmal hilfreich..
 

temi

Top Contributor
Temi, vielen Dank. Ich stehe aber irgendwie auf dem Schlauch… Habe jetzt
System.out.println(binaer)"")); aber das scheint natuerlich nicht logisch.. FInde dazu auch nix im Internet was ich jetzt hier eingeben muss.. Gucke weiter. Die Logik die du beschrieben hast war schon einmal hilfreich..
Also System.out.println(binaer)"")); hattest du ja schon die ganze Zeit in dieser Art. Das ist falsch. Aber Stück für Stück:

Wie sieht denn der Aufruf deiner Methode dezBin() aus?
Java:
int zahl; // Integervariable deklarieren
zahl = InOut.readInt("Bitte Dualzahl eingeben"); // Methode readInt() aufrufen und das Ergebnis der Variablen zuweisen

// Hier Aufruf der Methode dezBin() ergänzen...
 

Christian9

Mitglied
Serh hilfreich und vielen Dank fuer die Muehe am Sonntag. Dennoch kriege ich immer noch eine Fehlermeldung. Ich bin einfach total auf dem Schlauch weil oben ja String steht und ich auch die Fehlermeldung verstehe aber Weiss nicht wie ich das schreiben kann. Habe alles schon probiert.. Dualzahlaufruf kommt, gebe Zahl ein doch dann passiert nix weiter. Sorry, Java ist auf einem anderem PC und ich konnte mir das nur mit dem snip tool rausschneiden da ich auf diesem PC meine ganze emails verschicke..
Vielen Dank ! schon bis hierher..
1607252956376.png
 
K

kneitzel

Gast
Das liegt daran, dass Du im Laufe der Veränderungen auch das static Schlüsselwort von der Methode entfernt hast.

Du bist ja in der static main Methode. Daher kannst Du nur andere static Methoden aufrufen. Nicht statische Methoden benötigen eine Instanz, auf der sie aufgerufen werden.
 

Christian9

Mitglied
DANKE KNEITZEL UND TEMI, jetzt klappt es nachdem ich oben wieder static eingefuegt habe und unten dann die Methode eingefuegt… Schwere Geburt… Schoenen Sonntag und DANKE
 

Neue Themen


Oben