Brauch kurz hilfe bei nem kleinem Zahlenschloss Programm. :)

Status
Nicht offen für weitere Antworten.

joni89

Mitglied
Und zwar gehts um das Programm:

Java:
import java.io.*;

class Zahlenschloss
{
  public static void main( String[] args ) throws IOException
  {
    int ersteZahl  =  6,
        zweiteZahl = 12,
        dritteZahl = 30;
    int zahl;

    BufferedReader stdin = new BufferedReader(
        new InputStreamReader( System.in ) );
    String input;

    int     versuch  = 0;
    boolean offen    = false;

    while ( versuch < 3 && !offen )
    {
      //Versuch einer Kombination, wenn richtig Variable offen auf true setzen

      boolean korrekt =  true;

      //Erste Zahl
      System.out.println("\nGeben Sie die erste Zahl ein: ");
      input = stdin.readLine();
      zahl  = Integer.parseInt( input );

      if ( zahl != ersteZahl )
        korrekt = false ;

      //Zweite Zahl
      System.out.println("Geben Sie die zweite Zahl ein: ");
      input = stdin.readLine();
      zahl  = Integer.parseInt( input );

      if ( zahl != zweiteZahl )
        korrekt = false  ;

      //Dritte Zahl
      System.out.println("Geben Sie die dritte Zahl ein: ");
      input = stdin.readLine();
      zahl  = Integer.parseInt( input );

      if ( zahl != dritteZahl )
        korrekt = false  ;

      //Ergebnis
      if ( korrekt )
      {
        System.out.println("Das Schloss oeffnet sich.");
        offen = true;
      }
      else
        System.out.println("Das Schloss bleibt zu.");

      versuch = versuch + 1;
    }

  }
}

angeblich kann mans verkürzen, also die if anweisungen weglassen und stattdessen die while anweisung verlängern. allerdings komm ich nicht drauf, wie das funktionieren soll.. kann mir jemand helfen? 🙂
 
Besonders interessant wird's wenn du daraus jetzt ein Zahlenschloss mit 10 Ziffern machen willst 😀

Als tipp:
Java:
int ersteZahl  =  6,
        zweiteZahl = 12,
        dritteZahl = 30;
--->
Java:
int zahlen[] = new int[] { 6, 12, 30 };

Den Rest findest du schon raus 🙂
 
du musst Gemeinsamkeiten/ Unterschiede in dem Code suchen,
du hast 3x fast den gleichen Code, nur muss der Ausgabetext erste/ zweite/ dritte lauten
und die Vergleichszahl ist immer eine andere,
sowas kann man mit Arrays/ Schleifen lösen,
Beispiel
Java:
public class Test
{
    public static void main(String[] args)
    {
        System.out.println("Hallo 0");
        System.out.println("Hallo 1");
        System.out.println("Hallo 2");
        System.out.println("Hallo 3");
        System.out.println("Hallo 4");
        System.out.println("--");
        for (int i = 0; i < 5; i++)
        {
            System.out.println("Hallo " + i);
        }
    }
}
 
Hm, das Problem is nur, dass in dem tutorial (Vollstndiges Programm)
noch nie arrays oder mehrere ints in einen tun vorkam, also is da wohl ne andere lösung gemeint. es heißt irgendwas von einfach komplizierteren boolearischen ausdruck ins while, und dafür keine if. weiß aber nicht, was ich da rein schreiben soll.. und vorallem so (nächster schritt), dass es nachher so funktionieren soll, dass es sich auch öffnet wenn man (höchstens) 2 niedriger oder 2 höher eingibt
also z.b. wenn die schluss nummern 6 20 und 24 sind man auch 4 22 und 25 eingeben könnte.
 
Schau dir das an:
Java:
import java.io.*;

class Zahlenschloss {
    public static void main(String[] args) throws IOException {
        int[] code = {6, 12, 30};

        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        for (int i = 0; i < 3; i++) {
            //Versuch einer Kombination, wenn richtig Variable offen auf true setzen
            boolean korrekt = true;
            for (int j = 0; j < code.length; j++) {
                System.out.println("Geben Sie die " + (j + 1) + ". Zahl ein: ");
                int zahl = Integer.parseInt(stdin.readLine());
                if (zahl != code[j]) {
                    korrekt = false;
                    break;
                }
            }
            //Ergebnis
            if (korrekt) {
                System.out.println("Das Schloss öffnet sich.");
                break;
            }
            System.out.println("Das Schloss bleibt zu.");
        }
    }
}
Da kannst du einfach int[] code vergrössern, in dem du in das Array mehrere Zahlen schreibst.
 
versteh ich soweit.

aber was bedeutet for, bzw was is da der unterschied zu while? und was das "j++"?
break kenn ich auch nicht..code.length kann ich mir vorstellen, kam aber auch nie vor.

würd das gern mit ner normalen while anweisung lösen, denke, die anderen sachen kommen dann schon noch irgendwann im tutorial. 🙂

also ich habs jetz mal so versucht, ohne die if anweisungen.

Java:
import java.io.*;

