java - Java - 我的 while 循环有效,但我的 for 循环没有 - 转换时遇到问题
问题描述
我假设如果我不能将我的 while 循环转换为 for 循环,那么我就不完全理解这里的概念。这是我的工作while循环:
(我正在尝试实现一个程序,它计算总和 1+2+3+...+n,其中 n 作为用户输入给出。)
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a number: ");
int number = Integer.valueOf(scanner.nextLine());
int sum = 0;
int i = 0;
while (i < number) {
i++;
sum += i;
}
System.out.println(sum);
我在这里查看此用户的答案:https ://stackoverflow.com/a/36023451/11522261 并尝试实现它,但它不起作用。
.....
for (i = 0; i < number; i++){
sum += i;
}
System.out.println(sum);
看起来 和 的条件For Init
expression
statement
设置ForUpdate
正确,但我无法理解这里的差异。
此外,看起来这个练习正在尝试教授循环来解决迭代问题。但我怀疑这并没有帮助我练习递归。也许这个问题有一个更好的递归解决方案。只是在这里大声思考。谢谢!
解决方案
不同之处在于,在您的while
循环中,您在将其添加到i
之前sum
递增,但在您的for
循环中,它在之后。
如果while
产生正确的结果,您可以for
通过从 1 开始而不是 0 并继续 while<= number
而不是来调整您的结果< number
。
为了完整起见,以下是当前for
循环的工作方式:
i = 0
- 如果
i < number
不为真,则退出循环;否则,继续执行步骤 3 sum += i
(i
还在0
)i++
- 转到第 2 步
在第二遍中,i < number
is 1 < number
so still true
ifnumber
大于 1,所以您转到第 3 步,执行sum += i
while i
is 1
,然后继续。
最终i < number
不再是真的,循环退出。
对于这样的问题,最好的方法通常是使用 IDE 中内置的调试器逐语句逐句执行代码,同时查看变量的值。这可以揭示事情是如何运作良好的。这篇文章可能会有所帮助:如何调试小程序
推荐阅读
- javascript - 如何在 JavaScript 中将数组转换为 XML
- c# - 如何在 C# 中初始化嵌套类
- rpa - Blue Prism - 获取没有字段名称的集合元素
- reporting-services - IIF 参数在同一行上有两个条件
- android - 在使用 Retrofit2 上传到服务器之前调整图像文件的大小
- reactjs - 使用 React 根据下拉值显示/隐藏文本字段
- c# - { }; 是什么以及如何做 在 c# 中工作?
- .net - 如何使用 HttpClient 调用具有特定主机的 IP
- .net-core - 在 Swagger 中为 .NET Core 3.1 使用自定义索引
- html - 我想删除移动视图的框