当前位置: 首页 > 知识库问答 >
问题:

将范围保持在一定的数字范围内

索嘉胜
2023-03-14

对于我的Java类,我正在编写一个小程序,首先选择一个介于1和100之间的int数字。然后,它会提示用户开始猜测正确的int。如果用户对int的猜测过高或过低,程序会打印出一个新范围,供他们在该范围内进行猜测。如果用户输入字符串双精度,程序只需重新要求用户输入整数,但不会以任何方式更改范围。

示例输出(当机密号为20时)如下所示:

c:\csc116> java GuessingGame 
Guess the secret number!
Enter a number between 1 and 100 (inclusive): 45
Enter a number between 1 and 44 (inclusive): jlkj
Enter a number between 1 and 44 (inclusive): 31.0  //double
Enter a number between 1 and 44 (inclusive): 1000 //outside the range of 1-100
Enter a number between 1 and 44 (inclusive): 34
Enter a number between 1 and 33 (inclusive): 15
Enter a number between 16 and 33 (inclusive): 20    
You win!

该项目似乎已经基本完成,但只有一个例外。其中一个要求是,当用户键入的int超出我们给定的1和100范围时,打印输出消息不会改变(如上面的示例所示)。这就是我被难倒的地方,我想看看是否有人能帮我找到正确的答案。

import java.util.*;


public class GuessingGame {


    public static void main(String[] args) {
        introduction();
        Scanner console = new Scanner(System.in);
        Random rand = new Random();

        int guess = 0;
        int minimum = 1;
        int maximum = 100;
        int secretNumber = rand.nextInt(100) + 1;

        System.out.print("Enter a number between " + minimum + " and " + maximum + " (inclusive): ");
        while (guess != secretNumber) {
            if (console.hasNextInt()) {
                guess = console.nextInt();
                if (guess > secretNumber) {
                    maximum = guess - 1;
                    System.out.print("Enter a number between " + minimum + " and " + maximum + " (inclusive): ");
                }
                if (guess < secretNumber) {
                    minimum =guess + 1;
                    System.out.print("Enter a number between " + minimum + " and " + maximum + " (inclusive): ");
                }
                if (guess == secretNumber) {
                    System.out.println("You win!");
                }
            } else {
                console.next();
                System.out.print("Enter a number between " + minimum + " and " + maximum + " (inclusive): ");
            }
        }
    }


    public static void introduction() {
        System.out.println("Guess the secret number!");
    }
}

共有3个答案

舒斯伯
2023-03-14

您只检查相对于机密号码的猜测号码。你缺少的是相对于最大值和最小值的猜测数的检查。例如:

if (guess > maximum) {
    System.out.print("Too high!");
} else if (guess < minimum) {
    System.out.print("Too low!");
}
商燕七
2023-03-14

当您还想提示用户初始最小值和最大值时,应将这两个值分开保存,并在循环开始时插入另一个(如果)-检查

guess = console.nextInt();
if (guess > originalMaximum) {
    System.out.print("Enter a number less then " + originalMaximum);
}

贝成业
2023-03-14

你有:

            guess = console.nextInt();
            if (guess > secretNumber) {
                maximum = guess - 1;
                System.out.print("Enter a number between " + minimum + " and " + maximum + " (inclusive): ");
            }
            if (guess < secretNumber) {
                minimum =guess + 1;
                System.out.print("Enter a number between " + minimum + " and " + maximum + " (inclusive): ");
            }
            if (guess == secretNumber) {
                System.out.println("You win!");
            }

现在,您根本没有检查最小/最大范围。你必须添加一个明确的检查,但需要注意的是(在这里的其他答案中遗漏了),如果输入超出范围,你必须确保不要将其作为猜测处理。您当前使用ifs而不使用elses的风格意味着您在实现它时必须小心。你有几个选择,例如:

            guess = console.nextInt();
            if (guess < minimumAllowed || guess > maximumAllowed) {
                // handle error
            } else {
                // handle valid input
                if (guess > secretNumber) {        
                    // ...
                }
                if (guess < secretNumber) {
                    // ...
                }
                if (guess == secretNumber) {
                    // ...
                }
            }

或:

            guess = console.nextInt();
            if (guess < minimumAllowed || guess > maximumAllowed) {
                // handle error
            } else if (guess > secretNumber) {        
                // ...
            } else if (guess < secretNumber) {
                // ...
            } else if (guess == secretNumber) {
                // ...
            }

或者,坚持你目前的风格,只要你不必在循环中再做任何不相关的逻辑(在你的程序中似乎就是这样):

            guess = console.nextInt();
            if (guess < minimumAllowed || guess > maximumAllowed) {
                // handle error
                continue;
            }
            // handle valid input
            if (guess > secretNumber) {        
                // ...
            }
            if (guess < secretNumber) {
                // ...
            }
            if (guess == secretNumber) {
                // ...
            }
 类似资料:
  • 问题内容: 我正在尝试将一个数字范围转换为另一个数字范围,并保持比率。数学不是我的强项。 我有一个图像文件,其中点值的范围可能在-16000.00到16000.00之间,尽管典型范围可能会小得多。我想做的是将这些值压缩到0-100的整数范围内,其中0是最小点的值,而100是最大点的值。即使丢失了一些精度,它们之间的所有点也应保持相对比率,我想在python中做到这一点,但即使是通用算法也足够。我更

  • 问题 你想定义一个数组的范围。 解决方案 在 CoffeeScript 中,有两种方式定义数组元素的范围。 myArray = [1..10] # => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] myArray = [1...10] # => [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] 要想反转元素的范围,则可以写成下面这样。 myLargeArray =

  • 我试图验证一个逗号分隔的数字列表1-384唯一(不重复)。 即。 1, 2, 3, 5, 6, 7, 9有效 1-3, 5-7, 9有效 2,2,6无效 2,无效 1, 2, 3, 4, 15, 6, 7, 385无效,因为最后一个数字大于384 我尝试了以下RegEx模式,但还不够:

  • 问题内容: 给定一个,我可以做,但不能两者都做,因为它们中的任何一个都会消耗流。 现在假设我有 如何获得信息流的范围?(除以外) 问题答案: 您可以调用的方法。它返回一个包含最小值和最大值以及其他一些统计信息的对象:平均值,计数和总和。 并有类似的方法。

  • 问题内容: 我最近开始学习python3。 在 python 2 中,可以使用函数来分配列表元素。 如使用功能时在 python 3 中一样 为什么会这样呢? python为什么要进行此更改? 是恩赐还是祸根? 问题答案: Python 3 在很多地方使用了 迭代器 ,而 python 2 使用了 列表 。文档给出了详细的解释,包括对的更改。 优点是,如果您使用大范围的迭代器或映射, Python

  • 我正在尝试编写一个Heap排序方法,它只在传入方法的给定范围内执行排序。传入的范围是低和高,这些值对应于堆中的值,而不是堆的索引。例如,输入数组可能是:28 10 49 20 59 61 17,如果low=49,high=61,Heap排序后的结果数组将看起来像这样:28 10 20 49 59 61 17。范围之外的值保持不变。我已经有了一个工作的Heap排序方法,但我的问题是如何修改这个方法以