【问题标题】:Java Nested If Help (The Logic is seemingly correct but always outputs the same thing)Java Nested If Help(逻辑看似正确但总是输出相同的东西)
【发布时间】:2015-03-31 23:50:36
【问题描述】:

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

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();

    }
}

【问题讨论】:

  • 当数组中的值与输入不匹配时正在测试它们。如果它不匹配数组中的任何值,则自动打印最后一个嵌套的 if 语句。在这种情况下,您总是会得到玫瑰。因为“ROSES”与“ROSE”不同。

标签: java if-statement nested logic


【解决方案1】:

正如 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));

希望我没有误解您的程序的目的。如果我这样做了,请忽略我的回答。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我使用了调试器,但无法查看变量。我正在使用日食。你能解释一下吗?
    • “变量”选项卡将列出当前范围内的变量,以及它们的字符串表示形式(在这种情况下只是内容)。
    • 您可能需要打开调试透视图以获取用于调试的默认选项卡集,包括前面注释中提到的变量选项卡。
    • 如果设置断点(双击public void testFlower()行旁边的左边距)并在调试而不是运行模式下运行,它应该会自动打开。
    【解决方案3】:

    如果将数组中的值改为

    "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
    }
    

    这样你的程序就可以运行了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-19
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 2017-02-10
      相关资源
      最近更新 更多