2016-10-10 77 views
0

如果我的變量是一個介於0和6294之間的隨機數,我將如何讓我的輸出只打印出第一個變量?如何「擦除」數字只有數字的第一位

我的隨機數的代碼是

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

例如,如果它吐出3542,我希望它只是說3.如果吐出來的865,我想它說8.我不是熟悉Java,但我認爲它與行間距有關?與%d,%f,%s的命令有關嗎?我不確定如此任何見解將不勝感激!

編輯** 沒有我的教授提出的學習指南的一部分。這就是爲什麼它是0-6294之間的數字。如果數字在不斷變化,我就不知道該如何解決。

+4

如果你只需要一位數字,爲什麼你隨機多位數字? – Berger

+0

這假定OP不需要孔數,但是,對於這個特定的輸出,他可能需要1位數字,但仍然可以在代碼後面使用整數。 – Athamas

+0

@Athamas以他的榜樣爲例,他立即扔掉那個隨機數。他忘記了其他數字! – GhostCat

回答

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)); 

同梅納的答案,但charAt(0)代替substring(0,1)

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 

注意

如果你只想要第一個數字,那麼你不需要隨機你目前做的方式。

+0

轉換爲,然後從一個字符串似乎不會太表演 –

+0

@ P.J.Meisch可能比數學更好。 – Mena

1

正如@Berger說,這將是容易只是生成1到10之間的隨機數:

Random r = new Random(); 
int random = r.nextInt(10) + 1 
1

有很多方法可以做到這一點。只要數字大於9,我喜歡的就是分數:

int first_digit(int n) { 
    while (Math.abs(n) > 9) { 
    n /= 10; 
    } 
    return n; 
} 

你可以做一些基本的數學運算。數字的10位數字表示數字的位數。除以10,一個數字的位數減去一個數的電源小數點向左移動:

int first_digit_v2(int x) { 
    return x/(int)Math.pow(10, (int)Math.log10(x)); 
} 

這可能是更容易,就把1和9之間的隨機數,但概率分佈韓元與採取號碼的第一位數字相同。這是因爲Benford's law

0

爲什麼要走所有的彎路?你爲什麼要創建一個4位數字;當你只關心第一個?!

你看,實質上是要求一個0到6之間的隨機數。 (或者,按照您使用865,86; 0和9的想法)。

只是去Random.nextInt()然後,如:

int randomValueBetween0And9 = new Random().nextInt(7); 

提示:如JimmyB正確地指出在這裏:你在做什麼,在這裏會影響值的分佈。另一方面:當你把你的示例輸入放在一起時,你有沒有想過分佈

+0

結果與OP的版本不同... – JimmyB

+1

可能。問題是:這真的很重要嗎?並且不會更容易**來理解這種「nextInt()」解決方案的分佈;與提取3或4位數字串的「第一個字符」相比?! – GhostCat

+0

我假設OP選擇這個號碼生成方案是爲了達到某種分配。因此,在告訴他僅僅使用另一個發行版來簡化輸出例程方面沒有多大用處... – JimmyB

0

,而不是截斷只有你所需要的生成...... 一個int介乎0和9

int random = (int)(Math.random() * 10); 
+0

結果與OP的版本有不同的分佈... – JimmyB

+0

https://en.wikipedia.org/wiki/Benford %27s_law – vz0