Lottozahlen

javastudent25

Bekanntes Mitglied
Ich habe es jetzt einfach mal kompiliert, jetzt sind die Fehler auf einmal weg..??
na gut, aber er findet mir das File irgendwie nicht..
es liegt aber in dem selben Ordner wie es bei einem anderen Programm, der Fall war, da hats auch funktioniert :(

File nicht gefunden
5 6 11 14 19 20 4 Exception in thread "main" java.lang.NullPointerException
at Vergleich.vergleicheArrays(Vergleich.java:11)
at Lottozahlen.main(Lottozahlen.java:13)
 

javastudent25

Bekanntes Mitglied
Ok, das FileProblem habe ich jetzt raus

irgendwie kommen mir jetzt ein Haufen Fehler

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at KombiArray.stringTointArray(KombiArray.java:61)
at KombiArray.importFile(KombiArray.java:23)
at KombiArray.getKombiArray(KombiArray.java:65)
at Lottozahlen.main(Lottozahlen.java:13)

Im Code habe ich noch einen kleinen Fehler ausgebessert

Java:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

//Programm, um 3 vorgegebene Arrays mit zufällig generierten zu vergleichen

public class KombiArray {

    private int[] kombiArray; // in der Liste vorkommender Array/Kombination

    private void importFile() {

        String zeile = ("");

        try {

            FileReader reader = new FileReader("lottozahlen.txt");
            BufferedReader br = new BufferedReader(reader);

            while ((zeile = br.readLine()) != null) {
                stringTointArray(stringTostringArray(zeile));
            }

            br.close();

        } // end try
        catch (FileNotFoundException ex) {
            System.out.println("File nicht gefunden");
        } // end catch
        catch (IOException ex) {
            System.out.println("Lesefehler");
        } // end catch
        catch (IndexOutOfBoundsException ex) {
            System.out.println("der String[][] array ist zu klein für diese Textfilegroesse");
            System.out.println("maximal sind " + "900000" + " Zeilen moeglich");
            System.exit(1);
        } // end try

    } // end importFile

    private String[] stringTostringArray(String z) { // wandelt den eingelesenen
                                                    // Text
                                                    // in StringArray

        String string = z;
        String[] strArray = string.split(" ");

        for (int i = 0; i < strArray.length; i++) {
            System.out.print(strArray[i] + " ");
        }
        return strArray;
    }

    private void stringTointArray(String[] x) {

        String[] strArray = x;
        kombiArray = new int[strArray.length];
        for (int i = 0; i < strArray.length; i++){
            kombiArray[i] = Integer.parseInt(strArray[i]);
        }
    }

    public int[] getKombiArray() {
        importFile();
        return kombiArray;
    }


}
 
Zuletzt bearbeitet:

Meniskusschaden

Top Contributor
Also, das ist jetzt vielleicht gemein von mir, aber zwischen deinen letzten beiden Posts liegen nur ca. 10 Minuten und in der Zeit hast du sogar, dass FileProblem gelöst. Willst du nicht lieber etwas hartnäckiger versuchen, den anderen Fehler selbst zu beheben. Obwohl die Fehlermeldung so lang ist, ist es nur ein kleiner Fehler und die Meldung enthält alle nötigen Infos.
 

javastudent25

Bekanntes Mitglied
ja das Fileproblem war nicht schwer, weil das eine Datei war und kein Textdokument.
Also kein direkter Programmierfehler.
Naja, ich weiss nicht, ab hier komme ich wirklich nicht weiter und übrigens bin ich schon eine Stunde da dran, den Fehler zu finden.
 

Meniskusschaden

Top Contributor
Na ja, ich habe es vielleicht auch übertrieben. Ich weiß nämlich gar nicht, ob der Fehler leicht zu beheben ist, weil ich mir das nicht angesehen habe. Aber die Ursache ist leicht zu finden. Du musst nur nachsehen, in welcher Zeile das Problem auftritt. Die erkennst du, indem du in der langen Fehlermeldung die erste Zeile suchst, in der eine von dir programmierte Klasse genannt wird. Dort steht die Zeilennummer. Dann kannst du dir noch mal die allererste Meldung ansehen. Dort steht, was falsch gelaufen ist und auch mit welchen Eingabedaten es falsch gelaufen ist.
 

javastudent25

Bekanntes Mitglied
ok, die ersten 4 Zeilen sagen mir nichts, ich weiss auch nicht was ich jetzt genau machen sollte.
gut gehen wir weiter:
at KombiArray.stringTointArray(KombiArray.java:61)
ok,
kombiArray = Integer.parseInt(strArray);
ich seh da keinen Fehler..

import file zeile 24
stringArrayTointArray(stringTostringArray(zeile));
hmm, ich sehe keinen Fehler..

zeile 65
importFile();
auch nichts..

so was nun, ist ja alles richtig?

im main zeile 13
vergleich.vergleicheArrays(kombiArray.getKombiArray(), randomKombi.getrandomKombi());
auch kein fehler..
alles ok

was nun?
 

Meniskusschaden

Top Contributor
ok, die ersten 4 Zeilen sagen mir nichts, ich weiss auch nicht was ich jetzt genau machen sollte.
gut gehen wir weiter:
at KombiArray.stringTointArray(KombiArray.java:61)
ok,
kombiArray = Integer.parseInt(strArray);
ich seh da keinen Fehler..

Oft ist nur die erste Meldungszeile aus einer eigenen Klasse wichtig. Das ist hier bereits die Zeile, in der das Problem in Erscheinung tritt. Sie ist aber trotzdem korrekt. Du musst dir jetzt überlegen, was die Zeile eigentlich macht und das in Bezug zur eigentlichen Exception setzen, also der ersten Meldungszeile. Dann siehst du, was parseInt hier versucht und warum das nicht geht.
 

Jardcore

Top Contributor
Du kannst kein StringArray mit Integer.parseInt () in einen Int Wert umwandeln. Du musst schon die einzelnen Werte des strArray nehmen und die einzeln parsen.
 

Meniskusschaden

Top Contributor
Ich glaube, die eckigen Klammern werden hier irgendwie weggefiltert, wenn man sie nicht in Code-Tags setzt. Oben im Quelltext sieht die Zeile wie folgt aus:
Java:
kombiArray[i] = Integer.parseInt(strArray[i]);
 

javastudent25

Bekanntes Mitglied
leute kommt zum punkt
was soll denn da sein?
string index 1 2 3 wird umgeschrieben in index von int array
na und ist doch richtig
ich weiss nicht was ihr wollt.
redet klartext bitte
 
K

kneitzel

Gast
Geh den Code im Debugger durch, damit Du genau siehst, wie die Datei eingelesen wird und welche Werte dann als Strings gefunden werden. Und dann wirst Du den Fehler evtl. finden - entweder im Code oder in der Datei, die Du einliest. Denn der Fehler ist ja ein Laufzeitfehler, denn zur Laufzeit versuchst Du einen String in einen Integer Wert umzuwandeln, der nicht umwandelbar ist (weil es der leere String ist).
 
X

Xyz1

Gast
Ich hab mir (immer noch nicht) alles durchgelesen, aber diese Klasse könnte @javastudent25 bestimmt weiterhelfen:
Java:
import java.io.*;
import java.util.*;

/**
 */
public class Lotto {
    private static final Random rando = new Random();

    /*
     * Test all Methods... print/write/read 10 times random
     */
    public static void main(String[] args) throws IOException {
        for (int i = 0; i < 10; i++) {
            System.out.println(arrayToString(stringToArray(arrayToString(generateArray()))));
        }
        for (int i = 11111; i < 11121; i++) {
            arrayToFile(generateArray(), new File("" + i + ".txt"));
        }
        for (int i = 11111; i < 11121; i++) {
            System.out.println(arrayToString(arrayFromFile(new File("" + i + ".txt"))));
        }
    }

    private static int[] generateArray() {
        int[] intAry = new int[6];
        boolean[] boolAry = new boolean[49];
        for (int i = 0; i < intAry.length;) {
            int r = rando.nextInt(boolAry.length);
            if (!boolAry[r]) {
                boolAry[r] = true;
                intAry[i] = r + 1;
                i++;
            }
        }
        Arrays.sort(intAry);
        return intAry;
    }

    private static String arrayToString(int[] intAry) {
        String s = "";
        for (int i : intAry) {
            s += i + " ";
        }
        return s;
    }

    private static int[] stringToArray(String s) {
        int[] intAry = new int[6];
        String[] split = s.split("\\s+");
        for (int i = 0; i < intAry.length; i++) {
            intAry[i] = Integer.parseInt(split[i]);
        }
        return intAry;
    }

    private static void arrayToFile(int[] intAry, File file) throws IOException {
        stringToFile(arrayToString(intAry), file);
    }

    private static void stringToFile(String s, File file) throws IOException {
        FileWriter fw = new FileWriter(file);
        fw.write(s);
        fw.close();
    }

    private static int[] arrayFromFile(File file) throws IOException {
        return stringToArray(stringFromFile(file));
    }

    private static String stringFromFile(File file) throws IOException {
        FileReader fr = new FileReader(file);
        char[] cbuf = new char[(int) file.length()];
        fr.read(cbuf);
        fr.close();
        return new String(cbuf);
    }
}

Was passiert da? Es kann ein Array generiert werden und dieses kann in eine Datei geschrieben werden.

Frage nebenbei: Sollen Kolonnen von Zahlen in eine Datei geschrieben werden?

Über Kritik bin ich dankbar.
 

javastudent25

Bekanntes Mitglied
ok, verstanden.
das liegt wohl dran, dass im Textdokument
die erste kombination in einer Zeile steht
dann 2 Leerzeilen kommen und dann erst wieder eine Kombi usw.

Denn das erste Mal funktioniert ja, aber Zeile 2 gibt es Probleme.

das heisst ich bastle jetzt mal ein if rein..
aber geht das irgendwie im Textfile bereits die Leerzeichen zu entfernen?

Edit: Ich habe jetzt mal das hier reingebastelt, aber irgendwie ignoriert er mir das if in der Methode importFile()

Java:
    while ((zeile = br.readLine()) != null) {
                if (zeile != "") {
                    stringArrayTointArray(stringTostringArray(zeile));
                }
            }
 
X

Xyz1

Gast
Wie ist denn die Datei aufgebaut? Kannst du mal alles posten, was du im Moment hast, innerhalb von Java tags?
 

javastudent25

Bekanntes Mitglied
Das Programm sieht so aus:

Ich weiss jetzt nur noch nicht, warum mich das Programm anlügt und den Zaehler in der Klasse Vergleich auf 5 setzt, obwohl nur 2 Arrays gleich sind.
Ich habe die Schleife so gemacht, dass ich sie zuerst ganz durchgehe und dann schaue, ob bool immer noch true ist, wenn ja setze ich den zaehler hoch.

Das Textdokument lottozahlen.txt sieht so aus:

4 11 22 30 32 37 1


1 4 20 25 30 31 8


9 16 23 25 30 34 3


9 16 23 25 30 34 3



Java:
import java.io.*;
import java.text.*;
import java.util.*;
import java.lang.String;

public class Lottozahlen {

    public static void main(String[] args) {

       
        KombiArray kombiArray = new KombiArray();
        kombiArray.importFile();
       
    }
   
}


Java:
public class Vergleich {

    private int zaehler = 0;

    Vergleich() {

    }

    public void vergleicheArrays(int[] x, int[] y) {

        int[] kombiArray = x;
        int[] RandomArray = y;
        boolean bool = true;
        int i = 0;

        while (bool == true) {
            for (i = 0; i < RandomArray.length; i++) {
                if (kombiArray[i] != RandomArray[i]) {
                    bool = false;
                }
            }
            if (bool == true) {
                bool = false;
                zaehler++;
            }
        }

    }

    public int getZaehler() {
        return zaehler;
    }
}


Java:
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Random;
import java.util.Set;

public class RandomKombi {

    private int[] zufallsZahlen = new int[6];
    private int[] gluecksZahl = new int[1];
    private int[] randomKombi = new int[zufallsZahlen.length + gluecksZahl.length];
   

    public int[] getrandomKombi() {
        getGesamtArray();
        return randomKombi;
    }

    private void zahlenAusgeben() {

        for (int i = 0; i < randomKombi.length; i++) {
            System.out.print(randomKombi[i] + " ");
        }
        System.out.println("\n");
        System.out.println("Dies ist die zufällig generierte Kombination \n");
    }

    private void erzeugeZahlenArray() {

        Random rand = new Random();
        int randomNumber;
        for (int i = 0; i < zufallsZahlen.length; i++) {
            do {
                randomNumber = rand.nextInt(42) + 1;
            } while (containsValue(zufallsZahlen, randomNumber));
            zufallsZahlen[i] = randomNumber;
        }
    }

    private void erzeugeGlueckszahl() {

        Random random = new Random();
        int zufall = random.nextInt(6) + 1;
        gluecksZahl[0] = zufall;

    }

    private void getGesamtArray() {

        erzeugeZahlenArray();
        Arrays.sort(zufallsZahlen);
        erzeugeGlueckszahl();

        for (int i = 0; i < zufallsZahlen.length; i++) {
            randomKombi[i] = zufallsZahlen[i];
        }
        for (int i = 0; i < gluecksZahl.length; i++) {
            randomKombi[zufallsZahlen.length + i] = gluecksZahl[i];
        }
        zahlenAusgeben();

    }

    private boolean containsValue(int[] array, int value) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == value) {
                return true;
            }
        }
        return false;
    }


}


