Array Elemente werden nicht gefunden!

javanooobie

Mitglied
Hallo,
ich sitze gerade an einem Programm.
Ich habe 2 Arrays erstellt, diese besitzen jeweils eigene Klassen.

Arrays in der Main Klasse und Methode:
Java:
Person[] person = {
                new person("Person1"),
                new person("Person2"),
                new person("Person3"),
        };

&

Java:
Sache[] sache = {
                new Sache("Sache1", 1),
                new Sache("Sache2", 2),
                new Sache("Sache3", 3),
        };

ebenfalls in der main klasse:
Java:
public Sache sachenSuche(int gesuchteSacheNr) {
        Sache gefunden = null;
        
        for (Sache sachee : sache) {
            if(sachee.getSacheNr() == gesuchteSacheNr) {
                gefunden = sachee;
            }       
        }
        return gefunden;
    }

Zunächst kann der Benutzer sich eine Person aussuchen. (Das Klappt auch soweit)
Das Array "Sache" soll nun durchlaufen werden und durch eine benutzereingabe z.B "1" soll dann "Sache1" aufgerufen werden.

Folgende Eingabe in der Klasse "Person" soll gemacht werden:
Java:
nutzersachennr = scanner.nextInt();
                       
            Sache sache = main.sachenSuche(nutzersachennr);


Ich hab nun folgendes Problem, jedes mal wenn ich versuche die Sachenr durch die Klasse Person zu suchen, wird sie einfach nicht gefunden... habe unzähliges probiert aber es klappt einfach nicht....
Auch durch korrekte Benutzereingabe wird die Sache nicht gefunden und ich kriege eine nullpointer exception.
Hat jemand vielleicht eine Idee oder einen Ansatz, woran es möglicherweise liegen könnte?

Wäre sehr lieb wenn mir jemand dabei helfen könnte!
Bin für jede Hilfe dankbar 🙂
 
habe unzähliges probiert aber es klappt einfach nicht....
[...] und ich kriege eine nullpointer exception.
Was genau klappt nicht und wo genau kriegst du welche genaue NPE (mit Stacktrace, bitte und bitte auch am besten die Zeile des Codes nochmal hinschreiben, bei der die Exception genau auftritt, weil man wahrscheinlich aus der Zeilennummer in der Exception hier nichts entnehmen kann)?
 
Was genau klappt nicht und wo genau kriegst du welche genaue NPE (mit Stacktrace, bitte)?
Die Methode "sachenSuche" soll den int wert, der vom benutzer eingegeben wurde, finden. Der Wert, der dabei eingegeben werden soll, soll jeweils die SachenNr(1, 2, 3) sein.
Wenn eine falsche Nummer eingegeben wird, so soll auch keine Sache "ausgegeben" werden.
Wenn der Benutzer aber die richtige Zahl eingibt, so findet das Programm sie trotzdem nicht! (Obwohl dann die richtige "Sache" ausgegeben werden soll.)

Folgende NullPointerException taucht auf:
Exception in thread "main" java.lang.NullPointerException
at Hauptklasse.Person.vorgang(Person.java:59)
at shop.Hauptklasse.main(Versandshop.java:82)

das ist einmal die Zeile 59:
Java:
Sache sache = main.sachenSuche(nutzersachennr);
und Zeile 82:
Java:
main.person[0].vorgang(new Scanner(System.in));

Danke für deine Antwort... Ich hoffe es ist halbwegs verständlich :s
 
Laut dieser Exception ist der Fehler bei
Java:
Sache sache = main.sachenSuche(nutzersachennr);
Das heisst also, dass main (referenziert innerhalb von Person.vorgang) null ist. Warum das so ist, wird aus dem von dir gezeigten Code nicht ersichtlich.

Hinweis: Seit Java 14 werden bei NPE neuerdings wirklich sehr hilfreiche Exceptionnachrichten ausgegeben, die genau sagen, welcher Teilausdruck null war. Wenn du kannst, solltest du also mindestens zu Java 14 upgraden.
 
Laut dieser Exception ist der Fehler bei
Java:
Sache sache = main.sachenSuche(nutzersachennr);
Das heisst also, dass main (referenziert innerhalb von Person.vorgang) null ist. Warum das so ist, wird aus dem von dir gezeigten Code nicht ersichtlich.
Java:
public static void main(String[] args){
       
        Scanner eingabe = new Scanner(System.in);
               
        Person[] person = {
                new Person("Person1"),
                new Person("Person2"),
                new Person("Person3"),
        };
       
        Sache[] sache = {
                new Sache("Sache1", 1),
                new Sache("Sache2", 2),
                new Sache("Sache3", 3),
        };

       
        Hauptklasse hauptklasse = new Hauptklasse(sache, person);
       
        System.out.println("Willkommen!");
        System.out.println();
       
        int benutzereingabe;
       
        do {
        System.out.println("Bitte Person wählen");
        System.out.print("1)" + Hauptklasse.person[0].getName() + " ");
        System.out.print("2)" + Hauptklasse.person[1].getName() + " ");
        System.out.print("3)" + Hauptklasse.person[2].getName() + " ");
        System.out.println();
       
        benutzereingabe = eingabe.nextInt();
       
       
            if (benutzereingabe == 1) {              
                double ergebnis =
                        hauptklasse.person[0].vorgang(new Scanner
                                (System.in));
               
            }
           
            if (benutzereingabe == 2) {
                double ergebnis =
                        hauptklasse.person[1].vorgang(new Scanner
                                (System.in));
               
            }
           
            if (benutzereingabe == 3) {
                double ergebnis =
                        hauptklasse.person[3].vorgang(new Scanner
                                (System.in));
                             
            }

Hilft das in irgendeiner weise weiter? Ich bin total ratlos..

Im "vorgang" wird die "sachenSuche" Methode aufgerufen
 
Nein. 🙂 Da der Fehler in Person passiert, wäre der Code von Person nicht schlecht.
Also: Wo ist denn die Variable `main` deklariert, auf die in der Methode "vorgang" in Person zugegriffen wird und wie (wahrscheinlich gar nicht) wird diese Variable initialisiert?
Java:
package main;

import java.util.Scanner;

public class Person {
    private String name;
    private Hauptklasse hauptklasse;
    
    public String getName() {
        return name;
    }
    

    public Kunde(String name) {
        this.name = name;
    }
    
    public Kunde(Hauptklasse hauptklasse) {
        this.hauptklasse = hauptklasse;
    }
    
    
public double vorgang(Scanner scanner) {
        double ergebnis = 0.0;
        
        int nutzersachennr;
      
        do {           
            //Sachennr einlesen
            System.out.print("Bitte Sachennummer eingeben.");           
            nutzersachennr = eingabe.nextInt();
            
            //Sachennr wird gesucht
            Sache sache = hauptklasse.sachenSuche(nutzersachennr);
            
            //Wenn Sache gefunden
            if(sache != null) {
                System.out.println(sache.getName());           
            
        } while (nutzersachennr != 4);
                    
        return ergebnis;             
    }

}

hilft es jetzt weiter? tut mir leid das ich so nerve
 

Neue Themen


Zurück
Oben