2016-11-12 31 views
0

提示:玩家选择一个范围(最小和最大),然后考虑该范围内的数字(不需要在程序中输入数字)。游戏应该使用二进制搜索来系统地猜测玩家的号码。玩家应该在回合之间告诉计算机“太高”或“太低”或“正确”。程序应该继续,直到电脑得到答案,或检测到作弊(或肯定知道答案)。在退出之前,计算机应该说出它有多少“轮”(需要多少次猜测)。如何找到使用二进制搜索的用户号码

问题:电脑是错后的第一时间和用户声明太高或太低,我不能ressign值的上限和下限范围

import java.util.Scanner; 

public class TestPractice { 

    public static void main(String[] args) { 
     System.out.println("Think of a number"); 
     Scanner scan = new Scanner(System.in); 
     String x = null; 
     String y = null; 
     String i = null; 
     //Get the input from the player 
     System.out.println("Please your maximum value"); 

     if (scan.hasNext()) { 
      x = scan.next(); 
     } 

     System.out.println("Please input your min value"); 
     if (scan.hasNext()) { 
      y = scan.next(); 
     } 

     //Parse the input so its usuable in the array 
     int max = Integer.parseInt(x); 
     int min = Integer.parseInt(y); 

     boolean numberguessed = true; 
     int numberofRounds = 0; 

     while(numberguessed) { 
      int midpoint = (max+min)/2; 

      numberofRounds++; 

      System.out.println("Is your number " + midpoint + " please say too low or too high or correct"); 
      if (scan.hasNext()) { 
       i = scan.next(); 
      } 
      if (i.equalsIgnoreCase("too high")) { 
       min = midpoint; 
      } 
      if (i.equalsIgnoreCase("too low")) { 
       max = midpoint; 
       min = 0; 
      } 
      if (i.equalsIgnoreCase("correct")) { 
       System.out.println("the number of rounds in this game is" + numberofRounds); 
       break; 
      } 

     } 

    } 
} 
+0

你的意思是你想让用户再次输入'x'和'y'最大值和最小值?他们完成第一轮之后? – Searching

+0

仍然无法使用? – Searching

回答

1

您将需要使用scan.nextLine()而不是scan.next(),读取包含space个字符的行中的所有内容,这就是为什么max和min永远不会放在首位的原因。

扫描程序使用定界符模式将其输入分为标记,默认情况下该定界符与空白匹配。

More info on scanner

再循环一次整场比赛,看看do {} while(true);迭代。

System.out.println("Think of a number"); 
Scanner scan = new Scanner(System.in); 
String playAgain = "y"; 
String x = null; 
String y = null; 
String i = null; 

do { 
    // Get the input from the player 
    System.out.println("Please your maximum value"); 

    if (scan.hasNext()) { 
     x = scan.next(); 
    } 

    System.out.println("Please input your min value"); 
    if (scan.hasNext()) { 
     y = scan.next(); 
    } 

    // Parse the input so its usuable in the array 
    int max = Integer.parseInt(x); 
    int min = Integer.parseInt(y); 
    int midpoint = 0; 
    boolean numberguessed = true; 
    int numberofRounds = 0; 

    while (numberguessed) {   
     midpoint = (max + min)/2; 
     numberofRounds++; 
     System.out.println("Is your number " + midpoint 
       + " please press (l) for too low or (h) for too high or (c) for correct"); 
     if (scan.hasNext()) { 
      i = scan.nextLine(); 
     } 
     System.out.println(i); 
     if (i.equalsIgnoreCase("h")) { 
      min = midpoint; 
     } else if (i.equalsIgnoreCase("l")) { 
      max = midpoint; 
      min = 0; 
     } else if (i.equalsIgnoreCase("c")) { 
      System.out.println("the number of rounds in this game is" 
        + numberofRounds); 
      break; 
     } 

    } 
    System.out.println("Press y to play again"); 
    if (scan.hasNext()) { 
     playAgain = scan.next(); 
    } 
    System.out.println("Game over"); 
} while (playAgain.equalsIgnoreCase("y")); 

More info on do while

一个建议是使用简单的是/像H,L没有答案c,而不是让用户在写一个字和。让我们知道。

+0

而不是'do {} while(true)'我建议在while(true)do {}'时使用更习惯的''。这不会让读者不确定破坏情况。 –