我必须在随机生成的数字中找到最左边的数字(例如: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)。
我做错了什么,如何让它发挥作用?
谢谢!
答案 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);
它适用于我