Java:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.*;

//Programm, um 3 vorgegebene Arrays mit zufällig generierten zu vergleichen

public class KombiArray {
   
    private int[] kombiArray; // in der Liste vorkommender Array/Kombination
    //private int[] randomKombination = {7, 22, 25, 29, 31, 40, 6};
    private int[] randomKombination = {9, 16, 23, 25, 30, 34, 3 };
    Vergleich vergleich = new Vergleich();
   
    KombiArray(){
           
    RandomKombi randomKombi = new RandomKombi();
    //randomKombination = randomKombi.getrandomKombi();
    }

    public void importFile() {

        String zeile = ("");

        try {

            FileReader reader = new FileReader("lottozahlen.txt");
            BufferedReader br = new BufferedReader(reader);

            while ((zeile = br.readLine()) != null) {
                if (!zeile.equals( "")) {
                    stringArrayTointArray(stringTostringArray(zeile));   
                }
                vergleich.vergleicheArrays(kombiArray, randomKombination);
            }

            br.close();

        } // end try
        catch (FileNotFoundException ex) {
            System.out.println("File nicht gefunden");
        } // end catch
        catch (IOException ex) {
            System.out.println("Lesefehler");
        } // end catch
        catch (IndexOutOfBoundsException ex) {
            System.out.println("der String[][] array ist zu klein für diese Textfilegroesse");
            System.out.println("maximal sind " + "900000" + " Zeilen moeglich");
            System.exit(1);
        } // end try
        System.out.println("Der zufällig generierte Array kommt im File insgesamt " + vergleich.getZaehler() + " mal vor");
    } // end importFile

