我一直致力于解决Java中的问题。我有一家商店,我需要询问顾客是否购买了任何东西。如果他/她键入“是”,我希望程序继续下一个问题,如果他/她键入“否”,我想要显示一条消息,例如“祝你有个美好的一天!”然后我希望程序停止。我该如何管理?
谢谢!
这是我到目前为止所做的事情〜第17行到第20行〜(但效果不好):
import java.util.Scanner;
public class Discount {
public static void main(String[] args) {
String cname;
float I_price, drate, discount, dprice;
Scanner in = new Scanner(System.in);
System.out.println("Enter Costumers Name:");
cname = in.next();
System.out.println("Have you bought anything?");
if (cname == "no") {
System.out.println("Have a good day!");
System.exit(0);
}
System.out.println("Enter Price of Item:");
I_price = in.nextFloat();
System.out.println("Enter Discount Rate:");
drate = in.nextFloat();
discount = (I_price * drate / 100);
dprice = (I_price - discount);
System.out.println(
"Costumer Name:" + cname + "\n" + "Discount Rate:" + discount + "\n" + "Discounted Price:" + dprice + "\n");
}
}
答案 0 :(得分:3)
将if(cname=="no"){
替换为if(cname.equals("no")){
在比较2个字符串时,使用String#equals()代替==
答案 1 :(得分:3)
将String与equals()方法进行比较而不是==
。你应该把它改成
if(cname.equals("no")){
==
将对右操作数和左操作数的值进行条件相等测试。这应该仅用于比较原始类型,如int,float等。不应该使用它,因为对象引用值将指向内存地址,它们将不相同。还有一个名为String Constant Pool
的概念。使用assignment operator
而非new
创建字符串时
String name ="StackOverFlow";
然后,它将使用if(name == "StackOverFlow")
传递相等性测试因为常量池中的相等String值的内存地址相同。在这种情况下,==
的使用有效。即编译时间常数
通常,使用equals()
来测试对象的相等性。 equals()
类的String
方法比较String
字面值中的实际值(即字符),而不是它们的内存地址。所以,在Java中,字符串应仅使用equals()
方法进行比较!