2016-11-06 17 views
0

Hier ist das Problem, das ich bekam: Schreiben Sie ein Programm, das Website-Namen als Tastatureingabe nimmt, bis der Benutzer das Wort "Stop" eingibt. Das Programm zählt nur auch, wie viele der Website-Namen sind kommerzielle Website-Namen (d. H. Mit .com enden), und geben Sie diese Anzahl.Websites als Tastatureingabe nehmen?

Das Problem, das weiterhin auftritt, ist, auch wenn ich das Wort stop als Eingabe tippe, es sagt immer noch zu "die nächste Seite eingeben." Ich bin mir nicht sicher, wo ich falsch gelaufen bin.

Kann jemand helfen? Hier ist mein Code.

import java.util.Scanner; 


public class NewClass 
{ 
public static void main(String [] args) 

{ 

    int numberOfComSites = 0; 
    String commercialNames = "com"; 
    final String SENTINEL = "stop"; 
    String website; 

    Scanner scan = new Scanner(System.in); 
    System.out.print("Enter a website, or 'stop' to stop > "); 
    website = scan.next(); 

    String substring = website.substring(website.length()-3); 

    while (website != SENTINEL) 
    { 
     if(substring == commercialNames) 
     { numberOfComSites++; 
     } 
     System.out.print("Enter the next site > "); 
     website = scan.next(); 
    } 

     System.out.println("You entered" + numberOfComSites + "commercial websites."); 
     } 




} 

Vielen Dank!

Antwort

0

Sie verwenden Referenz Gleichheit == Strings zu vergleichen. Ihre Strings stammen aus verschiedenen Quellen. SENTINEL kommt vom konstanten Pool, während website von Benutzereingabe kommt. Sie sind immer anders als Referenzen.

Um Strings nach Wert zu vergleichen, sollte die Methode equals verwendet werden. In Ihrem Fall Sie sollten

while (website != SENTINEL) 

von

while (!SENTINEL.equals(website)) 

Hinweis ersetzen, die wir mit Benutzereingabe konstant vergleichen. Diese Adresse ist ein Problem, wenn websitenull ist. Dies ist nicht der Fall in Ihrem Code, aber es ist ein Zeichen für guten Stil.

Weitere Informationen finden Sie unter What is the difference between == vs equals() in Java?.

0

while (website != SENTINEL) 

mit

while(!website.equals(SENTINEL)) 

website ist von String Typ ersetzen und ist kein Urtyp. Sie müssen also die equals Methode verwenden, um String zu vergleichen. == wird zum Referenzvergleich verwendet.

siehe für weitere Einzelheiten dieses What is the difference between == vs equals() in Java?