    private String[] stringTostringArray(String z) { // wandelt den eingelesenen
                                                        // Text
                                                        // in StringArray

        String string = z;
        String[] strArray = string.split(" ");

        for (int i = 0; i < strArray.length; i++) {
            System.out.print(strArray[i] + " ");
        }
        System.out.println("\n");
        return strArray;
    }

    private void stringArrayTointArray(String[] x) {

        String[] strArray = x;
        kombiArray = new int[strArray.length];
        for (int i = 0; i < strArray.length; i++) {
            kombiArray[i] = Integer.parseInt(strArray[i]);
        }

    }

}
 

Meniskusschaden

Top Contributor
Es wäre besser, die Testdatei in Code-Tags zu posten. Ich glaube, das hat DerWissende in seinem Post gemeint. Sind da wirklich Leerzeilen enthalten? Dann solltest du dir noch mal ansehen, unter welchen Bedingungen du vergleicheArrays aufrufst:

Java:
while ((zeile = br.readLine()) != null) {
     if (!zeile.equals( "")) {
          stringArrayTointArray(stringTostringArray(zeile));
     }
     vergleich.vergleicheArrays(kombiArray, randomKombination);
}
 

javastudent25

Bekanntes Mitglied
Es wäre besser, die Testdatei in Code-Tags zu posten. Ich glaube, das hat DerWissende in seinem Post gemeint. Sind da wirklich Leerzeilen enthalten? Dann solltest du dir noch mal ansehen, unter welchen Bedingungen du vergleicheArrays aufrufst:

