# NullPointerException   problem



## Guest (7. Jan 2008)

Hallo,
ich habe da ein kleines Problem.

und zwar bekomme ich beim ausführen eines bestimmten Programmes ständig eine NullPointerException geworfen.. leider finde ich nicht heraus woran das liegen könnte... kann den Fehler daher auch nicht beheben.
Würde daher um etwas Hilfe bitten.
danke schon mal im Voraus, und hier folgt der code:



```
[i].
.
public Produkt[] auswaehlen(int artikelNr, Produkt[] einkaufswagen) {
		 for(int i = 0; i < einkaufswagen.length; i++) {
			 if (artikel.verfuegbarkeit > 0) {                        //NullPointerException
				 if (einkaufswagen[i]==null){
					 einkaufswagen[i] = artikel;
					 --artikel.verfuegbarkeit;
					 break;
.
.
.etz[/i]
```
//wobei artikel in derselben klasse als Klassenvariable deklariert wurde
//

```
[i]//Produkt artikel = null;[/i]
```
//
//und verfuegbarkeit ebenfalls als Klassenvariable des Typs int, jedoch in der Klasse Produkt
//

```
[i]public class Produkt {
	
	int artikelNr;
	String bezeichnung;
	double preis;
    int verfuegbarkeit;

.
.
.etz[/i]
```

**************************
naja, wäre toll wenn mir jemand weiter helfen könnte, ich bin leider von den java.sun beschreibungen auch nicht schlauer geworden.


----------



## JPKI (7. Jan 2008)

Gast hat gesagt.:
			
		

