2016-05-06 11 views
0

Grundsätzlich habe ich Probleme mit meiner if-Anweisung. Ich möchte es „keine CDs für“ + val sagen, aber dies ist die Ausgabe erhalte ich:Wenn sonst Anweisung innerhalb for Schleife Probleme mit Hashmaps

Welcome to the CD Database 
    Enter search, add, name, list, or quit: 
    name 
    Enter the full or partial name: 
    asdfa 
    Enter search, add, name, list, or quit: 

wie Sie sehen können, ist es nichts zurück.

mein Code:

public void printByName(String val) { 

    int i = 0; 
    for (CompactDisc values : database.values()) { 

     if (values.getArtist().contains(val)) { 

      System.out.println(values); 

     } else if (i > database.size() && !values.getArtist().contains(val)) { 

      System.out.println("No CDs found for " + val); 

     } 

     i++; 
} 
} 

aus irgendeinem Grund mein Zähler nicht iterieren und diese verrückt wurde mir fahren für hours.I es keine CDs gefunden sagen wollen, nachdem es durch die hashmap Schleifen und findet keine eine teilweise Übereinstimmung der Zeichenfolge eingegeben der Benutzer

zusätzliche Ausgabe:

Welcome to the CD Database 
Enter search, add, name, list, or quit: 
name 
Enter the full or partial name: 
Mo 
Artist:Modest Mouse Title:We Were Dead Before the Ship Even Sank price:5.99 
Artist:Thelonious Monk Title:Monk's Dream price:5.99 
Enter search, add, name, list, or quit: 
list 
Artist:Isley Brothers Title:Funky Family price:5.99 
Artist:Muddy Waters Title:At Newport price:6.99 
Artist:Sly & The Family Stone Title:Greatest Hits price:6.99 
Artist:Modest Mouse Title:We Were Dead Before the Ship Even Sank price:5.99 
Artist:St. Germain Title:Tourist price:5.99 
Artist:Bob Dylan Title:Desire price:6.99 
Artist:The Beatles Title:Abbey Road price:6.99 
Artist:Los Straitjackets Title:The Velvet Touch of... price:5.99 
Artist:The Velvet Underground Title:Peel Slowly and See price:6.99 
Artist:Thelonious Monk Title:Monk's Dream price:5.99 
Enter search, add, name, list, or quit: 
quit 
Program ending. 
+0

Sie verwenden nie den Zähler 'i' und ich sehe auch keine Hashmaps irgendwo verwendet. Was ist das Problem? –

+0

die hashmap wird am Anfang meines Codes als Datenbank deklariert (ich habe nur die eine Methode veröffentlicht), mein Problem ist, dass es keine "No CDs gefunden" ausgibt + val – Demuze28

Antwort

0

Es gibt ein Problem in Ihrer logischen Struktur. Ihr 'if' befindet sich in Ihrem "loop" -Block. Es muss draußen sein. Werfen Sie einen Blick:

public void printByName(String val) { 
    int i = 0; 
    for (CompactDisc values : database.values()) { 
     if (values.getArtist().contains(val)) { 
      System.out.println(values); 
      i++; 
     } 
    } 
    if (i==0) { 
     System.out.println("No CDs found for " + val); 
    } 
} 
+0

Du bist der Mann! Danke, es hat perfekt funktioniert! – Demuze28

+0

Was ist mit dem Fall, wo es mehrere nicht Übereinstimmungen gibt? –

+0

@TimBiegeleisen Der Punkt war, alle hashmap-Werte zu durchlaufen und dann, wenn es keine teilweise Übereinstimmung gibt, dem Benutzer zu sagen, dass er sie nicht finden kann, muss er dem Benutzer nur einmal sagen. – Demuze28

1

die Bedingung i > database.size() wird nie wahr becaus sein e Die Schleife wird beendet, bevor i die Datenbankgröße erreicht. Versuchen Sie, Ihren Code zu ändern:

public void printByName(String val) { 
    for (CompactDisc values : database.values()) { 
     if (values.getArtist().contains(val)) { 
      System.out.println(values); 
     } else { 
      System.out.println("No CDs found for " + val); 
     } 

    } 
} 
+0

es gibt keine CDs gefunden für adfd 10 mal – Demuze28

+0

Und Warum ist das falsch? –

+0

es sollte nur der Anwender wissen lassen, dass es keine cds einmal – Demuze28

0

Es else if (i >= database.size() && !values.getArtist().contains(val)) für die oben genannten Grund sein sollte.

Verwandte Themen