不会在 for 循环中打印 x
Won't print x in for loop
我正在努力使代码打印出 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() / x <= 9
而不是 System.currentTimeMillis() / x > 9
。
你的循环连一次都不运行,因为它不能满足System.currentTimeMillis() / x <= 9
.
旁注: 请记住,System.currentTimeMillis() / x
并不总是整数。如果 "single digit" 是指 "less than 10"(例如 9.563),则应改为 System.currentTimeMillis() / x >= 10
。但是,我怀疑两个 long
之间的除法会产生十进制数。
根据您的描述
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);
}
}
}
我不确定 "number that divides the current time (in milliseconds) into a single digit",但你应该可以继续。
一个简单的调试器 运行 会显示您正在尝试比较一个值:
729466267577 对 9 并期望它小于 9.
这个问题我觉得没必要告诉你怎么解决了。但是 SO 会告诉你的是开始使用某种 debugger
循环不是运行!
尝试使用 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
您的循环在第一次迭代之前结束。
for(long x = 2; System.currentTimeMillis() / x <= 9; x=x*2)
您的循环中的条件语句必须最初得到满足,以便循环迭代。
由于当前时间 / x 在第一次迭代时不小于 9 循环立即退出。
我相信如果你改变
System.currentTimeMillis() / x <= 9
到
System.currentTimeMillis() / x > 9
这应该有效
我正在努力使代码打印出 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() / x <= 9
而不是 System.currentTimeMillis() / x > 9
。
你的循环连一次都不运行,因为它不能满足System.currentTimeMillis() / x <= 9
.
旁注: 请记住,System.currentTimeMillis() / x
并不总是整数。如果 "single digit" 是指 "less than 10"(例如 9.563),则应改为 System.currentTimeMillis() / x >= 10
。但是,我怀疑两个 long
之间的除法会产生十进制数。
根据您的描述
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);
}
}
}
我不确定 "number that divides the current time (in milliseconds) into a single digit",但你应该可以继续。
一个简单的调试器 运行 会显示您正在尝试比较一个值: 729466267577 对 9 并期望它小于 9.
这个问题我觉得没必要告诉你怎么解决了。但是 SO 会告诉你的是开始使用某种 debugger
循环不是运行! 尝试使用 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
您的循环在第一次迭代之前结束。
for(long x = 2; System.currentTimeMillis() / x <= 9; x=x*2)
您的循环中的条件语句必须最初得到满足,以便循环迭代。
由于当前时间 / x 在第一次迭代时不小于 9 循环立即退出。
我相信如果你改变
System.currentTimeMillis() / x <= 9
到
System.currentTimeMillis() / x > 9
这应该有效