2014-09-21 67 views
0
import java.util.Scanner; 
import java.util.Random; 

public class GuessHarder { 

public static void main(String[] args) { 


    Random generator = new Random(); 
    Scanner reader = new Scanner(System.in); 

    String higher = "higher", lower = "lower", correct = "correct", input; 
    int guess, random, random2 = 1, random3 = 100, randomLast, cntr = 1; 

    random = generator.nextInt(100) + 1; 
    randomLast = random; 
    System.out.println("Is your number: " + random); 
    System.out.println("Input if number should be higher, lower, or correct: "); 
    input = reader.next(); 

    while (!input.equals("correct")){ 
     if (input.equals("lower")){ 
      randomLast = random2; 
      random2 = generator.nextInt(100) + 1; 
      if ((random2 < random) && (random2 < randomLast)){ 
      random = random2; 
      cntr += 1; 
      System.out.println("Is your number: " + random); 
      System.out.println("Input if number should be higher, lower, or correct: "); 
      input = reader.next(); 
      } else { 
       input = lower; 
      } 
     } else if (input.equals("higher")){ 
      randomLast = random3; 
      random3 = generator.nextInt(100) + 1; 
      if ((random3 > random) && (random3 > randomLast)){ 
      random = random3; 
      cntr += 1; 
      System.out.println("Is your number: " + random); 
      System.out.println("Input if number should be higher, lower, or correct: "); 
      input = reader.next(); 
      } else { 
       input = higher; 
      } 
     } 

    } 

    System.out.println("Computer took " + cntr + " amount of tries to guess your number"); 

    } 
} 

當我輸入更高或更低,它會給我的數字高於或低於前一個數字,但它不會記得以前的數字。 爲了清楚的例子是:猜測遊戲程序。用戶認爲號碼,電腦試圖猜出它

「是您的號碼:65

輸入,如果數量應該是更高,更低或更正:

更高

是您的號碼:96

輸入數字應該更高,更低或正確:

是您的號碼:59

輸入,如果數量應該是更高,更低或正確的:」

由過去的輸入範圍應該是65-96,而是它只是做0-96,所以我得到59這樣的數字,不應該在範圍內。 我應該改變什麼來設置它來記住範圍的最後兩個輸入而不是最後一個。

+0

最簡單的解決方案是記住當前已知的上限和下限。所以你從'int upperBound = 100'和'lower bound = 0'開始。通過用戶輸入,您可以將相應的邊界設置爲最後給定的值。 – Tarlen 2014-09-21 20:38:30

回答

3

因此,保持兩個變量「記住」的上限和下限。

int lowerBound = 0; 
int upperBound = MAX_NUMBER; 

然後每次計算機猜測你需要更新這兩個數字。

一旦你更新了兩個數字,你需要根據這些數字產生一個新的猜測。

generator.nextInt(upperBound - lowerBound + 1) + lowerBound; 

+1使該值包含在內。

+0

不應該是'generator.nextInt(upperBound - lowerBound)+ lowerBound;'?例如,如果'lowerBound'是60而'upperBound'是80,那麼你的生成器的範圍是從80到140。或者我誤解你的兩個綁定變量? – Tom 2014-09-21 20:52:25

+0

@Tom是的,它實際上就是這樣,我添加了'+ 1'以使其包含在內。 – FunctionR 2014-09-21 21:04:03

+1

好的團隊合作:D。該解決方案的+1。 – Tom 2014-09-21 21:15:40

1

你要記住的下限和上限,並設法使一個隨機數,他們之間,而不是

generator.nextInt(100) + 1;