我正在努力使代码打印出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);
}
}
}
答案 0 :(得分:6)
您的错误是写System.currentTimeMillis() / x <= 9
而不是System.currentTimeMillis() / x > 9
。
你的循环甚至没有运行一次,因为它不能满足System.currentTimeMillis() / x <= 9
。
旁注:请注意,System.currentTimeMillis() / x
并不总是整数。如果“单个数字”表示“小于10”(例如9.563),则应编写System.currentTimeMillis() / x >= 10
。但是,我怀疑两个long
之间的划分会产生十进制数。
答案 1 :(得分:0)
根据您的说明
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);
}
}
}
我不确定“将当前时间(以毫秒为单位)划分为单个数字的数字”,但您应该可以继续。
答案 2 :(得分:0)
一个简单的调试器运行会显示您正在尝试比较一个值: 729466267577对9并且期望它低于9。
我认为没有必要告诉你如何解决这个问题。但是SO会告诉你的是开始使用某种调试器
答案 3 :(得分:0)
循环没有运行! 尝试使用System.currentTimeMillis()/ x&gt; = 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 :(得分:0)
你的循环在第一次迭代之前结束。
for(long x = 2; System.currentTimeMillis() / x <= 9; x=x*2)
最初必须满足循环中的条件语句才能使循环迭代。
由于当前时间/ x在第一次迭代时不小于9,因此循环立即退出。
我相信如果你改变了
System.currentTimeMillis() / x <= 9
要
System.currentTimeMillis() / x > 9
这应该有效