2016-10-10 7 views
0

変数が0と6294の間の乱数ならば、どのようにして最初の変数を出力するだけですか?数字の最初の桁のみを持つように数字を消去する方法

乱数のための私のコードは

int random = (int)(Math.random() * 6294); 

例は、それが3542を出してくれるならば、私はそれは私がいない午前8を言いたい、それが865を出してくれるならば、それはちょうど3を言いたいですJavaに精通していますが、私はそれが行間隔と関係があると考えていましたか? %d、%f、%sのコマンドと何か?どんな洞察力にも大変感謝しています。

EDIT ** 私の教授が出した学習ガイドの一部はありません。 0〜6294の間の数字です。数字が変わってもそれを理解する方法はわかりません。

+4

1桁だけ必要な場合は、なぜマルチ桁の番号をランダム化していますか? – Berger

+0

これはOPがホール番号を必要としないと仮定していますが、この特定の出力に対して1桁の数字を必要とするかもしれませんが、コードの後ろの数字にはまだ使用されています。 – Athamas

+0

@Athamas彼の例を考えれば、彼は即座に乱数を投げ捨てています。彼は他の数字について忘れてしまった! – GhostCat

答えて

0

、あなたは文字列にint型を解析し、次で最初の文字/数字を取得することができます:

//get random number 
int random = (int)(Math.random() * 6294); 

//print out just the first digit 
System.out.println(String.valueOf(random).charAt(0)); 

同じメナの答えとしてではなく、charAt(0)ではなく、substring(0,1)

2

最も簡単な解決策は、数字をStringとして扱い、最初の文字のみを取得することです。

その後、数値に戻して安全に変換できます。

例えば

// assuming the output 
int random = 3542; 
// getting 1st character only 
String truncated = String.valueOf(random).substring(0,1); 
// parsing new int 
int newRandom = Integer.parseInt(truncated); // ==> 3 

あなただけの最初の数字をしたい場合は、チャンスはあなたが現在のやり方をランダム化する必要はありませんです。

+0

文字列に変換してから文字列を変換すると、あまり効果がありません。 –

+0

@ P.J.Meischは数学よりも良いでしょう。 – Mena

1

@Bergerが言ったように、それだけで1と10の間の乱数を生成するために容易になるだろう:

Random r = new Random(); 
int random = r.nextInt(10) + 1 
1

それを行うには多くの方法があります。私が好きなのは、数値が9より大きい限り、数値を除算することです。

int first_digit(int n) { 
    while (Math.abs(n) > 9) { 
    n /= 10; 
    } 
    return n; 
} 

基本的な計算ができます。数字の基数10のログには、その数字の桁数が表示されます。

int first_digit_v2(int x) { 
    return x/(int)Math.pow(10, (int)Math.log10(x)); 
} 

ちょうど1と9の間の乱数をスローする方が簡単かもしれないが、確率分布ウォン:数字から1を引いた数の力に10で数を割ると、左に小数点を移動します番号の最初の桁を取るのと同じでなければなりません。これは、Benford's lawが原因です。

0

なぜすべての迂回路を行っていますか?なぜ4桁の数字を作成したいのですか?あなたが最初のものだけを気にするときに!

本質的に0から6の間の乱数を求めています。 (または、865から8を使用するという考えに従う; 0と9)。

int randomValueBetween0And9 = new Random().nextInt(7); 

ヒント:

は同じように、その後、 Random.nextInt()のために行くJimmyBが正しくここで指摘されるよう:あなたはここで何をしているかの値の分布に影響を与えることになります。一方、あなたの入力例をまとめると、 の分布を考えていますか?切り捨て、ちょうど小さな乱数を発生させないための良い理由は、(他の人が提案してきたように)がありますと仮定すると、代わりにあなたが必要なものだけを生成切り捨てる

+0

結果はOPのバージョンとは異なる分布をしています... – JimmyB

+1

おそらく。問題は本当に重要ですか?そのような "nextInt()"ソリューションの配布を理解することは**簡単です**。 3または4桁の文字列の "最初の文字"をフェッチするのに比べて! – GhostCat

+0

私は、OPが特定の分布を達成する*目的でこの番号生成スキームを選択したと仮定しています。したがって、単に出力ルーチンを単純化するために別のディストリビューションを使用するように彼に指示するのはあまり役に立ちません。 – JimmyB

0

... 0 betwen int型と9

int random = (int)(Math.random() * 10); 
+0

結果はOPのバージョンとは異なります。 – JimmyB

+0

https://en.wikipedia.org/wiki/Benford %27s_law – vz0

関連する問題