在java中更改字符串变量的输入

时间:2011-09-16 18:39:06

标签: java string input

我正在尝试使用字符串输入(是或否)作为循环的标记。循环重复一个switch语句,最后提示用户是或否。在他们输入“是”作为答案之前,循环继续从用户接收数据。问题来自于试图获得哨兵的新价值。

***审核了评论并做了一些更改。这是更新后的代码:

    Scanner input = new Scanner ( System.in );

    System.out.print( "Please enter a product number, 1 - 5: ");
    int product = input.nextInt();
    double sum = 0;
    boolean complete = false;

    while (!complete) {

    switch (product){
        case 1: sum = sum + 2.98;
        break;
        case 2: sum = sum + 4.50;
        break;
        case 3: sum = sum + 9.98;
        break;
        case 4: sum = sum + 4.49;
        break;
        case 5: sum = sum + 6.87;
        break;
    }
    System.out.print( "Is your order complete? Please type true or false:");
    complete = in.nextLine();
    }

所有这一切都在起作用,但我仍然无法打破哨兵的提示。我试图将它设置为用户键入true以结束循环的位置,或者设置为false以继续循环。我开始认为我忽略了一些东西。非常感谢您的帮助,谢谢。

4 个答案:

答案 0 :(得分:2)

更改

    default: String complete = input.Stream(); //Not coded, but will also ask for input.

    default: complete = input.Stream(); //Not coded, but will also ask for input.

你正在重新声明一个字符串,这不是你想要的。并遵循使用.equals给出的建议,而不是==用于字符串或其他参考类型。

答案 1 :(得分:0)

因为你宣布它两次而感到紧张。取消第二个String声明:

  default: complete = input.Stream(); //Not coded, but will also ask for input.

答案 2 :(得分:0)

你宣布完成两次。尝试将您的默认案例陈述修改为:

默认值:完成= input.Stream()

答案 3 :(得分:0)

两件事:

1)您正在重新声明完成。默认情况应该是:

default: complete = input.Stream();

2)在Java中你无法将字符串与!=进行比较。每个String都是一个对象,通过使用比较运算符,您将比较对象的标识符,而不是对象的内容。除非它们是指向同一内存位置的两个字符串,否则Java永远不会看到两个String对象相等。要比较两个字符串的值,必须使用.equals()方法,例如:

while (!complete.equals("yes")) {

甚至更好的习惯:

while (!"yes".equals(complete)) {

这是更好的,因为如果完整的String变量为null,那么第一个比较将抛出空指针异常,而第二个不会,因为文字字符串“yes”将始终计算为非null对象。

希望有所帮助。

大卫