【问题标题】:This for loop defines a condition but later ignores it这个 for 循环定义了一个条件,但后来忽略了它
【发布时间】:2013-09-08 00:01:19
【问题描述】:

/如果 for 循环进入 i/

class Phone {
    public static void main(String args[]){
      String numbers[][] = {
        {"Tom", "535-5334"},
        {"Bill", "432-5432"}
      };

      int i;

      if(args.length != 1)
        System.out.println("Usage: java Phone <name>");
      else {
        for(i=0; i<numbers.length; i++) {
          if(numbers[i][0].equals(args[0])){
           System.out.println(numbers [i] [0] + ":" + numbers [i][1]);
           break;
          }
        }
      if(i == numbers.length)
        System.out.println("name not found");
      }
    }
}

这个例子在我的java入门书里,我不明白。如果 for 循环使用 i 对我来说很有意义

【问题讨论】:

  • 问题到底是什么?你不明白什么?
  • 您发布的内容无法编译。您有一个 String 数组,但有 int 元素。而且您无法将args[0]1 进行比较,它们属于不同的类型,Stringint
  • 它打断了我的问题,即 if(i==numbers.length) 何时发生?它只迭代到 i
  • 这可能会帮助您了解有效的数组索引范围从 0 到 length-1。因此,如果循环i==number.length 时执行,您将拥有ArrayIndexOutOfBoundsError

标签: java string for-loop


【解决方案1】:

来自docs

for (initialization; termination; increment) {
 statement(s)
}

...在循环的每次迭代之后调用增量表达式...

因此,如果在 numbers 数组中找不到名称,则 for 循环计数器 i 会上升到 numbers.length,终止 numbers.length &lt; numbers.length 失败并退出 for 循环。

因此,i = numbers.length 在循环的出口处打印了消息。

另一方面,如果在数组中找到名称,则在 i 之前的 for 循环 breaks 到达 numbers.length 并且不会打印消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2020-11-29
    • 1970-01-01
    • 2017-06-18
    • 2019-10-22
    相关资源
    最近更新 更多