2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet

arhzz

Bekanntes Mitglied
Hallo!

Schreiben Sie einen Algorithmus checkPasswd(word), der zur Überprüfung des eingegebenen Passworts dient. Bei der Eingabe eines Passworts hat man drei Versuche, das richtige Passwort einzugeben. Das Passwort wird in einer globalen Variablen (passwd) gespeichert und mittels der Funktion setPasswd(word) jeweils gesetzt oder geändert. Der Algorithmus checkPasswd(word) liefert true, falls das Passwort richtig ist, ansonsten false. Nach der dritten inkorrekten Passworteingabe wird jeglicher weitere Versuch, checkPasswd aufzurufen, sofort mit false beendet. Ein korrekter Versuch setzt alle Zählvariablen wieder auf den Initialzustand zurück. Als Einschränkung soll ein Passwort aus genau 6 Zeichen bestehen.

Java:
import inout.*;
public class test {


    static String password;

    public static String setPassword(String password) {
        Out.println("Please input a password");
        password = In.readString();
        if(password.length() > 6) {
            Out.println("That password is too long");
        }
        return password;
    }
    public static boolean checkPassword(String word) {
        Out.println("Enter the password");
        word = In.readString();
        return word.equals(password);

    }
    public static void main(String[] args) {
        Out.println(setPassword(password));
        Out.println(checkPassword(password));

    }
}

So habe ich es probiert.Also ich versuche kurz meinen Problem zu erklaren.Also das mit setPassword funktioniert.Ich gebe das password ein falls es zu lang is(6+ zeichen) kommt dieses print statement out.Ich habe es deswegen in ein println statement in main geschrieben das ich sehen kann welcher wert wird zuruckgegeben mit dem return password in der setPassword methode. Aber wenn ich jetzt nun versuche in check password es zu vergleichen kommt immer false zuruck.Ich denk ich weiss wieso,weil die checkPassword methode nicht die "aktuelles" password niemt,dieses das die methode setPassword zuruckgibt,sondern die globale variable set password,und das sie leer ist,wird immer false zuruckgegeben.

Also jetzt konnte man einfach es so machen.halt in der equals to methode es so machen;

word.equals(setPassword(password));

Und das klappt so,aber dann sieht der code sehr hasslich aus,da dieses print statement in setPassword zweimal kommt,und das ist einfach kein gutes programieren.Ist es moglich irgendwie dieser checkPassword methode das richtige password zu ubergeben? Also wenn ich ja logik denken wurde,musste ich zuerst diese globale variable den neun passwort zuweisen aber ich weiss nicht wie.

Und noch falls man die Aufgabenstellung richtig gelesen hat sollte es die moglichkeit geben den password 3 mal einzugeben,bevor das programm sperrt quasi.Also da hatte ich ne ide das ich eine do while schleife mach die aufhort bei 3 oder wenn dieser vergleich true ist,aber mir ware es wichtiger derzeit das ich das mit dem vergleich hinbekomme.

Freue mich auf eure Ideen!
 

arhzz

Bekanntes Mitglied
Da ist sicher eine Prüfung mit == notwendig.
Kann sein,aber ich verstehe nicht warum? Wenn ich ja ein string langer als 6 zeichen gebe klappt es auch so? Wie wurde mir das in sinne von der checkPassword methode helfen? Ich konnte den code anpassen, vielleich einfach check if == 6 und dann sofort zuruckgeben das pasword aber wird das mein Problem beheben?
 

JensXF

Mitglied
Du nutzt zum speichern des Passworts die lokale Variable von deiner Methode setPassword.
Das Passwort soll genau 6 Zeichen lang sein, du überprüfst nur ob es größer ist.
So wie die Methoden aufgebaut sind brauchst du keine Parameter definieren.
 

arhzz

