Brauche Hilfe bei Fehlersuche



  • Hallo,

    es wird sicher wieder ne Menge Tipps und Tricks geben, was ich besser machen könnte/sollte aber eigentlich möchte ich erst mal wissen, was hier ran falsch ist, warum der Compiler mir also einen Fehler meldet:

    import java.io.*;
    public class zufallszahlen
    {
      public zufallszahlen();
      public static void main (String argv[]) throws IOException
      {
        String str;
        int gen_wahl = 1;
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
        System.out.println();
        System.out.println("\t::Zufallszahlen::");
        System.out.println("\tVon Neumann-Generator:\t 1");
        System.out.println("\tQuadrattest-Generator:\t 2");
        System.out.println("\tLineare Kongruenz-Generator:\t 3");
        System.out.print("\tWaehlen Sie den zu verwendenen Generator");
        str = input.readLine();
        gen_wahl = Integer.parseInt(str);
    
        switch(gen_wahl)
        {
          case 1: neumann(); break;
          case 2: quadratrest(); break;
          case 3: kongruenz(); break;
          default: System.out.println("\tFehler");
        }
    
        public int neumann()
        {
          int startwert = 50;
          int k = 10;
          System.out.println("\t<<Von Neumann-Generator>>");
          System.out.println("\tGeben Sie einen ganzzahligen ");
          System.out.print("\tStartwert von 2 bis 999999 ein ");
          str = input.readLine();
          startwert = Integer.parseInt(str);
          System.out.println("\tBestimmen Sie nun die Anzahl ");
          System.out.print("\tder Wiederholungen: ");
          str = input.readLine();
          k = Integer.parseInt(str);
    
          int z = startwert;
          for (int i=0; i<k; i++)
          {
            if (z < 1000)
            {
              z = z*z;
            }
            else
            {
              z = (z*z)%1000000000;
              z = z/1000;
            }
          }
          System.out.println("Ihre zufaellig erstellte *Pseudo*-Zufallszahl: " + z);
          return 0;
        }
    
        public int quadratrest()
        {
          // ...
          return 0;
        }
    
        public int kongruenz()
        {
          System.out.println("\t<<Lineare Kongruenz-Generator>>");
          int a,b,c,k,z;
          System.out.print("\tGeben Sie eine Zahl a ein: ");
          str = input.readLine();
          a = Integer.parseInt(str);
          System.out.print("\tGeben Sie nun eine Zahl b ein, die teilerfremd sein soll: ");
          str = input.readLine();
          b = Integer.parseInt(str);
          System.out.println("\tGeben Sie nun eine Zahl n ein, die teilerfremd und ");
          System.out.print("\tgleichzeitig ein Teiler der Zahl a-1 sein soll");
          str = input.readLine();
          n = Integer.parseInt(str);
          System.out.println("\tBestimmen Sie nun die Anzahl k ");
          System.out.print("\tder Wiederholungen: ");
          str = input.readLine();
          k = Integer.parseInt(str);
          System.out.print("Geben Sie nun noch einen Startwert z ein! ");
          str = input.readLine();
          z = Integer.parseInt(str);
    
          for (int i=0; i<k; i++)
          {
            z = z*a;
            z = z+b;
            z = z%n;
          }
    
          System.out.println("Ihre zufaellig erstellte *Pseudo*-Zufallszahl: " + z);
          return 0;
        }
      }
    }
    

    Vielleicht kann mir ja jemand helfen, das Programm soll eigentlich Zufallszahlen erzeugen, der User wählt zuvor aus, welchen Generator er verwenden möchte! Ich hätte vielleicht auch besser mit Rückgabewerten arbeiten sollen, wenn ich den Fehler hier finde/kenne werde ich das auch versuchen und das Programm nach und nach verbessern (gern dann auch unter Berücksichtigung eurer Tipps).
    Habe fast gar keine Ahnung von Java, eigentlich war ich gerade dabei mich in C++ einzuarbeiten (da es vor gut einem Jahr endlich in der Schule dran kam) doch dann hieß es im neuen Schuljahr "C++ ist kein Zentralabithema, wir müssen jetzt Java thematisieren!".. Ja und nun habe ich ein wenig Grundwissen in C++ (gruß an akari 😉 ) und versuche gerade (gezwungenermaßen) Java zu erlernen!

    Naja, vielleicht könnt ihr mir ja helfen und mir sagen wieso das Programm nicht funktioniert!
    Bin für JEDE Hilfe dankbar,
    Lieben Gruß



  • die Java Code Tags rum und poste die Fehlermeldung



  • Java-Tags eingefügt!

    Fehlermeldung:

    zufallszahlen.java:27: illegal start of expression
    public int neumann()
    ^
    zufallszahlen.java:96:';' excepted
    }
    ^
    2 errors



  • Naja also da müsstest du aber nur mal genau schauen...
    Füge einfach mal in zeile 26 vor das "public int neumann()" eine geschlossene geschweifte Klammer "}" ein. Du hast da einfach vergessen, die main-Methode zu schließen.

    Naja und lösch mal noch am besten noch Zeile 4...

    Hab mir das aber auch nicht genau angeschaut, kann ja gut sein, dass noch weitere Fehler drinnen sind.



  • und ganz unten kann dann wahrscheinlich eine Klammer weg. Wenn du ein bischen mehr einrückst, dann sieht man auch besser wo die methoden anfangen und aufhören



  • Benutz Eclipse und Autoformat
    Ctrl+Shift+F



  • Den Fehler mit dem ; habe ich nun beseitigt! Es bleibt jedoch noch ein Fehler übrig.

    public int neumann()
        {
          int startwert = 50;
          int k = 10;
          System.out.println("\t<<Von Neumann-Generator>>");
          System.out.println("\tGeben Sie einen ganzzahligen ");
          System.out.print("\tStartwert von 2 bis 999999 ein ");
          str = input.readLine();
          startwert = Integer.parseInt(str);
          System.out.println("\tBestimmen Sie nun die Anzahl ");
          System.out.print("\tder Wiederholungen: ");
          str = input.readLine();
          k = Integer.parseInt(str);
    
          int z = startwert;
          for (int i=0; i<k; i++)
          {
            if (z < 1000)
            {
              z = z*z;
            }
            else
            {
              z = (z*z)%1000000000;
              z = z/1000;
            }
          }
          System.out.println("Ihre zufaellig erstellte *Pseudo*-Zufallszahl: " + z);
          return 0;
        }
    

    Dazu gibt es den Fehler:
    "illegal start of expression" mit Verweis auf die Zeile "public int neumann()"

    WO IST DER FEHLER?! 😞
    Gruß



  • Es wäre zwar hilfreich gewesen, wenn du den kompletten Code gepostet hättest, aber schätzungsweise hast du so was gemacht:

    public class zufallszahlen {
      public static void main(String []args) {
    
        public int neumann() {
    
        }
    
      }
    }
    

    Und das ist eher suboptimal. Mach doch mal so:

    //Klassen schreibt man groß
    public class Zufallszahlen {
        public static void main(String []args) {
    
        }  //Ende von main
    
        public int neumann() {
            //...  
        }
    
        public int kongruenz() {
            //...
        }
    
        public int quadratrest() {
            //...
        }  
    }  //Ende der Klasse
    


  • Hi,

    öhhhh...nur ne Frage: wieso rufst du in der main-Methode Objektmethoden auf, ohne vorher ein Objekt erstellt zu haben? Oder übersehe ich da was entscheidendes?

    /*...*/
        switch(gen_wahl)
        {
          case 1:
            neumann(); // Objektmethode, deklariert als "public int neumann()"
            break;
    
          case 2:
            quadratrest(); // hier auch
            break;
    
          case 3:
            kongruenz(); // hier auch
            break;
    
          default:
            System.out.println("\tFehler");
        }
    /*...*/
    


  • Ne da hast du recht.
    @Schnittenhainy:
    Erstell mal einen Standardkonstruktor und kopier dort den ganzen Code von der main-Methode rein. In der main-Methode erstellst du dann einfach nur noch ein Objekt von deiner Klasse.


Anmelden zum Antworten