Java:是,继续否退出

时间:2014-01-30 10:52:50

标签: java boolean exit

我一直致力于解决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");
    }
}

2 个答案:

答案 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()方法进行比较!