Java:
while ((zeile = br.readLine()) != null) {
     if (!zeile.equals( "")) {
          stringArrayTointArray(stringTostringArray(zeile));
     }
     vergleich.vergleicheArrays(kombiArray, randomKombination);
}

Hab den Fehler soeben auch gefunden.
Was meinst du mit Code-Tags
Ich habe ja den Code der TestVersion innerhalb von code=Java und /code mit eckigen Klammern

und durch if (!zeile.equals( "")) spielt ja vergleicheArrays ja keine Rolle mehr.
Da ich damit ja garantiere, dass immer Arrays verglichen werden oder hab ich da irgendwo einen Denkfehler??
Es funktioniert so jetzt.
 

javastudent25

Bekanntes Mitglied
Übrigens, meine Java Note der Abschlussprüfung ist nur demotivierend (2,9). 6 ist die beste Note.
Ich hab die Note zwar mit anderen Fächern raufgezogen, aber ja es vermasselt mir halt den scheiss Schnitt.
Aber es regt mich mehr auf, dass ein Klassenkamerad, der einen sechser hat und zufällig neben mir sitzt, bei dem Lottoprogramm überhaupt keinen Schimmer hat und nur dumme Fragen stellt...
Da frag ich mich nur was ich falsch mache..
 

Meniskusschaden

