0

ランダムに生成された数字の左端の数字を見つける必要があります (例: 46891 -> 4)。数字が何であっても、私はゼロになり続けます。これが私が試すコードの1つです:

int num1 = (int)((Math.random()*100000)+1);

while((Math.floor(num1/10))>0)
    {
        num1 = (int)Math.floor(num1/10);
    }

    System.out.println("Left digit: " + num1);

を使用しようとしましInteger.parseIntたが、明らかにこの間違いがありました。Integer 型のメソッド parseInt(String) は、引数 (int) には適用できません。

私は何を間違っていますか、どうすればそれを機能させることができますか?

ありがとうございました!

4

5 に答える 5

5

これはどう :

final Random r=new Random();
final int t=r.nextInt(100000)+1;
// naive way:
final String s=Integer.toString(t);
System.out.println("left digit is:"+s.charAt(0));
// "math" way:
int temp=t;
while(temp>=10)
  temp/=10;
System.out.println("left digit is:"+temp);
于 2012-05-26T11:52:18.807 に答える
3

整数除算では小数部分が削除されるため、必要なのは単純なループだけです。

int num = (int)((Math.random()*100000)+1);
for ( ; num >= 10 ; num /= 10);
System.out.println(num);
于 2012-05-26T11:46:28.303 に答える
1

あなたはもうすぐそこにいます!問題は、 がnum1文字ではなく数字になることですが、基本的には同じものです。を使用して文字列に変換するか、書式文字列と共に.toString()使用します。System.out.format%i

編集:気にしないでください、私は間違っていました。num1が 0 より大きい間、ループを実行しています。問題は、num1が 0 のときにこのループが終了することです。この場合、1 つ前にブレークする必要があるため、テストを に変更し>=10ます。この場合、質問の性質上、数字が 1 桁であることを確認します。数字は 0 より大きい必要があります。

于 2012-05-26T11:39:53.277 に答える
1

Math.floor整数除算は自動的に切り捨てられるため、使用する必要はありません。

num1 > 9そして、数が少なくとも10の場合にのみ除算するために、ループでチェックしたい.

編集:私はあなたのコードをテストしましたが、変更せずに私にとっても機能します...

于 2012-05-26T11:43:15.107 に答える
1

私はあなたに基づいたコードを使用しています

int num1 = (int)((Math.random()*100000)+1);
System.out.println("Randomed number: " + num1);
while((num1/10)>0)
        num1 = num1/10;
System.out.println("Left digit: " + num1);

そしてそれは私にとってはうまくいきます

于 2012-05-26T11:51:46.263 に答える