【问题标题】:Won't print x in for loop不会在 for 循环中打印 x
【发布时间】:2016-03-25 18:56:51
【问题描述】:

我正在尝试使代码打印出 x(每次平方 x),直到它达到将当前时间(以毫秒为单位)除以单个数字的数字。它没有任何错误,但也没有输出。如何让它打印出 x?

public class Experiment {

    public static void main(String[] args){

         long start = System.currentTimeMillis();

         for(long x = 2; System.currentTimeMillis() / x <= 9; x=x*2){
             System.out.println(x);
         }
    }
}

【问题讨论】:

  • 直到达到将当前时间(以毫秒为单位)除以一位数的数字是什么意思 意思? System.currentTimeMillis() 返回自 1970 年 1 月 1 日午夜 UTC 以来的毫秒数。

标签: java for-loop output


【解决方案1】:

你的错误是写System.currentTimeMillis() / x &lt;= 9而不是System.currentTimeMillis() / x &gt; 9。

你的循环甚至没有运行一次,因为它不能满足System.currentTimeMillis() / x &lt;= 9。

旁注:请记住,System.currentTimeMillis() / x 并不总是整数。如果“个位数”是指“小于 10”(例如 9.563),则应改为写 System.currentTimeMillis() / x &gt;= 10。但是,我怀疑两个 long 之间的除法会产生一个十进制数。

【讨论】:

    【解决方案2】:

    根据你的描述

    public class Experiment {
      public static void main(String[] args){
         final long start = System.currentTimeMillis() / 10;
         for(long x = 2; x <= start; x*=2){
             System.out.println(x);
         }
      }
    }
    

    我不确定“将当前时间(以毫秒为单位)除以一位数的数字”,但您应该可以继续。

    【讨论】:

      【解决方案3】:

      循环没有运行! 尝试使用 System.currentTimeMillis() / x >= 9,它应该可以工作。 我已经在 Eclipse 上尝试过了,它会打印出来:

      2
      4
      8
      16
      32
      64
      128
      256
      512
      1024
      2048
      4096
      8192
      16384
      32768
      65536
      131072
      262144
      524288
      1048576
      2097152
      4194304
      8388608
      16777216
      33554432
      67108864
      134217728
      268435456
      536870912
      1073741824
      2147483648
      4294967296
      8589934592
      17179869184
      34359738368
      68719476736
      137438953472
      

      【讨论】:

        【解决方案4】:

        一个简单的调试器运行会显示您正在尝试比较一个值: 729466267577 对 9 并期望它小于 9。

        我认为没有必要告诉你如何解决这个问题。但是 SO 会告诉你的是开始使用某种调试器

        【讨论】:

          【解决方案5】:

          您的循环在第一次迭代之前结束。

          for(long x = 2; System.currentTimeMillis() / x <= 9; x=x*2)
          

          必须最初满足循环中的条件语句才能使循环迭代。

          由于当前时间 / x 在第一次迭代中不小于 9,因此循环立即退出。

          我相信如果你改变

          System.currentTimeMillis() / x <= 9
          

          到

          System.currentTimeMillis() / x > 9
          

          这应该可以工作

          【讨论】:

            猜你喜欢
            • 2014-01-10
            • 1970-01-01
            • 2022-12-29
            • 2017-08-16
            • 1970-01-01
            • 2015-12-29
            • 2021-09-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多