Top Contributor
Hab den Fehler soeben auch gefunden.
Was meinst du mit Code-Tags
Ich habe ja den Code der TestVersion innerhalb von code=Java und /code mit eckigen Klammern
Ich meinte die Textdatei mit den Testdaten, damit man genau sieht, ob da Leerzeilen oder Leerzeichen enthalten sind.

und durch if (!zeile.equals( "")) spielt ja vergleicheArrays ja keine Rolle mehr.
Da ich damit ja garantiere, dass immer Arrays verglichen werden oder hab ich da irgendwo einen Denkfehler??
Es funktioniert so jetzt.
Wundert mich, dass es funktioniert, denn der Aufruf von vergleicheArrays() steht ja ausserhalb der Bedingung. Hätte erwartet, dass der Vergleich für jede Leerzeile noch einmal mit dem vorherigen Array durchgeführt wird.
 

InfectedBytes

Top Contributor
schön das dein programm nun funktioniert, allerdings würde ich dir sehr empfehlen es nochmal komplett zu überarbeiten, oder es vielleicht sogar einfach neu zu schreiben.
Es ist sehr unübersichtlich und durcheinander.
Manche sachen können auch sehr stark vereinfacht werden, wie z.b. dieses code fragment:
Java:
public void vergleicheArrays(int[] x, int[] y){
       int[] kombiArray = x;
       int[] RandomArray = y;
       boolean bool =true;
       int i =0;
       while(bool ==true){
           for(i =0; i < RandomArray.length; i++){
               if(kombiArray[i]!= RandomArray[i]){
                    bool =false;
               }
           }
           if(bool ==true){
                bool =false;
                zaehler++;
           }
       }
   }
zum einen prüfst du sowas wie: while(bool == true)
es reicht aber vollkommen aus: while(bool)
nebenbei ist bool natürlich auch ein unglücklicher name^^
Weiterhin ist die gesamte while schleife unnötig, da du sie immer nach dem ersten durchlauf abbrichst.
Kurzum, dein obiger code könntest du auf folgendes vereinfachen:
Java:
public boolean vergleicheArrays(int[] x, int[] y) {
  for(int i=0; i<x.length; i++) {
    if(x[i] != y[i]) return false;
  }
  return true;
}

Den eigenen Code nochmal zu überarbeiten oder neu zuschreiben kann dem Verständnis sehr helfen
 

javastudent25

Bekanntes Mitglied
schön das dein programm nun funktioniert, allerdings würde ich dir sehr empfehlen es nochmal komplett zu überarbeiten, oder es vielleicht sogar einfach neu zu schreiben.
Es ist sehr unübersichtlich und durcheinander.
Manche sachen können auch sehr stark vereinfacht werden, wie z.b. dieses code fragment:
Java:
public void vergleicheArrays(int[] x, int[] y){
       int[] kombiArray = x;
       int[] RandomArray = y;
       boolean bool =true;
       int i =0;
       while(bool ==true){
           for(i =0; i < RandomArray.length; i++){
               if(kombiArray[i]!= RandomArray[i]){
                    bool =false;
               }
           }
           if(bool ==true){
                bool =false;
                zaehler++;
           }
       }
   }
zum einen prüfst du sowas wie: while(bool == true)
es reicht aber vollkommen aus: while(bool)
nebenbei ist bool natürlich auch ein unglücklicher name^^
Weiterhin ist die gesamte while schleife unnötig, da du sie immer nach dem ersten durchlauf abbrichst.
Kurzum, dein obiger code könntest du auf folgendes vereinfachen:
Java:
public boolean vergleicheArrays(int[] x, int[] y) {
  for(int i=0; i<x.length; i++) {
    if(x[i] != y[i]) return false;
  }
  return true;
}

Den eigenen Code nochmal zu überarbeiten oder neu zuschreiben kann dem Verständnis sehr helfen

ich hab deinen Code mal eingegeben, weiss aber überhaupt nicht warum dieser jetzt auch funktioniert.
1. brauche ich ja jetzt so das boolean nicht mehr, man könnte ja jetzt das return auch weglassen
2. gehe ich alles durch, die Schleife endet und danach setze ich den zaehler nach jedem Durchgang hoch.
troztdem aber ist so das Ergebnis 11

übrigens funktioniert das Programm nur, weil ich den vergleichArray() in die if genommen habe.
hatte ja geschrieben, dass ich den Fehler raus habe..

hier nochmals die Codes:

Das Textdokument lottozahlen.txt sieht so aus:

Java:
4 11 22 30 32 37 1


1 4 20 25 30 31 8


9 16 23 25 30 34 3


9 16 23 25 30 34 3


9 16 23 25 30 34 3


9 16 23 25 30 34 3


9 16 23 25 30 34 3


9 16 23 25 30 34 3


9 16 23 25 30 34 3


9 16 23 25 30 34 3


9 16 23 25 30 34 3


9 16 23 25 30 34 3


9 16 23 25 30 34 3



Java:
import java.io.*;
import java.text.*;
import java.util.*;
import java.lang.String;

public class Lottozahlen {

    public static void main(String[] args) {

      
        KombiArray kombiArray = new KombiArray();
        kombiArray.importFile();
      
    }
  
}


Java:
public class Vergleich {

    private int zaehler = 0;

    Vergleich() {

    }

//    public void vergleicheArrays(int[] x, int[] y) {
//
//        int[] kombiArray = x;
//        int[] RandomArray = y;
//        boolean bool = true;
//        int i = 0;
//
//        while (bool == true) {
//            for (i = 0; i < RandomArray.length; i++) {
//                if (kombiArray[i] != RandomArray[i]) {
//                    bool = false;
//                }
//            }
//            if (bool == true) {
//                bool = false;
//                zaehler++;
//            }
//        }
//
//    }
   
    public boolean vergleicheArrays(int[] x, int[] y) {
   
             for(int i=0; i<x.length; i++) {
               if(x[i] != y[i]) return false;
             }
             zaehler++;
             return true;
    }

    public int getZaehler() {
        return zaehler;
    }
}


Java:
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Random;
import java.util.Set;

public class RandomKombi {

    private int[] zufallsZahlen = new int[6];
    private int[] gluecksZahl = new int[1];
    private int[] randomKombi = new int[zufallsZahlen.length + gluecksZahl.length];
  

    public int[] getrandomKombi() {
        getGesamtArray();
        return randomKombi;
    }