Bekanntes Mitglied
Du nutzt zum speichern des Passworts die lokale Variable von deiner Methode setPassword.
Das Passwort soll genau 6 Zeichen lang sein, du überprüfst nur ob es größer ist.
So wie die Methoden aufgebaut sind brauchst du keine Parameter definieren.
Ah ja es steht es soll genau 6 Zeichen lang sein,my bad dachte es durfte einfach nicht grosser sein.

Ja genau also ich will das ich zum speichern des Passworts nicht die lokale variable nutzte sondern die Globale,wie schaff ich das?

Und denn letzten tipp verstehe ich leider nicht ganz,also du meinst ich konnte es ohne parameter machen? In der angabe steht dass ich doch parameter verwenden soll,also ich vermute ich verwende die falsche parameter? Ich sollte wahrscheinlich die Globale variable verwenden.
 

JensXF

Mitglied
Und denn letzten tipp verstehe ich leider nicht ganz,also du meinst ich konnte es ohne parameter machen? In der angabe steht dass ich doch parameter verwenden soll,also ich vermute ich verwende die falsche parameter? Ich sollte wahrscheinlich die Globale variable verwenden.
Dann solltest du die Nutzereingabe in der main durchführen, die Eingabe an deine Methode übergeben und in der Methode der globalen Variable zuweisen.
 

berndoa

Top Contributor
So ist es, entweder in der setPassword Methode selbst das Passwort einlesen lassen (In.readString() und so) und keine Parameter übergeben.
oder das Passwort an die Methode als parameter übergeben und in der Methode slebst nichts mehr einlesen.
Beides gleichzeitig macht keinen Sinn.

Übrigens, und das ist jetzt mehr eine Shcönheitssache:
Sagen wir, Jemand gibt ein unpassendes Passwort ein.
Jemand könnte bspw. ein 10 Zeichen langes passwort ein.
Dann solltest du ZUERST prüfen ob es ein zulässiges Passwort ist. Und erst danachdas Passwort, falls passend, ändern.

So wie du es aktuell hast, wird erst das neue Passowrt gesetzt . und hinterher sagst du dann "Öh, passwort hat unpassende Länge"
Aber geändert ist es trotzdem.

Insofern würde ich dir raten:
Mach einfach eine fallunterscheidung.
Falls passwortlänge==6, dann ändere das Passwort.
Ansonsten (else) gib deine "Fehlermeldung" aus.

Dadurch wird das Passwort wirklich nur geändert wenn es auch die richtige Länge hat.

In der checkpassword methode das gleiche Spiel, entweder in der methode password einlesen und keine parameter. oder in der methode wird ncihts eingelesen und das passwort wird als parameter an die methode übergeben.
 

arhzz

Bekanntes Mitglied
Okay ich habe es jetzt so probiert;
Java:
import inout.*;
public class test {


    static String password;

    public static String setPassword(String password) {
        return password;

    }
    public static boolean checkPassword(String password) {
        return password.equals(password);
    }

    public static void main(String[] args){
        Out.println("Please set a password");
        password = In.readString();
        if(password.length() == 6) {
            Out.println(setPassword(password));
        } else {
            Out.println("Password is not valid");
        }
            Out.println("Please enter the password");
            password = In.readString();
            Out.println(checkPassword(password));

    }
}

Habe das problem jetzt,es wird immer true zuruckgeliefert,egal ob die Passworte ander sind.Das kann halt nur bedeuten das in der checkpassword methode password mit sich selbs vergliechen wird.Ich habe es auch mit password.equals(setPassword(password)) probiert,immer noch das selbe Problem
 

Jw456

Top Contributor
public static boolean checkPassword(String password) {
return password.equals(password);
}
wenn du auf das PW in der klassen variablen zugreifen willst musst du this benuten.


ich würde einen andern Bezeichner benutzen um diesen Fehler aus dem weg zugehen.


public static boolean checkPassword(String logginPw) {
return logginPw.equals(password);
}


Thema Sichtbarkeit von Variablen würde ich sagen. Lokale und Klassen Variablen bitte auseinander halten.
in diesem fall ist "password" lokal, und "this.password" das globale (Klasse)
 
