这是我给出的问题: 编写一个程序,将网站名称作为键盘输入,直到用户输入单词' stop'。该程序还计算了有多少网站名称是商业网站名称(即以.com结尾),以及计数的输出。
持续发生的问题即使我输入单词stop作为输入,它仍然会说"进入下一个站点。"我不确定我哪里出错了。
有人可以帮忙吗?这是我的代码。
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 :(得分:0)
替换
while (website != SENTINEL)
带
while(!website.equals(SENTINEL))
website
属于String
类型,不是原始类型。因此,您需要使用equals
方法来比较String
。 ==
用于参考比较。
有关详细信息What is the difference between == vs equals() in Java?
,请参阅此处
答案 1 :(得分:0)
您正在使用引用相等==
来比较字符串。你的字符串来自不同的来源。 SENTINEL
来自常量池,而website
来自用户输入。它们总是不同的参考。
要按值比较字符串,应使用equals
方法。在你的情况下,你应该替换
while (website != SENTINEL)
通过
while (!SENTINEL.equals(website))
请注意,我们将常量与用户输入进行比较。这可以在website
为null
时解决问题。在您的代码中并非如此,但它是良好风格的标志。
有关详细信息,请参阅What is the difference between == vs equals() in Java?。