2017-03-09 9 views
1

乱数を生成するプログラムが必要です。そして、16進数の行が出力されるまで、xの数を自分の行に入れて停止します。今のところ私のプログラムは数字を生成しますが、決して出力を停止しません。私はこれが私のエラーだと確信していますが、何を変更する必要があるのか​​分かりません。ここに私のコードがあります。ランダムに生成されたXの数

import java.util.Random; 

public static void main(String[] args) 
{ 
    toBinary(); 
    randomX(); 
} 

public static void randomX() 
{ 
    Random num = new Random(); 
    int ran = num.nextInt(16+1); 
    int xs = ran; 

    while(xs <= 16) 
    { 
     System.out.print("x"); 
    } 
} 
+0

あなたの問題に[私の解決策](http://stackoverflow.com/questions/40185629/how-to-generate-random-passwords-with-options-in-java/40185656#40185656)をお読みください。 Btwはどんな長さの文字シーケンスを生成しても非常に使いやすく、非常に幅広いです。 – DimaSan

答えて

2

これにアプローチするには、必要なループを考えます。
xを一定回数印刷する必要があります。これはループです。この印刷を追跡するための変数も紹介します。
16を押すまで印刷を続ける必要があります。これは別のループです。

public static void randomX(){ 
    Random num = new Random(); 
    int xs = 0; 
    //This loop keeps going until you reach 16 
    while(xs <= 16){ 
    xs = num.nextInt(16+1); 
    int x = 0; 
    //This loop keeps going until you've printed enough x's 
    while (x < xs) 
    { 
     System.out.print("x"); 
     x++; 
    } 

    System.out.println("") 
    } 
} 
+1

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – DimaSan

+1

@DimaSanは少し説明を追加しました。そして、私が忘れてしまった改行を加えました。 –

+0

@ Jean-Bernard Pellerinそうですね、このようにコードを再フォーマットし、それがうまくいくかどうかを確認するためにコピーしましたが、コンパイル後にコードからの出力はありません。 – DPabst

1

補助カウンタを使用してループを管理し、ループを終了するように増やすことができます。

int i = 0; 
while (i<xs){ 
    System.out.print("x"); 
    i++; 
} 

は、Javaについての詳細を確認することができますが、ここでループ:

Tutorial about java while

2

あなたのバージョンは、小さな問題の数を持っています。ここに示唆された一連のリビジョンがあります。

// create your random object outside the method, otherwise 
// you're instantiating a new one each time. In the long run 
// this can cause awkward behaviors due to initialization. 
public static Random num = new Random(); 

public static void randomX(){ 
    int ran; 
    do { 
     ran = 1 + num.nextInt(16); // move the +1 outside unless you actually want 0's 
     int counter = 0; 
     while(counter++ < ran) { 
     System.out.print("x"); 
     } 
     System.out.println(); // add a newline after printing the x's in a row 
    } while(ran < 16); 
} 

最大の問題は、あなたがループ、新しい番号を生成するための外側の1とXの現在の数を印刷するための内側のいずれかが必要ということです。

二次的な問題は、あなたのループが自分の価値観のすべてが< = 16ですので、それが無限ループした数字< = 16のためにチェックしていたということでした。

コメントに追加の提案があります。

関連する問題