Java Nested If Help(逻辑看起来是正确的,但总是输出相同的东西)



我正在尝试使用嵌套的if语句来确定变量的值,而使用此代码时,不会出现正确的结果。有人能帮忙吗?我使用一个数组来保存与输入进行比较的值(使用这个数组是为了显示java的"知识")。然后,我调用函数testFlower()来初始化逻辑。我无法确定我的逻辑哪里出了问题。每次输入任何内容时,打印线打印出的结果总是"玫瑰"。当键入不同的花名时,此返回的String应该会更改,但不会发生这种情况。有人对代码中的问题有什么想法吗?

import java.util.Scanner;
public class A {
    public final double TAX = 1.127;
    public final double s_basket = 10, m_basket = 20, l_basket = 30, s_elephant = 15, l_elephant = 30, 
             s_seal = 15, l_seal = 30, s_bear = 15, l_bear = 30, s_penguin = 15, l_penguin = 30, 
             mChocolate = 15, wChocolate = 20, dChocolate = 30;
    public String flowers[] = {"ROSE", "TULIP", "DAISY", "DAFFODIL", "SUNFLOWER", "ORCHID"};
    public Scanner s = new Scanner(System.in);
    public String flowerType;

    public void testFlower() {
        if (!(flowerType.equals(flowers[1]))) {
            if (!(flowerType.equals(flowers[2]))) {
                if (!(flowerType.equals(flowers[3]))) {
                    if (!(flowerType.equals(flowers[4]))) {
                        if (!(flowerType.equals(flowers[5]))) {
                            flowerType = "Roses";
                            System.out.println(flowerType);
                        } else {
                            flowerType = "Orchids";
                            System.out.println(flowerType);
                        }
                    } else {
                        flowerType = "Sunflowers";
                        System.out.println(flowerType);
                    }
                } else {
                    flowerType = "Daffodils";
                    System.out.println(flowerType);
                }
            } else {
                flowerType = "Daises";
                System.out.println(flowerType);
            }
        } else {
            flowerType = "Tulips";
            System.out.println(flowerType);
        }
    }
    public static void main(String[] args) {
        A a = new A();
        System.out.println("Hello! Welcome to my flower shop! What type of flowers do you want? (rose, tulip, daisy, daffodil, sunflower, orchid)");
        a.flowerType = a.s.nextLine();
        a.flowerType.toUpperCase();
        a.testFlower();
    }
}

正如chrylis在前面的回答中所说,您的上体写不正确。但我也要指出,您不必使用嵌套的if/else语句,因为Java有一个HashMap类,它可以与对象一起用作键。请参阅以下代码:

public HashMap<String, String> flowers = new HashMap<String, String>();
flowers.put("ROSE", "Roses");
...
flowers.put("ORCHID", "Orchids");
//this code basically replaces your testFlower function.
System.out.println(flowers.get(flowerType));

我希望我没有误解你计划的目的。如果我这样做了,请不要理会我的回答。

首先,学习使用调试器并检查值,如flowerType。这样做会立即向您表明,大写并没有达到您的预期:您必须将结果分配给一个变量,因为字符串是不可变的。

a.flowerType = a.s.nextLine();
a.flowerType = a.flowerType.toUpperCase();

如果将数组中的值更改为

"ROSES", "TULIPS", "DAISIES", "DAFFODILSS", "SUNFLOWERS", "ORCHIDS"

使用for循环而不是嵌套的if语句(节省大量键入):

for(int i =0; i < flowers.length;i++){
    if(flowers[i].equals(flowerType){
        system.out.println(flowerType);
        break;
    } else if (i == flowers.length - 1) {
        system.out.println("Unknown flowertype " + flowerType);
    }
}

使用花方法的参数:

a.flowerType = a.s.nextLine();
a.flowerType = a.flowerType.toUpperCase();
a.testFlower(flowerType);

public void testFlower(String f){
    flowerType = f;
    // do something
}

像这样你的程序可以工作。

最新更新