【问题标题】:using scanner input for all for loop parameters对所有 for 循环参数使用扫描仪输入
【发布时间】:2015-09-06 18:03:22
【问题描述】:

查看这段代码?

import java.util.Scanner;

public class CountingMachineRevisited {
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    int from, to, by;
    System.out.print("Count from: ");
    from = scan.nextInt();
    System.out.println("Count to: ");
    to = scan.nextInt();
    System.out.println("Count by: ");
    by = scan.nextInt();

    for (int i = from; i <= to; i+=by) {
        System.out.println(i);
    }

}
}

这段代码按我想要的方式工作,但是如果我将 for 循环的终止条件更改为 i == to,它就不起作用了。

for (int i = from; i == to; i+=by) {
        System.out.println(i);
}

我会理解这是所有 int 默认为 0 使终止与初始相同,因此 for 循环将停止,但如果我在循环开始之前初始化新值,为什么它不起作用?

【问题讨论】:

  • i 获得from 的值时,它不等于to,因此永远不会执行循环。用from 等于to 试试你的程序,你会看到它只会进入for循环一次。
  • 那么你初始化你的变量是什么?根据您的变量,i+by 可能会跳过 to 的值
  • 如果我初始化它们:from = 1, to = 10, by = 2。如果终止条件是“i == to”,则循环根本不会运行。我意识到如果输入没有正确输入,循环会变得混乱。我很好奇为什么它永远不会执行。
  • @Grez.Kev 查看我的评论以了解原因。还可以在此处查看有关 for 循环的 Oracle 教程:docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html
  • 我现在明白了。我从一个错误的陈述开始,所以它永远不会执行。谢谢图纳基

标签: java for-loop java.util.scanner


【解决方案1】:

for 循环中的条件不是终止条件。这是一个延续条件。

for 循环喜欢:

for ( INITIALIZATION; CONDITION; UPDATE )
    STATEMENT

相当于

INITIALIZATION
while ( CONDITION ) {
    STATEMENT
    UPDATE
}

所以只要条件为真,循环就会继续,而不是在条件为真时终止。

所以当你输入一个大于你的fromto,但放入条件i == to,因为i被初始化为from,而from不同于to,该条件不成立,因此循环无法运行 - 它仅在其为真时运行。

i &lt;= to 有效,因为i 的起始值低于to,所以这个条件一直成立,直到i 的值超过to

【讨论】:

  • 感谢您的详尽解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2015-12-23
相关资源
最近更新 更多