2017-11-07 12 views
2

だから私は、私が欲しいのは、1と一度10の間で1つの乱数(n)を印刷することで、この方法私の方法で複数の行が印刷されることがあるのはなぜですか?

public int sumMathRandomAndSystemTime(){ 

    n = 1 + ((int) (Math.random() * 10)+ 
      (int) (System.currentTimeMillis() % 10)); 

    if(n > 10){ 
     sumMathRandomAndSystemTime(); 
    } 
    System.out.println(n); 
    return n; 

} 

を持っています。しかし何らかの理由で、メソッドを呼び出すと乱数が出力されますが、何回かだけ、何度か、10回、5回などのように数値が出力されます。なぜこれが起こっていますか?各再帰呼び出しのための1:ここでは

は、元の乱数が10、その後大きければ、あなたのコードを複数行に出力します私の出力

10 
10 
10 
10 
10 
+3

再帰的です。 – tkausl

+0

このメソッドのポイントは何ですか? – shmosel

+0

でも、複数行の印刷を取り除くにはどうしたらいいですか?助言がありますか? –

答えて

3

の例です。

あなたがこの問題を解決するために、次のようにコードを変更することができます。

public int sumMathRandomAndSystemTime(){ 

    int n = getRandomNumber(); 
    System.out.println(n); 
    return n; 

} 

public int getRandomNumber() { 
    int n = 1 + ((int) (Math.random() * 10)+ 
      (int) (System.currentTimeMillis() % 10)); 

    if(n > 10){ 
     n = getRandomNumber(); 
    } 
    return n; 
} 

そして、一般的にははるかに簡単なコードは次のようになります。

public int sumMathRandomAndSystemTime(){ 
    Random random = new Random(); 
    int n = random.nextInt(10); 
    System.out.println(n); 
    return n; 
} 
1

あなただけの間に1個の乱数を印刷する場合を1と10は、このようなものを試してください...

 int n; 
     do 
     { 
      n = 1 + ((int) (Math.random() * 10) + (int) (System.currentTimeMillis() % 10)); 
     } while(n > 10); 

     return n; 
1

sumMathRandomAndSyste mTime();コール。

public static int sumMathRandomAndSystemTime(){ 
    n = 1 + ((int) (Math.random() * 10)+ 
      (int) (System.currentTimeMillis() % 10)); 
    if(n > 10){ 
     sumMathRandomAndSystemTime(); 
     return n; 
    } 
    System.out.println(n); 
    return n; 
} 

この画像はワークフローをクリアすることができます。

enter image description here

関連する問題