Problem mit Rückgabe Wert von Methoden

steffen1997

Mitglied
Hallo,
zur zeit bearbeite ich ein paar Programmierübungsaufgaben die ich im Internet finde mit Java,
ICh bearbeite grad folgende Aufgabe:"Schreibe ein Programm, das dich solange nach der Geheimzahl „123“ fragt, bis sie richtig eingegeben wird. Dann soll auf dem Bildschirm erscheinen: Tresor ist geöffnet."

Ich habe mir gedacht ich schreibe eine Mainmethode und eine Methode die zum lösen der eigentlichen Aufgabe gedacht ist,es wird ein Wert eingelesen und dann wird diese Eingabe geprüft.
Bisher habe ich es hinbekommen das wenn man es beim ersten Mal richtig eingibt,keine Ausgabe mehr kommt,und man ncihts mehr eingeben kann,jedoch wenn man es zu erst falsch eingibt funktioniert es nicht mehr.

Hier der Quellcode:
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Aufgabe2main {
	static int eingabe = 0 ;
    static int richtig=0;
	public static void main(String[] args) { 
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		
		 try {
			 System.out.print("Geben sie das PW ein");
		      eingabe = Integer.parseInt(reader.readLine());
		      
		      for(;richtig!=1;)
		      {
		    	 lösen(eingabe);
		      }
		 }
             
		    catch(NumberFormatException nfe) {
		      System.out.println("Fehler! Bitte nur Zahlen eingeben!");
		    }
		    catch(IOException ioe) {
		      System.out.println("Fehler beim Lesen von der Tastatur!");
		    }
	     
		
			
			}
			
	public static int lösen(int lösung)
	{
		if(eingabe==123)
		{
			System.out.println("Tresor ist geöffnet");
			richtig=1;
		}
		else
		{
			return eingabe;
		}
		return eingabe;
	}
	
		
		
	}

Schonmal danke im voraus
 
Moin,

habe da auf die Schnelle mal einiges gerade gerückt (ist aber ungetestet!!) 😉

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Aufgabe2main 
{
    public static void main(String[] args) 
    { 
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
         try 
         {
             int eingabe = 0;
             boolean richtig = false;

             while( !richtig )
             {
                 System.out.print("Geben sie das PW ein");
                 eingabe = Integer.parseInt( reader.readLine() );
                 richtig = loesen(eingabe);  // NIE 'ö' oder so !!
              }
         }
         catch(NumberFormatException nfe) 
         {
              System.out.println("Fehler! Bitte nur Zahlen eingeben!");
         }
         catch(IOException ioe) 
         {
             System.out.println("Fehler beim Lesen von der Tastatur!");
         }
    }
            
    public static boolean loesen( int Value)   // NIE 'ö' oder so !!
    {
        if( Value == 123 )
        {
            System.out.println("Tresor ist geöffnet");
            return true;
        }
        return false;
    }
}

Hoffe, das hilft schon mal weiter!

tschüss
Klaus
 
Überdenke noch mal die Teilaufgaben, die zu lösen sind:
- Eingabe einlesen, solange bis eingabe richtig
- Prüfen, ob Eingabe richtig.
Deine Methode lösen prüft zwar und meldet auch ein ergebnis, aber sooo macht man es nicht. Daraus ergibt sich, dass Du für die Prüfung eine Methode brauchst, die true zurück gibt, wenn die eingabe richtig ist und false, wenn nicht. Das ist ein Einzeiler:
Java:
private static boolean istEingabeRichtig(final int eingabe) {
   return eingabe == 123;
}
Das einlesen und prüfen, machst Du am besten in einer do-while Schleife. Denn, wie Du vielleicht noch aus Deinen Grundlagenkursen weißt: "Bei do-while wird erst gemacht und dann geprüft".
 
Danke für eure Antworten,beide haben mir sehr weiter geholfen,hab gemerkt das man keine zweite methode benötigt sondern das auch mit do-while geht,was ich deutlich komfortabler finde,meine letzte
Frage ist warum man keinö benutzen soll?
Liegt dass daran dass das Programm sonst nicht ohne Anpassung auf Linux/MAc Os läuft?
 
Weil ö ein Sonderzeichen ist, welches, je nach encoding, nicht dargestellt werden kann 😉
Wenn ich jetzt deinen Code mit dem ö auf ein Linuxsystem kopiere, kriege ich da Fehler, da UTF8 aus dem Zeichen nicht machen kann. Wenn das 20 mal vorkommt, dann prost Mahlzeit!
 
meine letzte Frage ist warum man keinö benutzen soll?
Liegt dass daran dass das Programm sonst nicht ohne Anpassung auf Linux/MAc Os läuft?
Das kompilierte Programm wird laufen, aber das Handling des Quelltextes wird damit riskant:
- Er kann nur auf deutschen Windows-Rechnern überhaupt editiert werden (bei anderen gibt es diese berühmten ? statt der ö's)
- Wenn Du den Quelltext woanders hin versendest, kann es zu Zeichensatzproblemen kommen. Woanders hinsenden kann vieles sein (per Email als Attachment, Einchekcen in ein Quellcoderepository, Rauf-und runterladen auf Web-/FTP-Server)

Also keine sprachspezifischen Sonderzeichen im Quelltext!
 

Neue Themen


Zurück
Oben