2016-03-21 12 views
1

In diesem Code habe ich ein Array mit 5 Elementen und jedes Element enthält einen Wert. Im Folgenden versuche ich in der while-Schleife dem Benutzer 3 Versuche zu geben, welche Zahl in dem Array enthalten ist (der Benutzer gibt seine Vermutungen ein). Mein Problem ist, dass ich nicht weiß, wie man die Schätzung des Benutzers (gespeichert in einer Variablen choose) mit den Array-Werten caja[i] zum Drucken macht, ob der Benutzer abhängig von einer korrekten oder falschen Schätzung gewinnt oder verliert.Matching Array-Werte mit Variablen

public static void main(String[] args) 
{ 
    int[] caja = new int [5]; 

    caja[0] = 1; 
    caja[1] = 3; 
    caja[2] = 5; 
    caja[3] = 7; 
    caja[4] = 9; 

    System.out.println("Mostrando todos los numeros del arreglo"); 
    for (int i = 0; i < caja.length; i++) 
    { 
     System.out.println(caja[i]); 
    } 
    System.out.println(); 

    int electionGame = 3; 
    int o = 0; 
    while(electionGame > 0) 
    {    
     Scanner sc = new Scanner(System.in); 
     int choose = sc.nextInt(); 
     for (int i = 0; i < caja.length; i++) 
     { 
      o = o + 1; 
      if(choose == caja[i]) 
      { 
       System.out.println("Ganastes"); 
       break; 
      } 
      else 
      { 
       System.out.println("Perdiestes"); 
       break; 
      } 
     } 
     electionGame--; 
     } 
    } 
} 
+0

So hat der Benutzer alle 5 Werte zu erraten oder 1 Wert mit dem Array mit seinen Ziffern? – ZbyszekKr

+0

Was ist der Zweck der Variablen 'o'? –

+0

@ Lagomorpph der Benutzer haben 3 mal zu den Array-Werte –

Antwort

3

Ihr Problem ist, dass Sie in jedem Fall aus der Schleife zu brechen:

if(choose == caja[i]) 
{ 
    System.out.println("Ganastes"); 
    break; 
} 
else 
{ 
    System.out.println("Perdiestes"); 
    break; 
} 

Statt dies zu tun (und Druck das Ergebnis nach nur dem ersten Vergleich), sollten Sie einen Booleschen haben angibt, ob die Zahl im Array gefunden wurde:

int electionGame = 3; 
boolean found = false; //indicates whether user has found right number 
while (electionGame > 0 && !found) { 
    Scanner sc = new Scanner(System.in); 
    int choose = sc.nextInt(); 
    for (int i = 0; i < caja.length && !found; i++) { 
     if (choose == caja[i]) { 
      found = true; 
     } 
    } 
    electionGame--; 
    if (found) { 
     System.out.println("you won"); 
    } else { 
     System.out.println("nope"); 
    } 
} 

auf diese Weise können Sie die Variable überprüfen und den Benutzer, ob er gewonnen oder verloren.

1

Hier sind einige zusätzliche Vorschläge. Die Antwort von Alex (https://stackoverflow.com/a/36133864/6077352) ist gut. Bitte beachten Sie die Kommentare im Code.

import java.util.Scanner; 

/** https://stackoverflow.com/q/36133524/6077352 */ 
public class GuessNumber { 
    public static void main(String[] args) { 

     int[] caja = new int[5]; 
     caja[0] = 1; 
     caja[1] = 3; 
     caja[2] = 5; 
     caja[3] = 7; 
     caja[4] = 9; 

     System.out.println("Mostrando todos los numeros del arreglo"); 
     for (int i = 0; i < caja.length; i++) { 
      System.out.println(caja[i]); 
     } 
     System.out.println(); 

     int tries = 3; 
     Scanner sc = new Scanner(System.in);// no need to create scanners in loop 
     while (tries-- > 0) {// count down tries 
      System.out.print("Please guess a number... "); 
      int guess = sc.nextInt(); 
      boolean win = false;// flag to determine if won 
      for (int i : caja) {// iterate through array and check if guess is inside 
       win |= (i == guess);// when inside: win=true 
      } 
      System.out.println("Answer right? " + win); 
      System.out.println(); 
     } 
    } 
} 
0

Also, wenn der Benutzer einen der Werte des Arrays zu erhalten versuchen, können Sie vielleicht Ihre while-Schleife dieses zu ändern:

while (electionGame > 0) { 
     Scanner sc = new Scanner(System.in); 
     int choose = sc.nextInt(); 
     boolean ganaste = false; 
     for (int i = 0; i < caja.length; i++) { 
      o = o + 1; 
      if (choose == caja[i]) { 
       ganaste = true; 
       break; 
      } 
     } 

     if (ganaste) 
      System.out.println("Ganastes"); 
     else 
      System.out.println("Perdiestes"); 

     electionGame--; 
    } 
+0

Wenn Sie die Anwendung nach dem ersten korrekten Versuch beenden möchten, geben Sie einfach eine 'return' nach' Ganaste' ein, natürlich in geschweiften Klammern. –