    private void zahlenAusgeben() {

        for (int i = 0; i < randomKombi.length; i++) {
            System.out.print(randomKombi[i] + " ");
        }
        System.out.println("\n");
        System.out.println("Dies ist die zufällig generierte Kombination \n");
    }

    private void erzeugeZahlenArray() {

        Random rand = new Random();
        int randomNumber;
        for (int i = 0; i < zufallsZahlen.length; i++) {
            do {
                randomNumber = rand.nextInt(42) + 1;
            } while (containsValue(zufallsZahlen, randomNumber));
            zufallsZahlen[i] = randomNumber;
        }
    }

    private void erzeugeGlueckszahl() {

        Random random = new Random();
        int zufall = random.nextInt(6) + 1;
        gluecksZahl[0] = zufall;

    }

    private void getGesamtArray() {

        erzeugeZahlenArray();
        Arrays.sort(zufallsZahlen);
        erzeugeGlueckszahl();

        for (int i = 0; i < zufallsZahlen.length; i++) {
            randomKombi[i] = zufallsZahlen[i];
        }
        for (int i = 0; i < gluecksZahl.length; i++) {
            randomKombi[zufallsZahlen.length + i] = gluecksZahl[i];
        }
        zahlenAusgeben();

    }

    private boolean containsValue(int[] array, int value) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == value) {
                return true;
            }
        }
        return false;
    }


}


Java:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.*;

//Programm, um 3 vorgegebene Arrays mit zufällig generierten zu vergleichen

public class KombiArray {
   
    private int[] kombiArray; // in der Liste vorkommender Array/Kombination
    //private int[] randomKombination = {1, 4, 20, 25, 30, 31, 8};
    private int[] randomKombination = {9, 16, 23, 25, 30, 34, 3 };
    Vergleich vergleich = new Vergleich();
   
    KombiArray(){
           
    RandomKombi randomKombi = new RandomKombi();
    //randomKombination = randomKombi.getrandomKombi();
    }

    public void importFile() {

        String zeile = ("");

        try {

            FileReader reader = new FileReader("lottozahlen.txt");
            BufferedReader br = new BufferedReader(reader);

            while ((zeile = br.readLine()) != null) {
                if (!zeile.equals( "")) {
                    stringArrayTointArray(stringTostringArray(zeile));   
                    vergleich.vergleicheArrays(kombiArray, randomKombination);
                }
               
            }

            br.close();

        } // end try
        catch (FileNotFoundException ex) {
            System.out.println("File nicht gefunden");
        } // end catch
        catch (IOException ex) {
            System.out.println("Lesefehler");
        } // end catch
        catch (IndexOutOfBoundsException ex) {
            System.out.println("der String[][] array ist zu klein für diese Textfilegroesse");
            System.out.println("maximal sind " + "900000" + " Zeilen moeglich");
            System.exit(1);
        } // end try
        System.out.println("Der zufällig generierte Array kommt im File insgesamt " + vergleich.getZaehler() + " mal vor");
    } // end importFile

    private String[] stringTostringArray(String z) { // wandelt den eingelesenen
                                                        // Text
                                                        // in StringArray

        String string = z;
        String[] strArray = string.split(" ");

        for (int i = 0; i < strArray.length; i++) {
            System.out.print(strArray[i] + " ");
        }
        System.out.println("\n");
        return strArray;
    }

    private void stringArrayTointArray(String[] x) {

        String[] strArray = x;
        kombiArray = new int[strArray.length];
        for (int i = 0; i < strArray.length; i++) {
            kombiArray[i] = Integer.parseInt(strArray[i]);
        }

    }

}
 

Meniskusschaden

Top Contributor
kann mir nun noch jemand sagen, warum das so tut mit dem zaehler??
das sollte ja eigentlich nicht funktionieren...
Wenn die if-Bedingung zutrifft, verlässt du die Methode mittels return false und erreichst zaehler++; nicht mehr. Meinst du das?
Java:
public boolean vergleicheArrays(int[] x, int[] y) {
 
             for(int i=0; i<x.length; i++) {
               if(x[i] != y[i]) return false;
             }
             zaehler++;
             return true;
    }
 

Ähnliche Java Themen

Neue Themen


Oben