【发布时间】:2019-11-27 16:15:31
【问题描述】:
我正在尝试通过阅读 Cay Horstmann 的 Big Java、Late Objects 来学习(自学)Java。我正在使用 repl.it 来编写我的代码(如果你想查看它,它是公开的)
第 4 章循环的自检题是: 当用户在第 4.7.5 节(标题为最大值和最小值)的算法中没有提供任何输入并且 WHILE 循环因此而终止程序时,您如何克服这个问题?
他们基本上要求重写代码以解决这个问题。
4.7.5节的信息你需要解决这个问题:要计算一个序列中的最大值,保留一个变量来存储你遇到的最大元素,当你找到一个更大的元素时更新它。 (此算法要求至少有一个输入。)
double largest = in.nextDouble();
while (in.hasNextDouble())
{
double input = in.nextDouble();
if (input > largest)
{
largest = input;
}
}
这就是这本书建议作为这个问题的答案(但我不同意): 一种解决方案是在循环中进行所有输入,并引入一个布尔变量来检查是否是第一次进入循环。
double input = 0;
boolean first = true;
while (in.hasNextDouble())
{
double previous = input;
input = in.nextDouble();
if (first) { first = false; }
else if (input == previous) { System.out.println("Duplicate input"); }
}
我没有完全理解第一句话。我不同意将其作为问题的解决方案,因为(据我所知)它测试之前是否输入过输入,而不是测试是否提供了任何类型的用户输入..
我尝试将这两段代码合并在一起,但似乎无法正常工作。或者更具体:弄清楚如何构建它。我需要什么变量/循环?我按什么顺序写这个? 我在 Visio 中制作了第一段代码的流程图,但不知道如何继续。
这是我目前写的:
import java.util.Scanner;
class Main {
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter the number: ");
double largest = 0;
while (input.hasNextDouble())
{
double value = input.nextDouble();
if (value > largest)
{
largest = value;
System.out.println("The largest input till now is: " + largest);
}
}
有人可以吗:
- 问我哪些问题可以帮助我解决这个问题? IE。告诉我我需要什么工具(WHILE、FOR 等)
- 提供一个文本解决方案,我希望可以在代码中进行转换
- 或者给我写代码(我还没有学过数组,所以请不要解决)
提前致谢,
【问题讨论】:
-
你是说如果用户没有在“输入号码:”行上提供输入?
-
是的,据我所知,这就是他们想要的。无需任何用户输入即可工作的循环(计算/存储最大输入)。如果您愿意,我可以将书中问题的屏幕截图(+ 提供的答案)发送给您(如果 StackOverflow 接受这个??)
-
您的代码存在以下问题 - 您将无法区分 0 是合法最大值和仅表示缺少输入的情况。
-
我已将其更改为:import java.util.Scanner;类 Main { 双最大 = input.nextDouble(); while (input.hasNextDouble()) { double value = input.nextDouble();如果(价值 > 最大){ 最大 = 价值; System.out.println("目前最大的输入是:" + 最大);这是否解决了您指出 PM 77-1 的问题?
标签: java for-loop while-loop