2016-11-06 5 views
0

ここに私が与えられた問題があります: ユーザーが単語「停止」をタイプするまでキーボード入力としてウェブサイト名を取るプログラムを書く。プログラムmは、商用ウェブサイト名(すなわち、.comで終わる)のウェブサイト名の数もカウントし、その数を出力するだけである。ウェブサイトをキーボード入力として使用していますか?

問題が発生し続けるということは、入力として「停止」という単語を入力しても、「次のサイトに入る」ということです。どこが間違っているのか分かりません。

誰でも手助けできますか?ここに私のコードです。

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."); 
     } 




} 

ありがとうございます!

答えて

0

あなたは文字列を比較するための基準の平等==を使用しているため、これを参照してください。文字列はさまざまなソースからのものです。 は定数プールから、websiteはユーザー入力から得られます。それらは常に参照として異なっています。

文字列を値で比較するには、equalsメソッドを使用する必要があります。あなたのケースでは、あなたは、

while (!SENTINEL.equals(website)) 

我々は、ユーザの入力と定数を比較通告により

while (website != SENTINEL) 

を交換する必要があります。この問題は、websitenullの場合に発生します。あなたのコードではそうではありませんが、それは良いスタイルの兆候です。

詳細については、What is the difference between == vs equals() in Java?を参照してください。

0

while(!website.equals(SENTINEL)) 

website

while (website != SENTINEL) 

を交換するには、String型であり、プリミティブ型ではありません。したがって、を比較するにはequalsメソッドを使用する必要があります。参照の比較には==が使用されます。

は詳細What is the difference between == vs equals() in Java?

関連する問題