Exception in thread "main" java.lang.NullPointerException

Steeeve

Mitglied
Hallo zusammen,

ich hab eine Fehlermeldung, die mir nach dem was ich im Web so gefunden habe, sagt, dass meine Variable "uebergabe" nicht instanziert wurde.

Die Fehlermeldung:

Exception in thread "main" java.lang.NullPointerException
at pruefungneu_package.PRUEFUNGNEUCLASS.main(PRUEFUNGNEUCLASS.java:64)

Der Quelltext:
Code:
	//Start Sortierung Tueren
		int m = t;
		double [] uebergabe = new double[m];
		
		for (int i=0; i<=m; i++)
		  {
			uebergabe[i] = Tueren[i].maxwert;
		  }
		
		while (m>0)
		  {
			int k = MaSu(m,uebergabe);
			Tueren[m+1].maxwert = Tueren[k].maxwert;
			Tueren[k].maxwert = Tueren[m].maxwert;
			Tueren[m].maxwert = Tueren[m+1].maxwert;
			m=m-1;
		  }

Der Fehler bezieht sich auf die Zeile "uebergabe = Tueren.maxwert;".

Würde mich freuen, wenn mir jemand helfen kann.

Eventuell braucht ihr auch mehr Informationen.. dann sagt mir was ihr braucht.

Danke vorab

Gruß
Steeeve
 
Tueren ist null.
Wo wird das Array gefüllt?

Java:
for (int i=0; i<=m; i++)
Bist du dir sicher, dass es hier nicht eher i < m heißen müsste?
 
Der Wert von Tueren.maxwert ist nicht leer, den kann ich mir ausgeben lassen. Jetzt sollen die Werte nur noch sortiert werden.

hier der Quelltext von oben an: (weiter unten die Unterprogramme)

Code:
	public static void main(String[] args) 
	
	{
		// TODO Auto-generated method stub
		String zeile[] = Einlesen();                              //Daten werden über UP aus Artikel.txt eingelesen
		
		class Artikel
		 {
			String anr;
			String abez;
			String maxbestand;
			String preis;
			Double maxwert;
		 }
		
		Artikel [] Tueren = new Artikel[20];
		Artikel [] Rest = new Artikel[20];
						
		int t = 0;
		int r = 0;
		
		for (int i=0; i<20; i++)
		  {
			if (Integer.parseInt(zeile[i].substring(5,7))==22)
			  {
				Tueren[t] = new Artikel();
				Tueren[t].anr = zeile[i].substring(0,8);
				Tueren[t].abez = zeile[i].substring(9,40);
				Tueren[t].maxbestand = zeile[i].substring(48,52);
				Tueren[t].preis = zeile[i].substring(99,106);
				Tueren[t].maxwert = Integer.parseInt(Tueren[t].maxbestand)*Double.parseDouble(Tueren[t].preis);
				t = t+1;
			  }
			
			else
			  {
				Rest[r] = new Artikel();
				Rest[r].anr = zeile[i].substring(0,8);
				Rest[r].abez = zeile[i].substring(9,40);
				Rest[r].maxbestand = zeile[i].substring(48,52);
				Rest[r].preis = zeile[i].substring(99,106);
				Rest[r].maxwert = Integer.parseInt(Rest[r].maxbestand)*Double.parseDouble(Rest[r].preis);
				r=r+1;
			  }
		  }
		
		//Start Sortierung Tueren
		int m = t;
		double [] uebergabe = new double[m];
		
		for (int i=0; i<=m; i++)
		  {
			uebergabe[i] = Tueren[i].maxwert;
		  }
		
		while (m>0)
		  {
			int k = MaSu(m,uebergabe);
			Tueren[m+1].maxwert = Tueren[k].maxwert;
			Tueren[k].maxwert = Tueren[m].maxwert;
			Tueren[m].maxwert = Tueren[m+1].maxwert;
			m=m-1;
		  }



//Unterprogramm Maximumsuche
	public static int MaSu(int n, double [] v)
	{
		int k=0;
		double max = v[0];
		
		for (int i=1; i<=n; i++)
		{
		  if (max < v[i])
		  {
			  k = i;
			  max = v[i];
		  }
		}
		
		return k;
	}
	
	
	
	
	
	
	
	
	
	
	//Unterprogramm zum Einlesen
	public static String[] Einlesen()
	{
	int n = 0;	                                                   // Anzahl der gelesenen Sätze
	String[] zeile;	                                               // Referenzvariable
	zeile = new String[50];	                                       // Array von 50 Strings
		
	try 
	   {	
	    FileReader fr = new FileReader("ARTIKEL.TXT");
	    BufferedReader input =	new BufferedReader(fr);
	    zeile[n] = input.readLine();	   
	
	    while ( zeile[n] != null )	                               // Ist zeile[n] noch eine "richtige" Textzeile?
	      {	
		   n = n+1;
	       zeile[n] = input.readLine();
	      }	                                                       // while-Ende
	    input.close();
	    }	                                                       // try-Ende
	
	catch (IOException lesefehler)
	   {	
		System.out.println("Lesefehler " + lesefehler);
	   }
	return zeile;
	}
	
}
 
