0

好的,所以用户想(不输入)一个介于 1 和 10 之间的数字(例如),程序提示用户“你的数字是否小于或等于 X?”,然后用户输入 true 或 false . 到目前为止,我已经设法完成了搜索间隔,但我不知道如何继续。主要问题是,如果我被允许使用“正确!”,我只能使用 true 或 false。那么就没有问题了。

import java.util.*;

public class GuessTheNumber {

public static void main (String[]args){

    Scanner scan = new Scanner (System.in);
    System.out.println("Think of a number between 1 and 10\n");

    double max = 10;
    double x = max/2;

    while (true){
        System.out.println("Is your number less than or equal to "+(int)x+" ?");
        String truth = scan.next();

        if(truth.equals("true")){
            x=x/2;
        }
        if(truth.equals("false")){
            x+=x/2;
        }
    }
    //The program breaks at some point
    System.out.println("Your number is: ");
 }
}

该程序希望用户输入真或假,因此我们可以忽略其他任何内容。

4

2 回答 2

0

您没有跟踪搜索间隔,也没有提供任何结束循环的方法。您将获得一个有效的无限循环。您需要存储下限和上限,并根据用户的输入进行修改。

// ints, not doubles.  Do you expect 3.14159 as the user's choice?
int lower = 1;
int upper = 10;
int guess = (lower + upper) / 2;  // guess, not x. Make the name meaningful.

然后,当用户说猜测比他想到的数字高时,更改上限:

upper = guess - 1;
guess = (lower + upper) / 2;

对另一种情况做类似的事情。这是你的作业,不是我的。

最后,你怎么知道你什么时候完成了?什么会表明这一点?

if (/* we are done */) {
    break;
}

您可能需要另一种类型的循环,或者更改while(true)为其他类型。并且,请不要在main().

于 2013-11-10T21:41:31.193 回答
0

while在循环的开头(内部)添加以下内容:

System.out.println("Is your number " + x +" ?");
String truth = scan.next();
if(truth.equals("true")){
    break;
}

其他选项:将您的if语句转换为如下所示:

if(truth.equals("true")){
    if(x == x/2) break;
    x=x/2;
}
if(truth.equals("false")){
    if(x == x + x/2) break;
    x+=x/2;
}

然后将最后一个输出行更改为:

 System.out.println("Your number is: " + x);
于 2013-11-10T22:19:48.147 回答