如何“擦除”数字只有数字的第一个数字

时间:2016-10-10 14:57:47

标签: java spacing

如果我的变量是0到6294之间的随机数,我怎样才能将输出只打印出第一个变量?

我的随机数代码是

int random = (int)(Math.random() * 6294);

例如,如果它吐出3542,我希望它只是说3.如果它吐出865,我想要它说8.我不熟悉Java,但我认为它与某些事情有关行间距?与%d,%f,%s的命令有什么关系?我不确定,所以任何见解都会非常感激!

编辑** 不是我教授提出的学习指南的一部分。这就是它在0-6294之间的数字的原因。如果数字不断变化,我只是不知道该怎么弄清楚。

6 个答案:

答案 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)