String Array gegen null-Eintrag sichern

Vincent007

Mitglied
Hi Leute

Ich bin neu im Forum und in auch bei programmieren mit Java, bzw. programmieren allgemein.

Meine Aufgabe besteht darin, eine Klasse zu schreiben, die Arrays vom Typ String erzeugen kann. In dieses Arrays soll ich Zeichenketten speichern und wieder löschen können, und auch nach spezifischen bestehenden Einträgen suchen können. Dazu hab ich jeweils eine eigene Methode geschrieben, die jeweils zunächst, so zumindest ist die Idee, die eingegebene Zeichkette auf Gültigkeit überprüfen. Ungültige Eingaben sollen leere Zeichenketten sein, Zeichenketten die nur aus Leerzeichen bestehen, oder die Angabe null.

Java:
public boolean add (String value)
  {
  //Überpüft value auf gültige Eingabewerte.
  if (value.isEmpty() == true || value.equals(null)) {
  System.out.println("Bitte geben Sie einen gültigen Namen ein");
  return false;
  }

Das habe ich jeweils an den Anfang der Methode gesetzt. Mein Gedanke war, wenn ich jetzt null eingebe, würde mir das Programm false zurückgeben. Das Programm compiliert auch, aber wenn ich die Methode aufrufe und null eingebe, springt BlueJ (damit sollen wir arbeiten) wieder in meinen Quellcode und spuckt mir den Fehler java.lang.NullPointerException: null aus.

Wie schaffe ich es jetzt also, dass ich null nicht eingeben kann und mein Programm läuft. Der Rest des Programms funktioniert wunderbar.

Vielen Dank schonmal im Vorraus.
 

Tarrew

Top Contributor
So sollte es gehen:
Java:
public boolean add (String value){
//Überpüft value auf gültige Eingabewerte.
    if(value==null || value.isEmpty()){
        System.out.println("Bitte geben Sie einen gültigen Namen ein");
        return false;
    }
//...
}
 

Joose

Top Contributor
Mein Gedanke war, wenn ich jetzt null eingebe, würde mir das Programm false zurückgeben.
Achtung! Der String "null" ist etwas anderes als die "null-Referenz" (http://openbook.rheinwerk-verlag.de...tml#dodtp2914d204-f947-4d8d-ab3f-320f556fc36b)

... und spuckt mir den Fehler java.lang.NullPointerException: null aus.
Bitte immer den kompletten StackTrace posten und sagen in welcher Zeile der Fehler passiert.
Die Exception besagt das etwas nicht initialisiert wurde du es aber verwenden willst.

In deinem Code sehe ich ein Problem:
Java:
public boolean add (String value)
{
   //Überpüft value auf gültige Eingabewerte.
   if (value.isEmpty() == true || value.equals(null)) {
     System.out.println("Bitte geben Sie einen gültigen Namen ein");
     return false;
   }
Du prüfst zuerst ob der Parameter "value" leer ist und dann erst ob der Parameter überhaupt initialisiert (!= null) ist.
Außerdem vergleicht "equals" den Inhalt, du solltest aber prüfen ob der Parameter etwas referenziert.
 

Vincent007

Mitglied
Vielen Dank für die schnelle Antwort!

Es funktioniert! (Mit einer kleinen Einschränkung)

Was mich wundert ist, dass ich den Abgleich vorher auch mit dem ==-Operator statt mit .equals versucht habe. Das hatte auch nicht funktioniert. Warum macht die Reihenfolge der Befehle hier so einen großen Unterschied?

Zum noch bestehenden "Fehler":
Das Programm macht was es soll, gibt aber auf der Konsole (im unteren Teil) zusätzlich

java.lang.NullPointerException
at StringSet.remove(StringSet.java:107)


aus. Zeile 107 ist bei mir eben genau die besagte if-Abfrage, allerdings in der Methode zum Löschen von Namen. Dabei ist egal welche Methode ich aufrufe, BlueJ meckert immer bei Zeile 107. Egal ob ich jetzt versuche einen Namen in das Array einzutragen, ihn zu löschen oder ihn suche.
 

Joose

Top Contributor
Was mich wundert ist, dass ich den Abgleich vorher auch mit dem ==-Operator statt mit .equals versucht habe. Das hatte auch nicht funktioniert. Warum macht die Reihenfolge der Befehle hier so einen großen Unterschied?

Java:
if (value.isEmpty() == true || value.equals(null)) {
Du hast hier eine logische oder-Verknüpfung. Wenn der erste Ausdruck true ist, wertet Java den 2.Ausdruck gar nicht mehr aus. Egal was dort rauskommt der komplette Ausdruck ist true.
Bei einer logischen und-Verknüpfung hingegen wird jeder Teilausdruck ausgewertet.

java.lang.NullPointerException
at StringSet.remove(StringSet.java:107)


aus. Zeile 107 ist bei mir eben genau die besagte if-Abfrage, allerdings in der Methode zum Löschen von Namen. Dabei ist egal welche Methode ich aufrufe, BlueJ meckert immer bei Zeile 107. Egal ob ich jetzt versuche einen Namen in das Array einzutragen, ihn zu löschen oder ihn suche.
Dann zeig doch mal den Code her der die Methode "remove" der Klasse StringSet aufruft und wenn möglich auch den Code der Methode "remove" aus der Klasse StringSet
 

Vincent007

Mitglied
Java:
/**
* Methode um einen bestehenden Eintrag im Array stringOne zu löschen.
*
* @param value
* Ersetzt die eingegebene Zeichenkette durch null,
* falls sie im Array stringOne existiert.
*/
public boolean remove (String value)
{
   //Überpüft value auf gültige Eingabewerte.
   if (value == null || value.isEmpty()) {
   System.out.println("Bitte geben Sie einen gültigen Namen ein");
   return false;
   }

   //Wenn die eingegebene Zeichenkette gefunden wird,
   //wird sie mit null überschrieben, es wird true zurückgegeben
   //und die gesamte Methode wird dadurch abgebrochen.
   for (int i = 0; i < stringOne.length; i++) {
     if (stringOne[i] == value.trim()) {
       stringOne[i] = null;
       System.out.println("Sie wurden erfolgreich ausgetragen");
       return true;
     }
   }

   //Wird die Zeichenkette nicht gefunden, so wird false zurückgegeben.
   System.out.println("Dieser Name wurde nicht gefunden");
   return false;
}

Das ist die gesamte Methode um einen Namen zu löschen. Testklassen haben wir erst demnächst, also musste ich bislang manuell testen. Bis auf die Saceh mit null schien alles zu funktionieren.
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Und Zeile 107 entspricht der if-Abfrage und trotz geänderter Reihenfolge bzw. Vergleich (== statt equals) bekommst du den Fehler?
 

VfL_Freak

Top Contributor
Moin
if (stringOne == value.trim()) {
ich sehe hier zwei Probleme!
Zum einen fällt stringone von Himmel (sprich: ist nicht deklariert) und dann erfolgen inhaltliche Stringvergliche noch immer ".equals()" und nicht mit "=="

Obwohl es weiter schon erwähnt wurde:
mit ".equals()" vergleichst du den Inhalt von Strings, mit "==" die Gleichheit der Objektreferenz !!
Hier noch mal zum nachlesen: http://www.java-blog-buch.de/0302-strings-vergleichen/

Gruß Klaus
 

Vincent007

Mitglied
Ich bekomme quasi einen anderen. In beiden Fällen kompiliert das Programm. In meiner ursrünglichen Version hat BlueJ immer wenn ich die Methode aufgerufen habe nichts gemacht, außer den Quelcode der Klasse zu öfnnen und die eingangs beschriebene Fehlermeldung auszugeben, wo mir auch immer Syntaxfehler und ähnliches angezeigt werden.
Nach der Änderung läuft die Methode durch, funktioniert also. Auf der Konsole wird allerdings nicht nur der Text des println-Befehls ausgegeben, sondern auch im unteren Teil der Konsole die zweite beschriebene Fehlermeldung. Diesmal auch mit dem Hinweis wo der Fehler ist, halt in Zeile 107, also der if-Abfrage der Methode remove. Auch wenn ich null versuche mit einer anderen Methode in das Array einzutragen.
 

Vincent007

Mitglied
stringOne fällt nicht vom Himmel ;)
Hoffe ich jedenfalls...
stringOne ist der Name des Arrays, in das ich Einträge machen möchte. Es wird am Anfang der Klasse, noch vor dem Konstruktor definiert. Wobei erst im Konstruktor die Länge des Arrays festgelegt wird. Beim kopieren des Codes wurde leider etwas nicht übernommen.

stringOne = null;

hinter stringOne steht noch ein i in eckigen Klammern. Es sollte also der Eintrag im Array stringOne an der Stelle i durch null ersetzt werden.
 

Joose

Top Contributor
Beim kopieren des Codes wurde leider etwas nicht übernommen.
hinter stringOne steht noch ein i in eckigen Klammern. Es sollte also der Eintrag im Array stringOne an der Stelle i durch null ersetzt werden.
Ja [i] wird vom Forum als Formatierung interpretiert (für kursiv), daher Code bitte immer in Code-Tags posten ;)
[code=java] ... dein code ...[/code]
 

VfL_Freak

Top Contributor
Moin,
stringOne fällt nicht vom Himmel ;)
Hoffe ich jedenfalls...
dann solltest Du das auch posten ... hier wird nämlich der Hase im Pfeffer liegen :)
da stringOne also außerhalb der Methode remove deklariert wird, würde ich eine Kiste Bier gegen eine Tasse abgestandenes Wasser wetten, dass stringOne eben genau NULL ist und dadurch Deine Exception fliegt.
Warum prüfst Du dass nicht ganz simpel im Debugger?

Und poste mal den gesamten Code! Diese Rumraterei beringt doch nix :rolleyes:

Gruß Klaus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
R Ein Multidimensionales String Array initialisieren und Deklarieren Java Basics - Anfänger-Themen 2
H Überprüfen ob String Array leer ist Java Basics - Anfänger-Themen 4
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
R String in char-Array übertragen Java Basics - Anfänger-Themen 5
P Datentypen Array und String Java Basics - Anfänger-Themen 2
A eine neue normale String-Array von einer String-Array, die in for schleife ist, schaffen Java Basics - Anfänger-Themen 3
A keine Ergebnisse - String nummer in array nummer converting Java Basics - Anfänger-Themen 1
Z Matrix Klasse mit Mehrdimensionalen Array (Addition, Multiplikation, to String) Java Basics - Anfänger-Themen 57
F Auto String mit Array Name aus Datei... oder so ähnlich Java Basics - Anfänger-Themen 4
J String aus einem Array entfernen Java Basics - Anfänger-Themen 10
J String Array zu Map<Character, List<Character>> mit Streams Java Basics - Anfänger-Themen 1
S Nutzereingabe splitten und in string array wieder ausgeben. Java Basics - Anfänger-Themen 1
FelixN RegEx aus einem String als String-Array zurückgeben Java Basics - Anfänger-Themen 8
Curtis_MC 2dimensionales Array als String ausgeben Java Basics - Anfänger-Themen 2
I char Array to String Java Basics - Anfänger-Themen 3
I converting boolean Array to String Array Java Basics - Anfänger-Themen 10
M String array durch Eingabe begrenzen Java Basics - Anfänger-Themen 7
P Objekt aus String-Array erzeugen Java Basics - Anfänger-Themen 104
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
R Objekte aus Array als String + kommasepariert speichern Java Basics - Anfänger-Themen 12
scratchy1 Array sortieren und dann String-Repräsentation ausgeben Java Basics - Anfänger-Themen 2
E Array to String Method Reverse Java Basics - Anfänger-Themen 5
Mosquera Get String Array - ComboBox Java Basics - Anfänger-Themen 10
P Strings in String Array schreiben Java Basics - Anfänger-Themen 13
V zweidimensionale String Array Java Basics - Anfänger-Themen 1
J String, Int und double Array sortieren Java Basics - Anfänger-Themen 16
M Array nach String durchsuchen und zurückgeben Java Basics - Anfänger-Themen 16
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
C Methoden String in char Array Java Basics - Anfänger-Themen 3
T Schauen ob eine Ziffer in einem String-Array häufiger vorkommt Java Basics - Anfänger-Themen 8
L Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind. Java Basics - Anfänger-Themen 19
N String array to String Java Basics - Anfänger-Themen 6
informatikschüler21 String im Array sortieren Java Basics - Anfänger-Themen 4
B String in Array speichern Java Basics - Anfänger-Themen 4
L String zu String Array Java Basics - Anfänger-Themen 2
D Input/Output Array in einem String mit einem Trennzeichen verbinden Java Basics - Anfänger-Themen 17
D String-Array Java Basics - Anfänger-Themen 3
K String in String-Array suchen Java Basics - Anfänger-Themen 11
K String Array basierend auf int Array füllen Java Basics - Anfänger-Themen 2
K Im String Array suchen Java Basics - Anfänger-Themen 8
D Elements[] string = document.getElementsByClass("betEvent"); als Array Java Basics - Anfänger-Themen 1
C Array in String umwandeln Java Basics - Anfänger-Themen 5
D Best Practice String aufbau - Char Array oder Anhängen Java Basics - Anfänger-Themen 11
M String Array mischen Java Basics - Anfänger-Themen 3
F Methoden Kontaktliste - String in einem Array suchen und ausgeben Java Basics - Anfänger-Themen 3
K String zu int Array Java Basics - Anfänger-Themen 3
B String auslesen und Stellen im Array speichern Java Basics - Anfänger-Themen 1
W Array in String und String in Array - falsche Ausgaben Java Basics - Anfänger-Themen 20
W String Array in Int umwandeln um auf Zahl zu überprüfen Java Basics - Anfänger-Themen 4
W Array nach String durchsuchen und Ausgeben Java Basics - Anfänger-Themen 8
B Binäre Suche in einem String Array Java Basics - Anfänger-Themen 10
K String in String-Array finden Java Basics - Anfänger-Themen 7
S Rückgabe-Array lässt sich nicht auslesen, LocalDate mit String Java Basics - Anfänger-Themen 3
J 2 String Arrays in neuem String Array verbinden Java Basics - Anfänger-Themen 4
S String zu quadratischen Array Java Basics - Anfänger-Themen 3
T Array mit String, Zahlen in If Saetze packen Java Basics - Anfänger-Themen 3
J Int Array und String in einer neuen Methoder übergeben Java Basics - Anfänger-Themen 7
S ArrayDeque zu String Array Java Basics - Anfänger-Themen 2
A Variablen String Array in einzelne Strings auspalten Java Basics - Anfänger-Themen 4
K Input/Output 6000 Zeilen einlesen und String-Array vergleichen? Java Basics - Anfänger-Themen 1
fLooojava String zu Array Java Basics - Anfänger-Themen 5
C Array List mit String vergleichen und Fehlermeldung ausgeben Java Basics - Anfänger-Themen 6
J array in String umwandeln Java Basics - Anfänger-Themen 1
J array in String umwandeln Java Basics - Anfänger-Themen 3
E Erste Schritte Array soll kleiner werdenden String erstellen Java Basics - Anfänger-Themen 5
D String-Array aus Tastatureingabe Java Basics - Anfänger-Themen 4
A Mehrdimensionalles Array in String ausgeben in Liste Java Basics - Anfänger-Themen 5
L String array mit split füllen Java Basics - Anfänger-Themen 14
P Datentypen String auf JTextField wird zu Char-Array und anschließend zu int Java Basics - Anfänger-Themen 12
A private string array Java Basics - Anfänger-Themen 5
W String / Int-Array Java Basics - Anfänger-Themen 13
C Doppelte Einträge aus String [] Array entfernen. Java Basics - Anfänger-Themen 5
T Sortieren/Suche klappt nicht ganz (String Array) Java Basics - Anfänger-Themen 2
B Werte über Scanner in ein 3 dim String Array schreiben Java Basics - Anfänger-Themen 7
T String in Array suchen Java Basics - Anfänger-Themen 9
G String einem String Array übergeben Java Basics - Anfänger-Themen 3
G String to Array Java Basics - Anfänger-Themen 2
P CSV Datei in String Array -> Split -> New Array Java Basics - Anfänger-Themen 2
U OOP Array vom Typ String > Inhalt ausgeben Java Basics - Anfänger-Themen 8
F Variablen String-Array wird ungewollt "überschreiben" Java Basics - Anfänger-Themen 7
J Zeichen aus String Array lesen Java Basics - Anfänger-Themen 13
S Länge eines Elements im String Array Java Basics - Anfänger-Themen 5
F Problem: Verschlüsselung von String in Array Fehler Java Basics - Anfänger-Themen 2
C Datentypen Zweidimensionales Array mit String und int Java Basics - Anfänger-Themen 3
J Array zu String Java Basics - Anfänger-Themen 13
B String Array in main() Java Basics - Anfänger-Themen 2
G String Array konvertieren in Integer Array? Java Basics - Anfänger-Themen 7
Junb String in Array speichern Java Basics - Anfänger-Themen 4
J Einem String-Array in einer for-Schleife Strings zuweisen - Klappt nicht in einer for-Schleife Java Basics - Anfänger-Themen 5
P String Sortieren in einem Array Java Basics - Anfänger-Themen 7
W String & Integer im Array Java Basics - Anfänger-Themen 7
C Datentypen int array in String ausgeben Java Basics - Anfänger-Themen 20
B Array fehler bei string split Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben