2016-03-25 20 views
0

Bunu yapmak için, kodun geçerli zamanı (milisaniye cinsinden) tek bir haneye bölen sayıya ulaşıncaya kadar kodun x (her defasında x kare) basması için çalışıyorum. Herhangi bir hata yok, ama aynı zamanda çıktı yok. X'i nasıl basabilirim?Döngü için x yazdırmaya başlamıyor

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

tek basamaklı içine (milisaniye) Geçerli saati böler numarayı ulaşana kadar * ne yapar * **anlamına gelmek**? System.currentTimeMillis() ', 1 Ocak 1970'ten beri gece yarısı UTC'de bir milisaniye döndürüyor. –

cevap

6

Sizin hata yerine System.currentTimeMillis()/x > 9 arasında System.currentTimeMillis()/x <= 9 yazılı olduğunu.

Döngünüz System.currentTimeMillis()/x <= 9 numaralı telefonu tatmin edemediğinden bir kez bile çalışmıyor.

Yan not:System.currentTimeMillis()/x'un her zaman bir tamsayı olmadığını unutmayın. "Tek haneli" ile "10'dan küçük" anlamına gelirseniz (ör: 9.563), bunun yerine System.currentTimeMillis()/x >= 10 yazmalısınız. Ancak, iki long arasındaki bölümün ondalık sayı üreteceğinden şüpheliyim. anlattıklarına bakılırsa

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); 
    } 
    } 
} 

Ben "tek parmakta içine (milisaniye) Geçerli saati böler numarası" hakkında emin değildi, ama devam etmek gerekir.

0

Basit ayıklayıcı koşmak Bir değer karşılaştırmak çalışıyoruz ettiğini ortaya çıkaracaktır: 9'a karşı 729466267577 ve olmasını beklemiyordum az 9.

nasıl bu olayı çözmek için söylemek gerek yoktur düşünüyorum . Ama size ne söyleyeceği, bir çeşit hata ayıklayıcısını kullanmaya başlıyor

0

Döngü çalışmıyor! System.currentTimeMillis()/x> = 9 ile çalışın, işe yaramalı. Ben Eclipse üstünde denedim ve yazdırır:

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 
0

Kişisel döngü ilk yineleme önce sona eriyor.

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

Döngüsün yinelemesi için döngünüzdeki koşullu deyimin aslen karşılanması gerekir.

Geçerli zaman/x, ilk yinelemede 9'dan küçük olmadığından döngü hemen çıkar.

Ben Bu çalışması gerekir Eğer

System.currentTimeMillis()/x <= 9 

için

System.currentTimeMillis()/x > 9 

değiştirirseniz inanıyoruz