2017-01-20 4 views
-1

Ich habe eine ArrayList von Produkten "Snacks", die aus einer Datei gelesen und in dieser ArrayList gespeichert werden und ihre CODES, NAMES, PREICES anzeigen. mit diesem Code, mit dem Namen Select() -Methode:Foreach-Schleife funktioniert nur, um Elemente in ArrayList zu speichern

public void selectProduct() { 
loadProducts(); 
    System.out.println("Insert product code"); 
    Scanner keyboard = new Scanner(System.in); 
    for(Snack s : arraysnack){ 
     if(keyboard.next().equals(s.code)) 
      System.out.println("Product found"); 
     else 
      System.out.println("Product NOT found"); 
       break; 
    } 

Sie Arraylist korrekt von der Methode „Loadproducts“ bevölkerte, aber wenn ich versuche, eine Code-Eingabe zu geben, wenn es um die Reihenfolge der Elemente gespeichert folgt druckt richtig, sonst wird es übersprungen und die foreach-Schleife bricht automatisch, wenn ich das letzte Produkt erreiche. für Beispiel des Array wie dieser (Code, Name, Preis) bevölkert ist

PATA1 san carlo 0.4 
PATA2 chipsters 0.35 
KIND1 kinder 0.75 
KIND2 kinder 0.5 
KIND3 hippo 0.25 
MARS1 mars 0.8 

Wenn ich den Code, um Typen gibt es eine korrekte Ausgabe (aber immer nach 6 Iterationen enden), aber wenn ich die ersten überspringe , die Ausgabe gibt "Produktfund" nur, wenn ich die zweite ... eintippe Ich möchte eine "Produktfund" Ausgabe, wenn ich einen der 6 Codes speichere, die in der arraylist gespeichert werden, auch wenn die Bestellung nicht respektiert wird, und ich will iterieren mehr als 6 mal (weil es nur 6 Produkte gibt).

+0

Sie sollten "brechen", wenn das Produkt gefunden wird. Und Sie suchen bei jeder Iteration nach einem neuen Produkt. – shmosel

Antwort

0

Sie können list.contains() einfach verwenden, anstatt die Arraylist in Reihenfolge zu durchlaufen.

0
for(Snack s : arraysnack){ 
     if(keyboard.next().equals(s.code)) 

In jeder Iteration fordern Sie eine neue Eingabe über die Tastatur an. Das ist falsch! Sie sollten den Eingang einmal vor die Schleife erhalten.

boolean isFound = false; 
String userCode = keypord.next(); 
for(Snack s : arraysnack){ 
    if(userCode.equals(s.code)){ // <- Especially for beginners, I recommend ALWAYS use brackets! 
     System.out.println("Product found"); 
     isFound = true; 
     break; // Break here! It has been found. 
    } 
    //else 
     // Here you only know that it isn't the current product! 
     // System.out.println("Product NOT found"); 
     // break; <- this break would have been outside if/else !! 
} 
if(!isFound) System.out.println("Product NOT found"); 

Nebenbei bemerkt: Klammern - sie nutzen!

Dieses:

if(keyboard.next().equals(s.code)) 
    System.out.println("Product found"); 
else 
    System.out.println("Product NOT found"); 
    break; 

entspricht dies:

if(keyboard.next().equals(s.code)){ 
    System.out.println("Product found"); 
}else{ 
    System.out.println("Product NOT found"); 
} 
break; 

So ist die break passieren wird immer - unabhängig vom Ergebnis der Bedingung war.

+0

Verstanden! Jetzt funktioniert es perfekt ... Also ich werde nur eine Eingabe vor und dann foreach Schleife automatisch überprüfen, ob Code Instanz von jedem Snack im Array ist? Vielen Dank! –

+0

@LudovicoMarzagalli Ich bin froh, dass ich helfen konnte. Überlegen Sie, ob Sie hier eine der Antworten akzeptieren oder ob Sie sie als hilfreich bewerten. – Fildor

0

Verwenden Sie .nextLine() statt nur next(), um sicherzustellen, dass der Scanner die Eingabedaten mit dem Zeilentrennzeichen zerlegt. Außerdem haben Sie bei if-Anweisung keine Klammern verwendet, und dann folgte auf die else zwei Zeilen Code. Wenn Sie die Klammern nicht verwenden, wird nur die Zeile, die dem "else" folgt, Teil des else-Blocks. Alles, was dieser Zeile folgt, wird unabhängig von der if-Anweisung ausgeführt - deshalb bricht es einfach. Außerdem möchten Sie wahrscheinlich nur eine Eingabe pro Iteration.

Scanner keyboard = new Scanner(System.in); 
String input = keyboard.nextLine(); 
for(Snack s : arraysnack){ 
    if(input.equals(s.code)){ 
     System.out.println("Product found"); 
    } else { 
     System.out.println("Product NOT found"); 
     break; 
    } 
} 
Verwandte Themen