java - 如何根据用户输入创建一个持续运行的循环
问题描述
对于一个班级,我必须制作一个简单的程序,允许用户输入包裹的重量,然后告诉用户与该重量相关的运费。这不是家庭作业所必需的,但我正在尝试添加一个 do-while 循环,如果用户想输入另一个权重,则要求用户在循环末尾输入字母 y,然后 while 部分测试是否 keepGoing 变量等于 y 重新开始循环。我不知道为什么,但无论用户输入什么,循环都不会重新启动。即使用户输入y程序刚刚结束,任何人都可以帮忙。导入 java.util.Scanner;
public class HwkChp4 {
static Scanner keyboard = new Scanner(System.in);
public static void main(String[] args) {
double packageWeight;
double underTwo = 1.10;
double twoToSix = 2.20;
double sixToTen = 3.70;
double overTen = 3.80;
String msg1 = "How much does the package weigh?";
String msg2 = "The shipping cost is ";
String keepGoing = "y";
packageWeight = getDouble(msg1);
do {
if(packageWeight <= 2) {
System.out.println(msg2 + "$" + underTwo);
}
if(packageWeight > 2 && packageWeight <= 6) {
System.out.println(msg2 + "$" + twoToSix);
}
if(packageWeight > 6 && packageWeight <= 10) {
System.out.println(msg2 + "$" + sixToTen);
}
if(packageWeight > 10) {
System.out.println(msg2 + "$" + overTen);
}
System.out.println("Please enter y if you would like to enter another weight");
System.out.println("otherwise please enter n");
keepGoing = keyboard.next();
} while (keepGoing == "y");
}
public static double getDouble(String msg1) {
double decimal;
System.out.println(msg1);
decimal = keyboard.nextFloat();
return decimal;
}
}
解决方案
==
在 Java 中,只能在原始数据类型(int
、char
、boolean
等,基本上是小写开头的数据类型)上使用运算符来测试相等性。字符串和其他数据类型的存储方式大不相同,==
运算符调用变量内存地址,而不是它们保存的数据。因此,您不能使用相等运算符,因为无论您多么努力,它keepGoing
总是存储在与"y"
您尝试将其设置为的任何其他变量不同的内存地址中。(当然,除非您故意将它们都设置为相同的引用,但这总是会导致 true)。所以你需要做的是使用 String 的内置equals()
函数,如下所示:
TLDR:更改keepGoing == y
为keepGoing.equals(y)
推荐阅读
- google-bigquery - 是否可以在 BigQuery 网络控制台中设置默认区域?
- mongodb - 使用 Azure Cosmos DB 的 Hangfire
- dart - 需要在 Flutter web view 中使用 src 通过 HTML 添加图片资源
- python - 我不能使用 Pip 在 Windows 中安装软件包
- django - 如何将三个或多个参数传递给自定义模板标签过滤器 django?
- javascript - 过滤后下拉 DOM 不更新
- javascript - Node/Express - res.status().send() 只发送状态但不发送对象
- php - 显示更新成功提示,但无法点击提示,数据库未更新
- javascript - Jquery load local picture into dialog open
- php - PHP中基于数组键的数组推送和排序ASC顺序