Objekt wird nicht erzeugt, Werte nicht übergeben _ Null

  • Themenstarter Themenstarter Netjunky
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
N

Netjunky

Gast
Hallo,

erzeuge bei meinem Programm immer wieder eine NULL Referenz, obwohl ich mit dem Konstruktor Werte übergebe:
-------------------------------------------------------------------------------------------------------------------------------------------
Code:
public class Medium {
    private String name;
    private String inhaltsangabe;
    private String standort;
    private int anzahlExemplare;
    private double verkaufsPreis;

public Medium (String name, String inhaltsangabe, String standort, int anzahlExemplare, double verkaufsPreis) {
    this.name = name;
    this.inhaltsangabe = inhaltsangabe;
    .
    .
    . 
}

public String getName () {
  return name;
}
   .
   .
   .
usw.


------------------------------------------------------------------------------------------------------------------------------------------
Code:
import java.util.ArrayList;

public class Shop {
    private Medium artikel;
    private ArrayList  <Medium>  list;

public Shop () {}

public void neuerArtikel (Medium artikel) {
     list = new ArrayList <Medium>(artikel.getAnzahlMedium());
      for (int i = 0; i < list.size(); i++) {
           list.add(artikel);
}
-------------------------------------------------------------------------------------------------------------------------------------------
Code:
public class ShopTest  {
  public static void main (String [] args) {
      Shop shop = new Shop();
       shop.neuerArtikel("Name", "Inhaltsangabe", "Ort", 7, 13.78)
     .
     .
     .
---------------------------------------------------------------------------------------------------------------------------------------

Es wird aber kein Medienobjekt erzeugt und nicht die Werte der Methode übergeben (null-Referenz)... Woran könnte das liegen?
Bin schier am verzweifeln, da ich nicht drauf komme, was nicht stimmt...

???:L :cry:
 
Code:
shop.neuerArtikel("Name", "Inhaltsangabe", "Ort", 7, 13.78)
Das passt nicht zum von dir geposteten Code
 
Wildcard hat gesagt.:
Code:
shop.neuerArtikel("Name", "Inhaltsangabe", "Ort", 7, 13.78)
Das passt nicht zum von dir geposteten Code

Uups, da ist mir ein Fehler unterlaufen. 😳 Es sollte so aussehen.

Code:
shop.neuerArtikel (new Medium("Name", "Inhaltsangabe", "Ort", 7, 13.78);

Das funktioniert aber trotzdem nicht. :bahnhof:
 
Netjunky hat gesagt.:
Es wird aber kein Medienobjekt erzeugt und nicht die Werte der Methode übergeben (null-Referenz)... Woran könnte das liegen?
Es WIRD ein Medien-objekt erzeugt, das ist nicht das Problem.
Die Frage ist, was du damit machst.
Was machst zum Beispiel artikel.getAnzahlMedium() und wo bekommst du einen Fehler?
 
Ich hab versucht die Klasse Shop über JUnit zu testen. Habe dabei

Code:
public class ShopTest extends JUnitTestCase {

void testShop() {
  Shop shop = new Shop();

  shop.neuerArtikel(new Medium("Name", "Inhaltsangabe", "Ort", 7, 12.90));
  Medium medium = shop.getMedium();
  
assertTrue (medium != null);

}

Dann kommt immer die Exception null Pointer...
:bahnhof:
 
Wildcard hat gesagt.:
Wildcard hat gesagt.:
Was machst zum Beispiel artikel.getAnzahlMedium()?
Du postest weder vollständige Beispiele, noch Fehlermeldungen. Wie soll man dir denn so helfen?

Sorry, :? also gut, ich versuchs ausführlicher.

Mit
Code:
public int getAnzahlMedium();

erfrage ich die Anzahl an Medien, die ich dem Konstruktor übergeben habe. Das war in diesem Fall die 7.

wenn ich also
Code:
public void neuerArtikel (Medium medium) {
   list = new ArrayList <Medium>(medium.getAnzahlMedium());
   for (int i = 0; i < list.size(); i++) {
        list.add(medium);
   }

schreibe, dann möchte ich eine ArrayListe mit der Größe der Anzahl Medien erzeugen, in welche dann die Medien aufgenommen werden können.

Ziel der Aufgabe ist es vorallem, die Medien über die Klasse Shop zu verwalten.
Habe dann noch Methoden drin, mit welchen ich Artikel per Namen suche, Artikel verkaufe und dabei die AnzahlMedien um 1 verringere, oder ein Medium aus dem Bestand lösche, oder den verkaufsPreis um x% erhöhe. All diese Methoden, möchte ich dann über JUnit testen.

Code:
public void verkaufeArtikel (Medium artikel) {
    if (artikel != null) {
        int counter = 0;
        int neuerBestand = artikel.getAnzahlMedien() - 1;
        for (Medium artikelListe : list) {
             counter += artikelListe.getAnzahlMedien(); 
             artikelListe.setAnzahlMedien(neuerBestand);
        }
    }  
}

Code:
public boolean sucheArtikel (String titel) {
   if (titel != null) {
      int counter = 0;
       for (Medium gesucht : list) {
           counter += gesucht.getAnzahlMedium();
            if (gesucht.getName().equals(titel)) {
               return true;
           }
      }
   } return false;
}

Code:
public void erhöhePreis (double x) {
   if (x > 0.0) {
     int counter = 0;
      double neuerPreis = medium.getPreis() + (medium.getPreis() * (x / 100)) ;
      for (Medium neu : list) {
           counter += neu.getAnzahlMedien();
           neu.setPreis(neuerPreis);
      }
  }
}

Code:
public void löscheArtike (Medium medium) {
   int counter = 0;
   for (Medium loesche : list) {
       counter += loesche.getAnzahlMedium();
        list.remove(loesche);
   }
}

In JUnit führe ich dann die Methoden aus, aber alle Methoden schlagen fehl... Exception : Null
jedes mal wird durch JUnit meine assertTrue Bedingung als Fehlerquelle angezeigt...[/code]
 
Code:
     list = new ArrayList <Medium>(artikel.getAnzahlMedium());
      for (int i = 0; i < list.size(); i++) {
           list.add(artikel);
list.size() liefert die Anzahl der enthaltenen Objekte. Nach Initialisierung sind das genau 0.
Also fügst du genau 0 Artikel in die Liste ein.
 
außerdem überschreibst du bei jedem aufruf die ganze artikelliste.
weiter solltest du mal überlegen ob das sinnvoll ist den gleichen artikel so oft zur liste hinzuzufügen, wie oft er vorhanden ist, das macht nicht wirklich sinn. ???:L
 
Wildcard hat gesagt.:
Code:
     list = new ArrayList <Medium>(artikel.getAnzahlMedium());
      for (int i = 0; i < list.size(); i++) {
           list.add(artikel);
list.size() liefert die Anzahl der enthaltenen Objekte. Nach Initialisierung sind das genau 0.
Also fügst du genau 0 Artikel in die Liste ein.

@ Wildcard

Ja, aber wenn ich dann in JUnit schreibe:
Code:
Shop shop = new Shop();
shop.neuerArtikel(new Medium("Name", "Inhalt", "Ort", 7, 12.34));

dann ist das Medien-Objekt doch erzeugt und gibt die anzahlMedien = 7 vor- sprich dann sollte die arrayList die Länge von 7 aufweisen... ???:L

Müsste es dann heissen :
Code:
public void neuerArtikel(Medium medium)
   list = new ArrayList <Medium>();
   for (int i = 0; i < medium.getAnzahlMedium(); i++) {
      list.add(medium);
   }
}
 
Roar hat gesagt.:
außerdem überschreibst du bei jedem aufruf die ganze artikelliste.
weiter solltest du mal überlegen ob das sinnvoll ist den gleichen artikel so oft zur liste hinzuzufügen, wie oft er vorhanden ist, das macht nicht wirklich sinn. ???:L

@ Roar

Das mit dem Überschreiben ist mir nicht so ganz klar. Wieso überschreibe ich die Liste bei jedem Aufruf?

In der Aufgabenstellung ist gefordert, dass man von jedem neuen Medium eine bestimmte Anzahl Artikel einfügt. Jedes MedienObjekt hat also mehrere Exemplare... Wenn man in nen Laden geht, um was zu kaufen, gibts ja auch nicht von jedem Artikel nur einen Exemplar... :wink:
 
oder halt:

vielleicht so?
Code:
public void neuerArtikel(Medium medium) {
  list = new ArrayList <Medium>();
  list.add(medium);
}

:bahnhof:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben