編輯答案,因爲我首先讀錯了問題, 道歉!
好的,我們來分解一下。所以首先,我們如何檢查兩個數字是否連續?如果他們一個接一個。這是正確的,但我們如何通過編程來表達這一點?
它實際上很簡單,如果它們之間的差值等於1,則兩個數字是連續的。因此,爲了檢查兩個數字是否連續,只需減去它們並查看結果是否爲1(或-1取決於訂購)。
現在,這個問題的完整解決方案稍微複雜一點。我們需要找到所有數字在您生成的樂透號碼是連續的。所以,爲了很好地解決這個問題,我建議把這個部分放到一個單獨的方法中,叫做getConsecutiveNumbers(int [] lottoNumbers)
。這樣,您已經完成了基本設置,如下所示:
// Now returns int array instead of String
public static int [] getLottoTicket(){
Random lottoNumbers = new Random(); //random object
int [] ticket = new int[6]; //6 lotto numbers
int counterr = 0;
int a;
for(int counter = 0; counter < ticket.length; ++counter){
ticket[counter] = (1 + lottoNumbers.nextInt(45)); //numbers between 1-45
}
Arrays.sort(ticket); //array class .. sorts array
return ticket;
}
public static void main(String [] args){
int a, d, n=1, t, b;
int totalConsecutives = 0;
for(int i=1; i<1000000; i++){
int counter = 0;
int [] lottoTicket = getLottoTicket();
// Keep a count of consecutives
totalConsecutives += getConsecutiveNumbers(lottoTicket);
}
System.out.println("Number of consecutives: " + totalConsecutives);
}
現在是主要部分。什麼進入這個神奇的getConsecutiveNumbers()
方法?讓我們來找出答案。
首先讓我們寫出必須放在主要方法之外的方法的簽名/組成,正如我所說的需要採用整數數組,而且還需要返回連續數字的數目,如方法名稱所示,如果程序詢問「有多少數字是連續的?」你應該相應地迴應!該方法將從此開始:
public static int getConsecutiveNumbers(int [] lottoNumbers) {
// How many
}
好的。由於您的程序設置到目前爲止,我們可以假設這裏給我們的樂透號碼已經排序。這很好,這意味着我們只需要通過數組並逐個檢查數字是否連續。我們如何做到這一點?我們也來分解一下吧。
我們需要去通過這個數組來檢查每個元素,這樣肯定會需要某種循環。我看到你已經使用了一個for循環,所以讓我們去做。
for(int i = 0; i < lottoNumbers.length; i++) {
// Going through each number here
}
現在這裏是智能部分。對於此循環的每次迭代,我們需要檢查元素lottoNumbers[i]
是否與lottoNumbers[i-1]
連續。你看?在英語中,這可能意味着第二個元素與第一個元素相連,然後第三個元素與第二個元素相連,依此類推,直到i
到達數組的末尾。
但是有一個問題。在這個循環的開始處i
是零(這是我們想要的),然而在這種情況下,lottoNumbers[i-1]
將給出一個IndexOutOfBoundsException
,一個數組在索引-1處沒有元素!所以爲了避免這個問題,我們需要在一個而不是零處開始搜索。
public static int getConsecutiveNumbers(int [] lottoNumbers) {
// i starts at 1 not 0
for(int i = 1; i < lottoNumbers.length; i++) {
// Going through each number here
}
}
那麼,我們該如何完成這項工作呢?讓我們這樣想。當我們通過數組時,每次數字都是連續的,只需將它添加到計數器,最後返回這個計數器。
下面是最終的解決方案:
public static int getConsecutiveNumbers(int [] lottoNumbers) {
int consecutives = 0;
// i starts at 1 not 0
for(int i = 1; i < lottoNumbers.length; i++) {
// Going through each number here
if(lottoNumbers[i] - lottoNumbers[i-1] == 1)
consecutives++; // Numbers were consecutive
}
// Return the number of consecutives
return consecutives;
}
我希望這有助於你理解問題和福利,也不僅僅是一個直線上升的答案更多!有任何問題請去問:)
Arrays.sort(ticket); http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html – 2015-02-09 20:57:17
任何連續的數字,如在一個連續的對中都會計數?另外,如果有疑問,'return {4,8,15,16,23,42};' – mbomb007 2015-02-09 20:57:25
似乎您的樂透隨機器可能會多次返回相同的值......(我相信這是不可能的彩票) – gtgaxiola 2015-02-09 20:59:44