> //wobei artikel in derselben klasse als Klassenvariable deklariert wurde
> //
> 
> ```
> ...


Ist doch klar. Der Variable artikel ist keine Referenz zugewiesen, daher operierst du in deiner Methode auf einer Null-Referenz. Probier mal

```
Produkt artikel = new Produkt();
```


----------



## Gast (7. Jan 2008)

nein, das war es leider nicht


----------



## Verjigorm (7. Jan 2008)

wird int verfuegbarkeit;  auch irgendwo gesetzt?


----------



## Gast (7. Jan 2008)

ja, in der Klasse Produkt


----------



## Verjigorm (8. Jan 2008)

Gast hat gesagt.:
			
		

> ja, in der Klasse Produkt



zeig mal.....
in deinem Code oben wird die Variable nur angelegt, aber nicht initialisiert


----------



## SlaterB (8. Jan 2008)

Verjigorm, du machst dich lächerlich, verfolge das nicht weiter 

a) ein int kanngar nicht null sein, 
b) wäre er nicht initialisiert, würde das Porgramm nicht kompilieren,
c) eine Exemplarvariable int ist standardmäßig mit 0 initialisiert

der Satz "zeig mal..... " passt aber wiederum gut zu "artikel = null;" 
was ja offensichtlich letztlich zur NullPointerException führt,

da gast diesen Punkt etwas holprig mit "nein, das war es leider nicht" beendet hat,
ist es andererseits auch nur fair, dies nicht weiter zu verfolgen


----------



## Gast (8. Jan 2008)

verzeihung:
aber ich habe versucht ein  **Prudukt artikel= new Produkt()**
... jedoch muss ich dann meine Klasse von der Produkt klasse ableiten und einen eigenen construktor schreiben oder?
....??


----------



## Gast (8. Jan 2008)

...mache ich das alles bekomme ich einen StackOverflowError   in der Klasse Produkt :-(


----------



## SlaterB (8. Jan 2008)

> jedoch muss ich dann meine Klasse von der Produkt klasse ableiten und einen eigenen construktor schreiben oder? 

nein, wieso?

-----

außerdem sollst du doch nicht stur ein leeres unnützes Objekt anlegen,
sondern darüber nachdenken, dass das Problem sich darin gründet, dass artikel null ist!,

du willst doch irgendwas mit deinem Einkaufswagen machen,
von irgendeinem artikel die Verfügbarkeit prüfen
(if (artikel.verfuegbarkeit > 0) {  )

artikel ist null, du musst also überlegen, was artikel zu diesem Zeitpunkt sein soll?
wo es her kommt, wo es hingeht usw.

-----

> mache ich das alles bekomme ich einen StackOverflowError in der Klasse Produkt :-(

jeder beliebige Befehl kann in irgendein Programm eingebaut beliebige Fehler erzeugen,
das ist doch keine Info..


----------



## Gast (8. Jan 2008)

(if (artikel.verfuegbarkeit > 0) { ) 

need int#


ok, aber verfügbarkeit ist ein int;... artikel nur leider nicht. 
... aber ich danchte wenn man verfügbarkeit über  artikel.verfuegbarkeit    aufruft nimmt es den int wert...
..versteht man was ich meine :-O....

ich will damit *artikel.verfügbarkleit*
ja praktisch die vierte stelle in der collection anspringen.
zb:
Produkt artikel3 = new Produkt(998337, "Milch", 0.59, 22);

... da dürfte das programm doch nicht mehr null haben sondern ohnehin den int wert oder??


----------



## Verjigorm (8. Jan 2008)

poste doch einfach mal alles ...


----------



## SlaterB (8. Jan 2008)

> ja praktisch die vierte stelle in der collection anspringen.

wo steht dann 
artikel = 4. Stelle in der Collection;
?

bisher steht da nur
artikel = null;
und dann ist artikel natürlich null

> da dürfte das programm doch nicht mehr null haben sondern ohnehin den int wert oder

wer wo wann bist du gerade?


----------



## Gast (8. Jan 2008)

Produkt artikel1 = new Produkt(12345, "Vollkornbrot", 1.98, 75);
Produkt artikel2 = new Produkt(66535, "Kaffee", 3.59, 450);
Produkt artikel3 = new Produkt(998337, "Milch", 0.59, 22);

Produkt[] sortiment = {artikel1, artikel2, artikel3};
this.sortiment = sortiment;


hier bin ich.... hier sind meine artikel dkl.  wobei die 4stelle die verfügbarkeit ist


----------



## MiMij (8. Jan 2008)

Ja aber das interessiert ja net. Das ist ja nur das was du dem Konstruktor in Produkt mitgibst. 

Hast du in Produkt denn nen Konstruktor gemacht, wo auch das gesetzt wird?

Achja du deklarierst, artikel1, artikel2, ... usw
Aber dann spaeter willst du die verfuegbarkeit von artikel pruefen, aber nen Produkt mit dem namen artikel gibts net, es gibt nur 
artikel1
artikel2
.. usw


----------



## SlaterB (8. Jan 2008)

>  hier sind meine artikel dkl. wobei die 4stelle die verfügbarkeit ist

dann führe doch endlich mal
artikel = irgendein Artikel;
aus,
bisher steht da nur
artikel = null; 
wie ich nicht noch einmal wiederholen werde


----------



## Gast (8. Jan 2008)

die produkt deklarationen stehen nicht im Produkt konstruktor, 
sondern in einer void methode in der anwendungsklasse.
.
.
.
und zum zweiten: daran dass kein artikel mit namen artikel existiert liegts auch nicht... hab gearade noch mal alles mit artikel1 probiert (und den gibs ja wohl offensichtlich, oder) und das funkt. ja auch nicht


----------



## MiMij (8. Jan 2008)

Nein ich meinte, wie dien Konstruktor im Produkt aussieht, da du ja anscheinend wenn du ein neues produkt anlegst, verschiedene Werte mitgibst.

Ach und verwende dcoh am besten getters und setters um auf die attribute der anderen Klassen zuzugreifen.


----------



## SlaterB (8. Jan 2008)

> die produkt deklarationen stehen nicht im Produkt konstruktor, 
> sondern in einer void methode in der anwendungsklasse. 

wo es steht ist mir egal,
wenn du an dieser Stelle mit einem artikel arbeiten willst,
dann musst du auch irgendwoher einen artikel holen

> daran dass kein artikel mit namen artikel existiert liegts auch nicht... 

von Namen war bisher nicht die Rede

>  hab gearade noch mal alles mit artikel1 probiert (und den gibs ja wohl offensichtlich, oder) und das funkt. ja auch nicht

?


----------



## Gast (8. Jan 2008)

ad SlaterB

mit:
"kann mir bitte jemand helfen"... siehe einleitung

war nicht das permanente zitieren und denunzieren gemeint... sry aber is wahr.
vielleicht kenn ich mich wirklich nit sehr gut aus, aber das is ja eigentlich auch der grund warum ich in diesem forum poste


----------



## SlaterB (8. Jan 2008)

ja, aber mehr als 'die NullPointerException kommt, weil artikel null ist' kann man dir nicht raten,
das ist das, was normalerweise von einem Durchschnittsuser mit 'ach ja, alles klar' beantwortet wird,

mache, dass artikel nicht null ist, darum geht es die ganze Zeit,
wenn du nicht weißt, wie das geht, dann kann man dir praktisch nicht helfen

was in deinem Programm an dieser Stelle passieren soll, weiß niemand außer dir selber,
und was immer du sonst noch nebenher erzählst hat bisher nichts zur Aufklärung beigetragen,


----------



## Gast (8. Jan 2008)

ja ok, aber das der artikel nicht null sein soll,hab ich über java.sun auch rausgefunden
es ist ja GERADE das problem, dass ich nicht weiß wie ich mein programm umschachteln soll, das es nicht null ergibt.
sry


----------



## SlaterB (8. Jan 2008)

z.B. 
artikel = irgendwas;
zum x.ten Mal

dass du das schon weißt, hast du übrigens bisher noch nicht erwähnt,

und nun auch zum zweiten Mal:
"was in deinem Programm an dieser Stelle passieren soll, weiß niemand außer dir selber, 
und was immer du sonst noch nebenher erzählst hat bisher nichts zur Aufklärung beigetragen,"

Fragen a la 'was soll ich in meinem Programm richtig machen' funktionieren nicht


----------



## MiMij (9. Jan 2008)

Du koenntest aber einfach mal die code STuecke posten, wo du die neuen Produkte machst, und wo du drauf zugreifst.


----------



## Gast (9. Jan 2008)

public void lieferung() {
		Produkt artikel1 = new Produkt(12345, "Vollkornbrot", 1.98, 75);
		Produkt artikel2 = new Produkt(66535, "Kaffee", 3.59, 450);
		Produkt artikel3 = new Produkt(998337, "Milch", 0.59, 22);
		Produkt[] sortiment = {artikel1, artikel2, artikel3};
		this.sortiment = sortiment;
	}



public void einkaufen() {
		 Produkt[] einkaufswagen = new Produkt[10];
		 einkaufswagen = auswaehlen(sortiment[0].artikelNr, einkaufswagen);
		 einkaufswagen = auswaehlen(sortiment[0].artikelNr, einkaufswagen);
		 einkaufswagen = zuruecklegen(sortiment[0].artikelNr, einkaufswagen);
		 einkaufswagen = auswaehlen(sortiment[2].artikelNr, einkaufswagen);
		 //Vollkornbrot & Kaffee
		 Kassa kassa = new Kassa();
		 zahlen(einkaufswagen, kassa);	
	 }






public Produkt[] auswaehlen(int artikelNr, Produkt[] einkaufswagen) {
		 for(int i = 0; i < einkaufswagen.length; i++) {
			 if (artikel.verfuegbarkeit > 0) {      //NullPointerException
				 if (einkaufswagen_==null){
					 einkaufswagen = artikel;
					 --artikel.verfuegbarkeit;
					 break;
				 }
				 else if (i == (einkaufswagen.length-1)) {
					 Out.println("Der Einkaufswagen ist bereits voll!");
				 }
			 }
			 else {
				 Out.println("Das Produkt ist ausverkauft!");
			 }

		 }_


----------



## SlaterB (9. Jan 2008)

anscheinend suchst du zu int artikelNr das passende Produkt,
bevor du dir dessen Verdügbarkeit anschauen kannst, musst du es aber erst finden!

durchlaufe das sortiment-Array und vergleiche die artikelNr, 
dann wirst du ein Produkt finden, hast ein Produkt != null und kannst dir dessen Verfügbarkeit anschauen,

schlauer wäre es evtl.statt bei
auswaehlen(sortiment[0].artikelNr, einkaufswagen); 
die artikelNr, gleich den ganzen Artikel = Produkt zu übergeben:
auswaehlen(sortiment[0], einkaufswagen); 
dann hast du sofort das fragliche Produkt = Artikel,
natürlich nur wenn du die Parameter der Operation auswaehlen() anpasst


----------



## MiMij (10. Jan 2008)

Benutz doch bitte code Tags, so ist das ja unmoeglich zu lesen 
einfach [.code]  hier den code [./code] ohne die punkte


----------



## Guest (11. Jan 2008)

Gast hat gesagt.:
			
		

> public Produkt[] auswaehlen(int artikelNr, Produkt[] einkaufswagen) {
> for(int i = 0; i < einkaufswagen.length; i++) {
> if (artikel.verfuegbarkeit > 0) {      //NullPointerException


Wo kommt die Variable artikel her?

Für Deine Anwendung scheint mir eine Liste übrigens geeigneter zu sein als ein Array.


----------



## Gast (11. Jan 2008)

die variable artikel wurde zu beginn initialisiert

[.code]
        Produkt[] sortiment;
	double einkaufspreis = 0;
	Produkt artikel = null;
	Produkt[] einkaufswagen = null;
[./code]


----------



## Gast (11. Jan 2008)

die variable artikel wurde zu beginn initialisiert


```
Produkt[] sortiment;
	double einkaufspreis = 0;
	Produkt artikel = null;
	Produkt[] einkaufswagen = null;
```


----------



## MiMij (11. Jan 2008)

Ja und dien artikel ist immer noch null, wie dir schon 20 mal gesagt wurde!
Setz einfach den jeweiligen aktuellen Artikel aus deinem Sortinemt auf artikel und dnan kannst du auch mit der variablen artikel arbeiten.


----------

