如果我的变量是0到6294之间的随机数,我怎样才能将输出只打印出第一个变量?
我的随机数代码是
int random = (int)(Math.random() * 6294);
例如,如果它吐出3542,我希望它只是说3.如果它吐出865,我想要它说8.我不熟悉Java,但我认为它与某些事情有关行间距?与%d,%f,%s的命令有什么关系?我不确定,所以任何见解都会非常感激!
编辑** 不是我教授提出的学习指南的一部分。这就是它在0-6294之间的数字的原因。如果数字不断变化,我只是不知道该怎么弄清楚。
答案 0 :(得分: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
注意强>
如果您只想要第一个数字,那么您可能不需要按照当前的方式随机化。
答案 1 :(得分:1)
正如@Berger所说,生成1到10之间的随机数会更容易:
Random r = new Random();
int random = r.nextInt(10) + 1
答案 2 :(得分:1)
有很多方法可以做到这一点。只要数字大于9,我喜欢的就是分数:
int first_digit(int n) {
while (Math.abs(n) > 9) {
n /= 10;
}
return n;
}
你可以做一些基本的数学运算。数字的登录基数10给出了数字具有的位数。将数字除以10除以数字减去1的幂可将小数点移动到左侧:
int first_digit_v2(int x) {
return x / (int)Math.pow(10, (int)Math.log10(x));
}
在1到9之间抛出一个随机数可能更容易,但概率分布与取数字的第一个数字不同。这是因为Benford's law。
答案 3 :(得分:0)
为什么要走弯路?为什么要创建一个4位数字;当你只关心第一个?!
你看,实质上是要求0到6之间的随机数。 (或者,按照你从865; 0和9使用8的想法)。
然后转到Random.nextInt(),然后就像:
int randomValueBetween0And9 = new Random().nextInt(7);
提示:正如JimmyB正确指出的那样:你在这里做的事情会影响价值的分配。另一方面:当您整理示例输入时,您是否考虑过发布?
答案 4 :(得分:0)
而不是截断只生成你需要的东西...... 0和9之间的int
int random = (int)(Math.random() * 10);
答案 5 :(得分: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));
与Mena的答案相同,但使用charAt(0)
代替substring(0,1)