Forum: PC-Programmierung Zufallszahlen mit Java Fehlermeldung


von Tom (Gast)


Lesenswert?

Hallo, ich möchte mit Java Zufallszahlen(Lottozahlen) generieren. Also 6 
Zahlen zwischen 1 und 49 und diese dann auch ausgeben können
hier mal der Code. Das Compilieren gibt keine Syntax-Fehler
Allerdings wenn ich die Methode generiere aufrufe gibt es die 
Fehlermeldung
java.lang.NullPointerExeption in der Zeile wo die Zahlen in den zahlen 
vektor geschrieben werden also in der Methode generiere 2. Zeile. Diese 
Meldung tritt wohl auf wenn was null ist allerdings kann hier doch 
nichts null sein ich generiere doch Zahlen zw. 1 und 49 oder?
So recht weiß ich nicht was falsch ist bzw. warum diese Meldung kommt.

Kann mir jemand helfen?
1
public class Lottozahlen
2
{
3
    private Random zufzahl;
4
    private int[] zahlen;
5
6
    public Lottozahlen()
7
    {
8
        zufzahl = new Random();
9
    }
10
    public int[] generiere()
11
    {
12
        for(int i=0; i<6; i++){
13
            zahlen[i] = 1 + zufzahl.nextInt(49);} //liefert zahl zw.0-48 +1
14
        return zahlen;
15
    }
16
    public void ausgeben()
17
    {
18
        for(int i=0;i<6;i++){
19
            System.out.println(zahlen[i]);}
20
    }
21
}

Vielen Dank!
Gruß Tom

von Peter II (Gast)


Lesenswert?

Tom schrieb:
> So recht weiß ich nicht was falsch ist bzw. warum diese Meldung kommt.

ich kenn java jetzt nicht genau, aber vermutlihc musst du die größe von 
dem Array

private int[] zahlen;

festlegen.

Du kannst nicht einfach dort etwas reinscheiben.

von Karl H. (kbuchegg)


Lesenswert?

Tom schrieb:

> Meldung tritt wohl auf wenn was null ist allerdings kann hier doch
> nichts null sein ich generiere doch Zahlen zw. 1 und 49 oder?

Die generierten Zahlen sind auch nicht das Problem.
Aber du hast noch kein Array. Das ist null.

Auch ein Array muss in Java mit new erst mal erzeugt werden.

>     public Lottozahlen()
>     {
>         zufzahl = new Random();
          zahlen = new int[6];

>     }


Für die Zukunft merken.
Eine Null-Pointer exception ist immer ein Hinweis darauf, dass es ein 
Objekt nicht gibt, welches es in der Verwendung eigentlich schon geben 
sollte - das also irgendwo ein new fehlt.
In deinem konkreten Fall ist das eben das Array.

von Markus M. (mark_m)


Lesenswert?

Ein Array gehört in Java nicht mehr zu den Elementaren Datentypen. Es 
wird schon als Objekt bewerte. Objekte werden mit "new" angelegt.

Ein Array kann aber mit Literalen Werten initialisiert werden, dann ist 
kein "new" notwendig.

Grüsse

von Tom (Gast)


Lesenswert?

Ok, das geht jetzt. Danke euch. Wenn ich nun ausgeben aufrufen() aufrufe 
werden Zahlen ausgegeben(so wies ja auch sein sollte) allerdings, kommt 
die Meldung: java.lang.ArrayIndexOutOfBoundsException: 6

Was hat es damit auf sich?

von Udo S. (urschmitt)


Lesenswert?

Tom schrieb:
> allerdings, kommt
> die Meldung: java.lang.ArrayIndexOutOfBoundsException: 6

Denk mal nach. Welchen Index darf ein Array mit 6 Elementen haben, wenn 
der erste Index immer eine 0 ist.

Die java Exceptions liefern dir eigenlich immer eine Zeilennummer. Damit 
kann man im Allgemeinen den fehler schon gut eingrenzen.
Ausserdem kann man prima debuggen.
Versuchs mal.

von Markus M. (mark_m)


Lesenswert?

Die Meldung will dir sagen, dass die Laufvariable "i" den Wert 6 
enthält. Du darfst aber bei einem Array mit 6 Elementen nur von "0" bis 
"5" zählen. 6 -> "Out of Range"

Grüsse

von Tom (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Tom schrieb:
>> allerdings, kommt
>> die Meldung: java.lang.ArrayIndexOutOfBoundsException: 6
>
> Denk mal nach. Welchen Index darf ein Array mit 6 Elementen haben, wenn
> der erste Index immer eine 0 ist.
>
> Die java Exceptions liefern dir eigenlich immer eine Zeilennummer. Damit
> kann man im Allgemeinen den fehler schon gut eingrenzen.
> Ausserdem kann man prima debuggen.
> Versuchs mal.

Markus M. schrieb:
> Die Meldung will dir sagen, dass die Laufvariable "i" den Wert 6
> enthält. Du darfst aber bei einem Array mit 6 Elementen nur von "0" bis
> "5" zählen. 6 -> "Out of Range"
>
> Grüsse

ja nur ich habe doch in der for-Schleife i von 0 bis 5 for(int 
i=0;i<6;i++){...} es kommt also gar keine 6 vor

von Tom (Gast)


Lesenswert?

Ich meine i steht zwar am ende auf 6 aber die Schleife wird ja nur von i 
= 0 bis 5 durchlaufen

von Tom (Gast)


Lesenswert?

Problem ist mittlerweile behoben! Nochmals danke ;)

von Εrnst B. (ernst)


Lesenswert?

Tom schrieb:
> Problem ist mittlerweile behoben!

Und war soooo peinlich, dass du es uns lieber erspart hast, oder?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Solche "Probleme" spart man sich übrigens wenn man gleich foreach 
verwendet (nicht nur bei Arrays):
http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

von Tom (Gast)


Lesenswert?

Εrnst B✶ schrieb:
> Tom schrieb:
>> Problem ist mittlerweile behoben!
>
> Und war soooo peinlich, dass du es uns lieber erspart hast, oder?

Peinlich finde ich eher andere Dinge...

Läubi .. schrieb:
> Solche "Probleme" spart man sich übrigens wenn man gleich foreach
> verwendet (nicht nur bei Arrays):
> http://docs.oracle.com/javase/1.5.0/docs/guide/lan...

Hab ich nachher auch bemerkt. Ist inzwischen mit foreach gemacht worden. 
Aber  Danke für den Hinweis!

von Tek (Gast)


Lesenswert?

Tom schrieb:
> Εrnst B✶ schrieb:
>> Tom schrieb:
>>> Problem ist mittlerweile behoben!
>>
>> Und war soooo peinlich, dass du es uns lieber erspart hast, oder?
>
> Peinlich finde ich eher andere Dinge...

Ich denke er will damit auf was anderes Hinweisen:

Es gibt nix Schlimmeres als wenn man bei der Suche nach der Lösung für 
sein Problem einen Thread findet, der exakt das gleiche Problem 
behandelt das man selbst hat aber dann mit: "Habs hinbekommen" endet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.