Zuletzt bearbeitet:

Jw456

Top Contributor
was soll eigentlich das?

public static String setPassword(String password) {
return password; }

du gibst genau das zurück was du übergibst
 
K

kneitzel

Gast
Also nur einmal paar Verständnis-Dinge:

Java:
    static String password;

    public static String setPassword(String password) {
        return password;
    }

Du hast eine Klassenvariable password.
Dann kommt eine Klassenmethode setPassword. In einer Klassenmethode könntest Du auf eine statische Variable zugreifen, aber jetzt passiert folgendes:
Der Parameter heißt genau so, wie die Klassenvariable. Damit versteckt dieser Parameter die Klassenvariable.
Dein return gibt nun den parameter zurück und verändert hast Du eh nichts ...

Da wäre so etwas zu erwarten:
Java:
    static String password;

    public static void setPassword(String password) {
        test.password = password;
    }

test ist der Name der Klasse - entgegen allen Naming Standards! Aber auf die versteckte Klassenvariable kannst Du per Klassenname.Klassenvariable zugreifen. Und ein Setter gibt nichts zurück, daher void als Rückgabe.

Java:
    public static boolean checkPassword(String password) {
        return password.equals(password);
    }

Hier hast Du das gleiche: Du vergleichst den Parameter password mit dem Parameter password ... ja, wenn man etwas mit sich selbst vergleicht, dann sollte es wohl gleich sein....

