Java: int-Variablen miteinander verknüpfen

vom 05.06.2012, 08:51 Uhr

Ich size hier jetzt gerade am Computer und scheitere an einem Punkt einer Übungs-Aufgabe für die Java-Programmierung. Ich hatte vor dem gestrigen Tag noch nie etwas mit Java zu tun und entschuldige mich daher gleich für etwaiges nicht vorhandenes Wissen, sollte ich das alles kennen, würde ich aber auch kaum hier im Hilfe fragen.

Und zwar soll ich ein kleines konsolenbasiertes Java-Programm entwicklen, welches Dezimalzahlen in Binärzahlen umwandeln kann. Dies kann man ja aus mathematischer Sicht tun, indem man die Dezimalzahlen immer durch zwei divisiert und den Rest addiert, bis das Ergebnis der Division 0 ist. Eine Division mit Rest habe ich nun auch schon hinbekommen in Java, jedoch muss ich es ja schaffen, die int-Werte des Restes immer wieder hintereinander zu hängen.

Ich könnte dies natürlich so lösen, dass ich für jede Stelle der Binärzahl eine neue Variable erstelle, jedoch ist dies ja nicht gerade so praktisch, da ich so ja theoretisch unendlich viele Rechnungen durchführen muss und diese alle extra aufschreiben muss, um alle Zahlen abdecken zu können. Daher suche ich nach einer Möglichkeit, die Reste-Division beliebig oft zu wiederholen und die Reste-Variablen aneinander zu hängen, bis die Rechnung fertig gibt.

Hier schon mal den relevanten Code für die Reste-Division, den ich geschrieben habe:

Code: Alles auswählen
try {
         System.out.println("Geben Sie den Dividenden ein");
         eingabe1 = br.readLine();
         System.out.println("Geben Sie den Divisor ein");
         eingabe2 = br.readLine();
      } catch (IOException e) {
         System.out.println("Fehler");
      }

      int dividend = new Integer(eingabe1);
      int divisor = new Integer(eingabe2);
      // Ende der Eingabe von Werten
      int p = dividend / divisor;
      int s = dividend - p * divisor;

      System.out.println(dividend + "/" + divisor + "=" + p + "Rest" + s);

Benutzeravatar

» delpiero224 » Beiträge: 1378 » Talkpoints: 4,49 » Auszeichnung für 1000 Beiträge



Ich nehme mal an, dein "divisor" soll immer 2 sein. Daher könntest du anstatt "divisor" immer 2 schreiben, und hättest eine Eingabe weniger, somit wäre das ganze übersichtlicher, aber so, wie du es gemacht hast, geht das auch. Um das Problem zu lösen, würde ich in der Klasse, in der du die Variablen deklariert hast, eine weitere Methode implementieren, die dann die beiden Variablen bearbeiten. Dafür benötigst du dann von deinem Code nur den Teil bis "// Ende der Eingabe von Werten". Danach würde ich noch die Zeile "p = dividend" einfügen und außerdem die Variable s erst in der Methode deklarieren. Die Methode selbst würde ich dann so schreiben (mit einigen Anmerkungen von mir):

Code: Alles auswählen
public void binärBerechnen() {
       private int s;          // Deklariert s in der Methode, sodass bei jedem Methodenaufruf s neu definiert wird
       s = p % divisor;          // Berechnet den Rest in Kurzform (genannt: "Modulo")
       p = p / divisor;          // Neuer Wert von p wird errechnet
       if (p == 0){
              System.out.print (dividend "=" s);
       }
       // Gibt die erste Binärstelle zurück, falls p = 0 ist und somit die Rechnung zu Ende ist
       else{
              System.out.print (binärBerechnen() + s);
       }
// Ruft zuerst die Methode nochmal auf, damit Binärstellen, die zuerst kommen, zuerst geschrieben werden, und schreibt schließlich dann auch diese Binärstelle
}


So hätte ich die Umwandlung von Dezimalzahlen in Binärzahlen programmiert. Wichtig ist bei meiner Methode auch, dass ich System.out.print anstatt System.out.println verwendet habe, da so nicht nach jeder Systemausgabe ein Absatz eingefügt wird. Ich hoffe, mein Lösungsansatz war verständlich und hilfreich.

» S77S77 » Beiträge: 356 » Talkpoints: 1,79 » Auszeichnung für 100 Beiträge


Die Lösung klingt super, vielen Dank! Das mit dem outprint ohne "ln" habe ich noch gar nicht gekannt, da ich mit Java - wie gesagt - erst seit zwei Tagen arbeite und dadurch mit der Materie noch nicht ganz so vertraut bin. Ich versuche das ganze zu Übungszwecken nun auch noch einmal mit der ToString()-Methode, was nun auch schon ansatzweise funktioniert.

Benutzeravatar

» delpiero224 » Beiträge: 1378 » Talkpoints: 4,49 » Auszeichnung für 1000 Beiträge



Ähnliche Themen

Weitere interessante Themen

^