Java Nested If Help(逻辑看似正确但输出的总是一样的东西)
Java Nested If Help (The Logic is seemingly correct but always outputs the same thing)
我正在尝试使用嵌套的 if 语句来确定变量的值,但使用此代码,没有出现正确的结果。请问有人可以帮忙吗?我正在使用一个数组来保存与输入进行比较的值(使用它来显示 "knowledge" of java)。然后,我调用函数 testFlower() 来初始化逻辑。我无法确定我的逻辑哪里出错了。每次输入任何内容,打印行打印出的结果总是"Roses"。当输入不同的花名时,返回的字符串应该会改变,但这并没有发生。有人对代码中的问题有任何想法吗?
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();
}
}
首先,学习使用调试器并检查 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);
}
}
为 flower 方法使用一个参数:
a.flowerType = a.s.nextLine();
a.flowerType = a.flowerType.toUpperCase();
a.testFlower(flowerType);
public void testFlower(String f){
flowerType = f;
// do something
}
这样你的程序就可以运行了。
正如chrylis在之前的回答中所说,你的大写不正确。但我还要指出,您不必使用嵌套的 if/else 语句,因为 Java 有一个 HashMap class,它可以与对象一起用作键。见以下代码:
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));
希望我没有误解您程序的目的。如果我这样做了,请无视我的回答。
我正在尝试使用嵌套的 if 语句来确定变量的值,但使用此代码,没有出现正确的结果。请问有人可以帮忙吗?我正在使用一个数组来保存与输入进行比较的值(使用它来显示 "knowledge" of java)。然后,我调用函数 testFlower() 来初始化逻辑。我无法确定我的逻辑哪里出错了。每次输入任何内容,打印行打印出的结果总是"Roses"。当输入不同的花名时,返回的字符串应该会改变,但这并没有发生。有人对代码中的问题有任何想法吗?
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();
}
}
首先,学习使用调试器并检查 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);
}
}
为 flower 方法使用一个参数:
a.flowerType = a.s.nextLine();
a.flowerType = a.flowerType.toUpperCase();
a.testFlower(flowerType);
public void testFlower(String f){
flowerType = f;
// do something
}
这样你的程序就可以运行了。
正如chrylis在之前的回答中所说,你的大写不正确。但我还要指出,您不必使用嵌套的 if/else 语句,因为 Java 有一个 HashMap class,它可以与对象一起用作键。见以下代码:
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));
希望我没有误解您程序的目的。如果我这样做了,请无视我的回答。