class Zahlenschloss
{
  public static void main( String[] args ) throws IOException
  {
    int ersteZahl  =  6,
        zweiteZahl = 12,
        dritteZahl = 30;
    int zahl1, zahl2, zahl3;

    BufferedReader stdin = new BufferedReader(
        new InputStreamReader( System.in ) );
    String input;

    int     versuch  = 0;
zahl1 = 0;
zahl2 = 0;
zahl3 = 0;

    while (versuch < 3 && zahl1 != ersteZahl && zahl2 != zweiteZahl && zahl3 != dritteZahl)
    {

      System.out.println("\nGeben Sie die erste Zahl ein: ");
      input = stdin.readLine();
      zahl1  = Integer.parseInt( input );

      System.out.println("Geben Sie die zweite Zahl ein: ");
      input = stdin.readLine();
      zahl2  = Integer.parseInt( input );

      System.out.println("Geben Sie die dritte Zahl ein: ");
      input = stdin.readLine();
      zahl3  = Integer.parseInt( input );


      if (zahl1 == ersteZahl && zahl2 == zweiteZahl && zahl3 == dritteZahl)
{
      System.out.println("Das Schloss öffnet sich.");
}
	  else
{
	  System.out.println("Das Schloss bleibt zu.");
}
      versuch = versuch + 1;
    }

  }
}
 
Zuletzt bearbeitet:
also, die 3 Schleifentypen sind so aufgebaut:
Java:
while (bedingung) {
    doSomething();
}
Wird ausgeführt, so lange bedingung true ist
Java:
do {
    doSomething();
} while (bedingung);
Wir ein Mal sowieso ausgeführt, und dann solange bedingung true ist
Java:
for (eingang(); bedingung; durchgang()) {
    doSomething();
}
am Anfang wird eingang() ausgeführt, nach jedem Schleifendurchlauf durchgang() ausgeführt und für den nächsten Durchlauf bedingung geprüft.
 
@ radauer du verstehst mich falsch, ich wollte damit nur ausdrücken, dass ich das alles nicht versteh, also dass das alles im tutorial nicht vorkam und deswegn wohl ne andere lösung angedacht war.

aber danke trotzdem. 🙂
 
ich noch mal.. ^^

hab nun mit dem logischen denken, was ich zusammen bekommen hab (sehr anfängertechnisch) versucht, nen toleranzbereich von +-3 bei den eingaben einzubauen.
nur irgendwas funktioniert nicht, also wenn ich dann nen abweichenden bereich eingeb, gibts trotzdem aus, dass das schloss zu bleibt und ich komm nicht drauf, was es is.

hier das programm:

Java:
import java.io.*;

class Zahlenschloss
{
  public static void main( String[] args ) throws IOException
  {
    int ersteZahl  =  6,
        zweiteZahl = 12,
        dritteZahl = 30;
    int zahl1, zahl2, zahl3;

    BufferedReader stdin = new BufferedReader(
        new InputStreamReader( System.in ) );
    String input;

    int     versuch  = 0;

zahl1 = 0;
zahl2 = 0;
zahl3 = 0;


    while (versuch < 3 && (zahl1 > (ersteZahl +3) || zahl1 < (ersteZahl-3)) && (zahl2 > (zweiteZahl +3) || zahl2 < (zweiteZahl-3)) && (zahl3 > (dritteZahl +3) || zahl3 < (dritteZahl-3)))
    {

      System.out.println("\nGeben Sie die erste Zahl ein: ");
      input = stdin.readLine();
      zahl1  = Integer.parseInt( input );

      System.out.println("Geben Sie die zweite Zahl ein: ");
      input = stdin.readLine();
      zahl2  = Integer.parseInt( input );

      System.out.println("Geben Sie die dritte Zahl ein: ");
      input = stdin.readLine();
      zahl3  = Integer.parseInt( input );


      if ((zahl1 <= (ersteZahl +3) && zahl1 >= (ersteZahl - 3)) && (zahl2 <= (zweiteZahl +3) && zahl2 >= (zweiteZahl - 3)) && (zahl3 <= (dritteZahl +3) && zahl3 >= (dritteZahl - 3)))
{
      System.out.println("Das Schloss öffnet sich.");
}
	  else
{
	  System.out.println("Das Schloss bleibt zu.");
}
      versuch = versuch + 1;
    }

  }
}

geht eben speziell um die if ()und while ()zeile.
 
Zuletzt bearbeitet:
ich würde das ja so machen ^^

package xxx;
import java.io.*;
public class xxxx {


public static void main(String[] args) throws IOException{

BufferedReader eingabe= new BufferedReader(new InputStreamReader(System.in));


int laufvariable;
int [] code= new int [6];
int [] vorgabe = {1,2,3,4,5,6};



int versuch = 0;
boolean offen = false;

System.out.println("Sie haben nur 3 Chancen");
while ( versuch < 3 && !offen)
{
boolean schloss = true;

for(laufvariable=0; laufvariable<=5; laufvariable++){

System.out.println("Bitte geben Sie den Code ein. Geben Sie die " +(laufvariable+1) +"te Stelle ein");

code [laufvariable]=Integer.parseInt(eingabe.readLine());

if (code[laufvariable]== vorgabe[laufvariable])
{
System.out.println("die "+(laufvariable+1) +"te Stelle ist Richtig");
}
else
{
System.out.println("Sie haben den Code falsch eingegeben");
schloss=false;
}
}
if (schloss==true){
System.out.println("Schloss offen");
offen=true;
}
else{

System.out.println("Das Schloss bleibt zu");
versuch = versuch + 1;}
}
}
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben