Fehlersuche

Saban

Erfahrenes Mitglied
Hallo Zusammen!

Also erst mal zu dem was ich vorhab ist mir einen dynamischen Notenberechner zu schreiben, d.h. ich gebe an Wie viele Fächer und wie viele Notenfelder ich haben möchte und der Berechner wird mir hier für dynamisch zusammengebaut. Ich habe ein beispiel Bild angehänt wo ihr sehen könnt wie ich mir des ungefähr vorstelle.

Ich habe mir gedacht ich schreibe mir eine Klasse in der ich mir ein Panel zusammenbauen lasse. Aus dieser Klasse erzeuge ich mir dann 4 Objekte und füge diese auf einem Frame zusammen, also pro Notensparte ein Panel (mit Bild leichter zu verstehen). Hat jemand eine bessere Idee?

Nun zu meinem eigentlichen Problem... Ich bin gerade dabei mir die Panel Klasse zu erstellen. Es kommt grad nur immer wieder eine Fehlermeldung und ich hab keine Ahnung wieso... Vllt könnt ihr mir ja helfen :(

Java:
package NotenBerechner;

import java.awt.FlowLayout;

import javax.swing.JPanel;
import javax.swing.JTextField;

public class Grundgerüst extends JPanel{
	public int i_anzNoten 	= 4;
	public int i_anzFächer 	= 10;
	public JTextField[][] tf_noten = new JTextField[i_anzFächer][i_anzNoten];
	
	Grundgerüst(){
		this.setLayout( new FlowLayout() );
		
		for(int noten = 0; noten < i_anzFächer; noten++){
			for(int fächer = 0; fächer < i_anzNoten; fächer++){
				this.add(tf_noten[i_anzFächer][i_anzNoten]);
			}
		}
		
		this.setSize(300, 300);
		this.setVisible(true);
	}
}

Die Fehlermeldung lautet:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at NotenBerechner.Grundgerüst.<init>(Grundgerüst.java:18)
at NotenBerechner.Main.main(Main.java:5)

MfG
Saban
 

Anhänge

  • tutorials.jpg
    tutorials.jpg
    29,3 KB · Aufrufe: 11
Zuletzt bearbeitet von einem Moderator:
Code:
 this.add(tf_noten[i_anzFächer][i_anzNoten]);

Also wenn ich richtig gelesen habe, erstellst du ein 2D-Array mit 10 und 4 Feldern, allerdings beginnt ein Array mit dem Index 0 und in dieser Zeile willst du in den Index 10 schreiben, den es aber nicht gibt (0-9).

Code:
 this.add(tf_noten[i_anzFächer-1][i_anzNoten-1]);


Würde ich sagen.

java.lang.ArrayIndexOutOfBoundsException heißt, dass du auf einen Index zugreifen willst, der nicht existiert.
 
Hallo,

Naja, ich würde vorschlagen, dass du einfach die Zählvariablen in der Schleife nutzt und nicht die Klassenvariablen. Dann funktioniert es auch.

MFG

Sascha

Edit: Damit es mal deutlich wird. Nutz einfach die Variablen "noten" und "fächer" um auf den Array-Inhalt zuzugreifen, statt den Variablen, die du für das Anlegen des Arrays genutzt hast.
 
Der Fehler sagt, dass du an einer Stelle deine Arraygrenze überschreitest und zwar hier:
Java:
for(int noten = 0; noten < i_anzFächer; noten++){
  for(int fächer = 0; fächer < i_anzNoten; fächer++){
    this.add(tf_noten[i_anzFächer][i_anzNoten]);
  }
}

Edit:
Nice, 3 Posts fast gleichzeitig ^^.
Was Sascha meint ist:
Java:
this.add(tf_noten[noten][fächer]);
oder?
 
Zuletzt bearbeitet:
Hallo!

Danke für die schnellen Antworten und das sind meine lieblings Fehler... das Thema hätt ich mir echt sparen können... Danke nochmal!

Wenn wir schon dabei sind was sagt ihr zu meinem vorgehen? Hat jemand eine bessere Idee?

//Edit:

Habe den Code nun wie folgt geändert
Java:
package NotenBerechner;

import java.awt.FlowLayout;

import javax.swing.JPanel;
import javax.swing.JTextField;

public class Grundgerüst extends JPanel{
	public int i_anzNoten 	= 4;
	public int i_anzFächer 	= 10;
	public JTextField[][] tf_noten = new JTextField[i_anzNoten][i_anzFächer];
	
	Grundgerüst(){
		this.setLayout( new FlowLayout() );
		
		for(int noten = 0; noten < i_anzNoten; noten++){
			for(int fächer = 0; fächer < i_anzFächer; fächer++){
				this.add(tf_noten[noten][fächer]);
			}
		}
		
		this.setSize(300, 300);
		this.setVisible(true);
	}
}

Fehlermeldung:
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at NotenBerechner.Grundgerüst.<init>(Grundgerüst.java:18)
at NotenBerechner.Main.main(Main.java:5)

OutOfBound Exception ist mir ja bekannt gewesen aber was ist eine NullPointerException?

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
NullPointerException bedeutet, dass du eine Variable benutzt, die auf keinen Speicherbereich zeigt. Oder anders: Du benutzt eine leere Variable.
Guck doch mal, an welcher Stelle der Fehler genau auftritt und prüfe mal, ob in den dort verwendeten Variablen auch etwas steht ;)
 
Eine NullPointerException sagt aus, dass ein Object null ist.

Wenn du ein Array anlegst, hast du zwar den Speicherplatz reserviert, aber die Objecte sind noch nicht instanziert.
Mach es mal so.
Code:
for(int noten = 0; noten < i_anzNoten; noten++){
            for(int fächer = 0; fächer < i_anzFächer; fächer++){
                tf_noten[noten][fächer] = new JTextField();
                this.add(tf_noten[noten][fächer]);
            }
        }

Ein Rat von mir. Du solltest dich nochmal mit den Grundlagen von Java beschäftigen.

MFG

Sascha
 
Danke für eure Hilfe!

Ja ich muss dir recht geben die Fehler dürften mir nicht mehr passieren... :(
Tut mir leid... Steh heut irgendwie aufm Schlauch...

MfG
Saban
 
Zurück