1. Poste Java-Code auch in Java-Tags, dann sieht man auch die Zeilennummer
2. Mach mal die Schleife statt
Code:
i<=m
nur bis
Code:
i<m
 
Ich weiß nicht, ob ich das so richtig gesehen habe..
Aber du definierst

Java:
int t = 0

Und willst dann in der for-Schleife für 20 Zeilen jeweils einen Eintrag für t (=0) schreiben.

Wenn du dann das Ganze sortieren willst,
fragst du ab:

Java:
int m = t;
for (int i=0; i<=m; i++){}

Dabei ist t immernoch = 0; sprich er läuft nicht mal ein einziges Mal durch.

mfg
 
Zuletzt bearbeitet:
Aber das wird bei Java so übermittelt.
Wenn das in einer if-Schleife erhöht wird, nimmt er glaube ich trotzdem den Wert wie er oben definiert wurde, weil er in eine if-Schleife eventuell gar nicht kommt.

Hatte das auch schon ein Mal, auch wenn ich erst seit ca. einem Monat mit Java programmiere. 🙂
 
Öhm, nö?

Du meinst vermutlich folgendes:
Java:
Scanner sc;
if (Math.random()>0.5) {
 sc = new Scanner(System.in);
}
System.out.println(sc.nextLine()); //Fehler
Das ist aber etwas völlig anderes
 
Hallo zusammen,

danke schon mal für die zwischenzeitlichen Antworten.

Ihr hattet recht, in der for-Schleife muss i<m statt i<=m.

Nun hab ich aber eine neue Fehlermeldung 🙁

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
at pruefungneu_package.PRUEFUNGNEUCLASS.MaSu(PRUEFUNGNEUCLASS.java:127)
at pruefungneu_package.PRUEFUNGNEUCLASS.main(PRUEFUNGNEUCLASS.java:69)

das betrifft folgende Teile:

im main-Teil (Zeile: "int k = MaSu(m,uebergabe);")
Java:
//Start Sortierung Tueren
		int m = t;
		double [] uebergabe = new double[m];
		
		for (int i=0; i<m; i++)
		  {
			uebergabe[i] = Tueren[i].maxwert;
		  }
		
		while (m>0)
		  {
			int k = MaSu(m,uebergabe);
			Tueren[m+1].maxwert = Tueren[k].maxwert;
			Tueren[k].maxwert = Tueren[m].maxwert;
			Tueren[m].maxwert = Tueren[m+1].maxwert;
			m=m-1;
		  }

im Unterprogramm Maximumsuche (Zeile: "if (max < v)")

Java:
//Unterprogramm Maximumsuche
	public static int MaSu(int n, double [] v)
	{
		int k=0;
		double max = v[0];
		
		for (int i=1; i<=n; i++)
		{
		  if (max < v[i])
		  {
			  k = i;
			  max = v[i];
		  }
		}
		
		return k;
	}

Zur Info noch welche Werte sich hiter den Variablen verbergen:
t = 8 ist (also 9 artikel) und r = 10 (Also 11 Artikel).

Das aufteilen in die zwei Listen "Tueren" und "Rest" über die if-Schleife funktioniert also.
Ich hab mir die Artikelnummer (anr) und auch mal die Maximalwerte (maxwert) für die Liste Tueren ausgeben lassen.

Infolgedessen ist in dem Teil, wo "maxwert" sortiert werden soll:

m = 8 (weil t = 8), somit wird uerbergabe 9 Werte zugewiesen.

Auch diese habe ich mir mal ausgeben lassen:
Code:
Maxwert : 460000.0
Maxwert : 576200.0
Maxwert : 1021385.0
Maxwert : 975450.0
Maxwert : 975450.0
Maxwert : 1289570.0
Maxwert : 1315628.0
Maxwert : 892416.0
Maxwert : 882240.0

Jetzt hängst an der Maximumsuche / Sortierung wahrscheinlich.

Eine allgemeine Frage noch, gibts irgendwo ein Glossar, wo ich mal nachschauen kann, was die einzelnen Fehler bedeuten?

Gruß
Steeeve
 
ohne viel, geschweige denn alles von deinem Programm gelesen zu haben...würde ich behaupten, dass du die for-Schleife nur solange laufen lassen darfst, wie i echtKleiner der Länge des Arrays...:

Java:
public static int MaSu(int n, double[] v) {
		int k = 0;
		double max = v[0];

		for (int i = 1; i < v.length; i++) {

[edit]das ist kein Unterprogramm, sondern eine Methode... 😉

und ein Glossar kenne ich jetzt nicht, aber die API zu Exceptions
[/edit]
 
Zuletzt bearbeitet:

Zurück
Oben