0

我必须在随机生成的数字中找到最左边的数字(例如:46891 -> 4)。无论数字是多少,我都会不断变为零。这是我尝试的代码之一:

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字符串将其转换为字符串。

编辑:没关系,我错了。您正在执行循环 whilenum1大于 0,问题是该循环在num10 时退出。在这种情况下,您需要先中断一个,所以我只需将测试更改为>=10. 在这种情况下,您确保您有一个数字,考虑到问题的性质,它必须大于 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 回答