使用Java查找数字中最左边的数字

时间:2012-05-26 11:37:36

标签: java random digit

我必须在随机生成的数字中找到最左边的数字(例如: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)。

我做错了什么,如何让它发挥作用?

谢谢!

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:3)

整数除法删除小数部分,所以你只需要一个简单的循环:

int num = (int)((Math.random()*100000)+1);
for ( ; num >= 10 ; num /= 10);
System.out.println(num);

答案 2 :(得分:1)

你快到了!问题是,num1将是一个数字,而不是一个字符,尽管它们基本上是相同的。使用.toString()将其转换为字符串,或使用System.out.format格式字符串使用%i

编辑:没关系,我错了。当num1大于0时你正在循环,问题是当num1为0时这个循环退出。在这种情况下,你需要先断开一个,所以我只是改变了测试>=10。在这种情况下,您确保您有一个数字,考虑到问题的性质,必须大于0。

答案 3 :(得分:1)

无需使用Math.floor作为整数除法自动舍入。

你想在你的循环中检查num1 > 9,只在数字至少为10的情况下进行除法。

编辑:我测试了您的代码,它也适用于我,无需修改......

答案 4 :(得分: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);

它适用于我