2017-10-16 21 views
-3

我正在研究類似賭徒的遊戲來練習套接字編程,而且我遇到了一個小問題。 我有一個遊戲,玩家輪流獲得一個隨機數。這些數字加在一起就有玩家分數。我正在努力做到這一點,如果你舉個例子拉7 - 你不能再得到它。 我一直在試圖至今: 編輯:Java - 限制基於較早值的隨機結果

private void pick() { 

    Number r = new Number(getNumber(), new Vector2(200, 10)); 
    myNumbers.add(r); 
    sendMessage(output, "Number" + r.value); 
} 

private int getNumber() { 
    int n = random.nextInt(10); 
    while(numberHasBeenPicked(n)) { 
     n = random.nextInt(10); 
    } 

    return n; 

} 

private boolean numberHasBeenPicked(int value) { 
    if(numbersUsed.contains(value)) 
      return true; 
     else 
      return false; 
} 

另外,sendMessage()功能數字相加的numbersUsed在服務器和客戶端列表,以便這兩個程序知道已採取哪些

/編輯

但我沒有得到我要找的結果。我不知道還有什麼可說的,因爲我得到的錯誤基本上是我仍然得到已使用的數字,即使我確定它們已被放入numbersUsed列表中。

任何幫助將不勝感激,我很抱歉,如果缺乏信息。

+0

什麼是'numbersUsed'? –

+2

你覺得'返回false;'在'else'中做什麼?爲什麼不使用'contains',假設'numbersUsed'是一個'List'?你有沒有考慮過使用'HashSet'? –

+0

我不知道包含的方法,謝謝!但問題仍然存在。我將閱讀HashSet! –

回答

0

while(!numberHasBeenPicked(n))

你應該刪除!因爲當條件爲真,所以人數已經回升,要挑一個又一個。並通過!你說:當它是錯誤的數字已被挑選(所以它沒有),選擇另一個。似乎你想實現相反

+0

如上所述,這個問題現在已經解決了,問題仍然存在,儘管謝謝您的回覆! –

0

由於@SotiriosDelimanolis提到最好改變你的程序的設計。您可以將所有生成的值存入ArrayList,同時生成新的隨機數字,檢查此ArrayList是否包含新號碼。你可以用containsAll()

+0

@DennisBjörk然後你可以嘗試編輯你的問題 – Russiancold