in for-Schleife deklarierte Variablen erhalten?

Dieses Thema im Forum "Java Basics - Anfänger-Themen" wurde erstellt von Fylgja, 6. Nov. 2011.

  1. Fylgja

    Fylgja Neues Mitglied

    Hej!

    Ich muss bis Dienstag noch 2 Programme schreiben, und da ich, nachdem ich heute den ganzen Tag davor saß, nicht so richtig weitergekommen bin, wollt' ich hier mal um Hilfe fragen!

    Mein Problem ist, dass ich einer Variable in einer for-Schleife einen Wert zuweise, den ich hinterher noch weiterverarbeiten will. Aber wenn die Schleife zu Ende ist, verliert die Variable diesen zugewiesenen Wert ja wieder. Kann man das irgendwie umgehen?
    Dann könnte ich die Aufgaben, denke ich, relativ problemlos lösen. Aber daran scheitert's im Moment :/

    Ich hoffe mal, ihr wisst, was ich meine, und schonmal danke für die Hilfe :)
     
  2. Camill

    Camill Neues Mitglied

    Ziemlich simpel - sofern ich dich richtig verstanden habe. Du musst die Variable einfach außerhalb der for Schleife deklarieren.
     
  3. Fylgja

    Fylgja Neues Mitglied

    Deklariert habe ich sie ganz am Anfang. Aber in der Schleife wird ihr Wert dann verändert, den ich hinterher noch brauche. Also wenn z.B. x in der Schleife auf 3 kommen würde, wäre es dann nach der Schleife immernoch bei 3? :>

    Mh und die Schleife an sich will grade auch nicht :/

    Also die Aufgabe ist, ein Programm zu schreiben, dass nach Eingabe einer Gleitkommazahl diese in 32-bit Darstellung wieder ausgibt.

    Ich will erstmal mit positiven Zahlen anfangen und dafür das Vorzeichen drucken. Dann mit der for-Schleife will ich den richtigen Exponenten finden der mit der while-Konstruktion darunter in Binärcode umgewandelt werden soll (ist nur bisher leider rückwärts und macht keine 8 Zeichen, wie es eigentlich sollte.)

    Ich habe bisher:

    Code (Java):
         float zahl = IO.readFloat ("Bitte eine Gleitkommazahl: ");
         int exponent = 0;
         float mantisse;
         float f;
         int potenz = 1;

         if (zahl > 0) {
         IO.print ("0");

         for (potenz = 1; potenz <= zahl; potenz = 2 * potenz) {
          if (potenz <= zahl) {
          exponent = exponent + 1;
          IO.print ("Exponent: " + exponent);

          }
           while (exponent != 0)  {
             if (exponent % 2 == 0) IO.print("0");
             else IO.print ("1");
             exponent = exponent / 2;
           }
         }
         }
     
    Irgendwie will die for-Schleife gerade auch nicht funktionieren. Wenn ich mir da direkt den Exponenten ausgeben lasse, kommt immer nur 1 raus :/

    Ach man.
     
  4. nillehammer

    nillehammer Guest

    Darfst Du Float.toIntBits und Integer.toBinaryString benutzen? Dann wäre es ein Zweizeiler.
    Code (Java):

    public static void outputFloatBits(final float f) {
      final int intBitsOfFloat = Float.toIntBits(f);
      System.out.println(Integer.toBinaryString(intBitsOfFloat);
    }
     
    Bei solchen Aufgaben ist ein Blick in die API-Dokumentation evtl. passender Klassen (hier also Float) immer eine gute Idee (es sei denn, der Prof verbietet das :-( ).

    //Edit: Integer.toBinaryString gibt evtl. führende Nullen in der Bitfolge nicht aus. Ggf. musst Du also überprüfen, ob der String die length 32 hat und notfalls noch die entsprechende Anzahl Nullen vorne dran basteln.
     
    Zuletzt von einem Moderator bearbeitet: 6. Nov. 2011
  5. langhaar!

    langhaar! Neues Mitglied

     
    Zuletzt bearbeitet: 6. Nov. 2011
  6. Fylgja

    Fylgja Neues Mitglied

    Gut, es funktioniert jetzt auf jeden Fall, ich hatte da wohl irgendwie 'nen Denkfehler.
    Danke aber ;)

    Ich setz' mich da dann gleich oder morgen nochmal dran. Und in der Zwischenzeit versuche ich rauszufinden, warum mein anderes Programm behauptet, 77 sei eine Primzahl^^

    Aber so bin ich schonmal ein bisschen weiter, danke! :)
     
  7. nillehammer

    nillehammer Guest

    Der Übungseffekt wäre, sich mit der API-Dokumentation auseinanderzusetzen und dort vielleicht was zu finden, was man benutzen kann. Das ist eine Kompetenz, die einem dann später bei der Benutzung sämtlicher auch externer Libraries (z.B alles von Apache commons) hilft.

    Und seit Java Open Source ist, kann man sich ja den Quellcode der vorgeschlagenen Methoden anschauen. Das Lesen (und hoffentlich Nachvollziehen) bestehenden Codes kann ja auch den gewünschten Lerneffekt haben.

    Wenn es natürlich nur darum geht, Schleifen zu üben, dann hast Du Recht. Dann sollte man als Prof aber auch Übungen nehmen, wo genau das geübt wird. Sprich, wo man ganz schnell sieht, ob man was falsch gemacht hat. Nur für das Üben von Schleifen, ist dieses Beispiel viel zu überfrachtet mit anderen -zumindest am Anfang- komplizierten Fragestellungen. Aber lassen wir das... über das didaktische Konzept von faulen Profs brauchen wir hier ja nicht zu schwadronieren.
     
Die Seite wird geladen...