Edit: Hatte versehentlich abgeschickt ehe ich fertig war ... daher noch zu Ende geschrieben ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Strings untereinander in einer Liste vergleichen Java Basics - Anfänger-Themen 18
M Strings vergleichen Java Basics - Anfänger-Themen 10
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
D Vergleichen von Strings Java Basics - Anfänger-Themen 6
N Zwei Strings mit "==" vergleichen warum TRUE Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
H Strings vergleichen & sortieren Java Basics - Anfänger-Themen 20
R illegal start of expression - 3 Strings vergleichen mit .equals () Java Basics - Anfänger-Themen 5
S Strings miteinander vergleichen Java Basics - Anfänger-Themen 5
1 HILFE! Strings mit CompareTo vergleichen Java Basics - Anfänger-Themen 3
B Variablen Unbekante anzahl an Strings splitten und vergleichen Java Basics - Anfänger-Themen 31
M Zwei Strings vergleichen? Java Basics - Anfänger-Themen 10
C Datentypen Mehrere Strings vergleichen Java Basics - Anfänger-Themen 5
T Strings mit compareto vergleichen und array sortieren Java Basics - Anfänger-Themen 14
W Strings vergleichen Java Basics - Anfänger-Themen 2
L Strings vergleichen Java Basics - Anfänger-Themen 17
B mehrere Strings vergleichen Java Basics - Anfänger-Themen 24
G Strings vergleichen mit equals, geht das kürzer? Java Basics - Anfänger-Themen 4
A Datentypen strings vergleichen Java Basics - Anfänger-Themen 9
G Strings vergleichen Java Basics - Anfänger-Themen 14
C Strings vergleichen mit == Java Basics - Anfänger-Themen 6
J Strings in charArrays umwandeln und vergleichen Java Basics - Anfänger-Themen 4
T Strings vergleichen Java Basics - Anfänger-Themen 5
X Strings mit If vergleichen Java Basics - Anfänger-Themen 5
P Strings über whitelist vergleichen Java Basics - Anfänger-Themen 14
Q Zwei Strings vergleichen Java Basics - Anfänger-Themen 14
N 2 Strings vergleichen Java Basics - Anfänger-Themen 4
G Strings vergleichen Java Basics - Anfänger-Themen 6
K Strings vergleichen funktioniert nicht Java Basics - Anfänger-Themen 3
S Strings miteinander vergleichen Java Basics - Anfänger-Themen 12
D Strings vergleichen, Problem "" Zeichen? Java Basics - Anfänger-Themen 3
T Strings bis zum Zeichen ";" vergleichen! Java Basics - Anfänger-Themen 6
U Strings vergleichen Java Basics - Anfänger-Themen 2
S Von der Tastatur eingelesene Strings miteinander vergleichen Java Basics - Anfänger-Themen 4
G Strings vergleichen: Unterschiede erfragen Java Basics - Anfänger-Themen 5
T Länge von Strings im Array vergleichen Java Basics - Anfänger-Themen 2
N Strings vergleichen die 2te. Java Basics - Anfänger-Themen 8
D Rekursiv 2 Strings vergleichen Java Basics - Anfänger-Themen 14
L Strings vergleichen wie in SQL mit "Like" Java Basics - Anfänger-Themen 3
G Fehlertoerantes Vergleichen von Strings? Java Basics - Anfänger-Themen 13
G die ersten Zeichen eines Strings Vergleichen mit String Java Basics - Anfänger-Themen 6
W mehrere Strings vergleichen, (kein equal-Problem) Java Basics - Anfänger-Themen 3
S Warum Strings mit equals vergleichen? Java Basics - Anfänger-Themen 6
S 100%iges Vergleichen von 2 Strings Java Basics - Anfänger-Themen 18
S Vergleichen von Strings Java Basics - Anfänger-Themen 6
M Strings vergleichen Java Basics - Anfänger-Themen 3
B Strings vergleichen Java Basics - Anfänger-Themen 2
M Strings vergleichen Java Basics - Anfänger-Themen 3
D Strings vergleichen Java Basics - Anfänger-Themen 4
J Strings vergleichen Java Basics - Anfänger-Themen 2
Dilandau strings vergleichen? Java Basics - Anfänger-Themen 3
W Gleichzeitiges ersetzen mehrerer Strings Java Basics - Anfänger-Themen 7
R Datentypen Das Verhalten von Strings als Datentypen Java Basics - Anfänger-Themen 7
N Nachkommastellen von Strings Java Basics - Anfänger-Themen 3
T Strings unveränderlich???? Java Basics - Anfänger-Themen 22
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
S Die durchschnittliche Länge der Strings Java Basics - Anfänger-Themen 11
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
sserio StringBuilder und Strings Java Basics - Anfänger-Themen 8
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
N Strings verpflechten Java Basics - Anfänger-Themen 4
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
L Strings aneinanderhängen Java Basics - Anfänger-Themen 2
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
Q Besitzen zwei Strings identische Buchstaben, nur in anderer Reihenfolge? Java Basics - Anfänger-Themen 10
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Ternärer Operator mit Strings Java Basics - Anfänger-Themen 3
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
P Verketten, Aneinanderreihen von Strings Java Basics - Anfänger-Themen 2
M Strings mit gerader und ungerader Länge ausgeben Java Basics - Anfänger-Themen 10
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
W Strings und das parsen Java Basics - Anfänger-Themen 8
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
M Konkatenation von zwei Strings Java Basics - Anfänger-Themen 6
J Abbruchbedingung in Schleife/ Untersuchung von Strings Java Basics - Anfänger-Themen 2
S Buchstaben in Großbuchstaben (Strings) Java Basics - Anfänger-Themen 5
X Anagramm mit Strings und Methode Java Basics - Anfänger-Themen 53
P geschachtelte Schleife mit Strings Java Basics - Anfänger-Themen 2
P Strings mit der Axt zerteilen Java Basics - Anfänger-Themen 7
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
K Strings hochzählen Java Basics - Anfänger-Themen 20
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
J Unveränderbarkeit von Strings Java Basics - Anfänger-Themen 3
O Klammerung bei Strings Java Basics - Anfänger-Themen 10
A Liste aus drei Strings erstellen Java Basics - Anfänger-Themen 5
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D ergebnis.matches("[1-9]?[0-9].[0-9][0-9]?") ein teil eines größeren Strings Java Basics - Anfänger-Themen 12
J Breite eines Strings bestimmen Java Basics - Anfänger-Themen 4
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben