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

Java——如何在一定范围内正确验证数字用户输入

陶弘业
2023-03-14

只是想寻求一点帮助!我现在正在做一个体重转换项目。我已经让它正常工作了,但现在我正试图让它成为傻瓜式的,也就是说,如果用户输入的数值低于或超过某个范围(在本例中,我寻找的是0到450之间的KG),则会出现一条消息,告知错误,然后会提示用户再次输入其值。我可以用下面的代码实现这一点,但问题是,当用户输入一个有效值时,它不仅会打印有效输入的转换,还会打印之前不正确的值的转换。我附上了一个命令提示符的屏幕截图来说明这个问题。谁能告诉我哪里出了问题吗?谢谢

public void kgToStonesAndPounds()
    {
    double kg = 0;
        
        
        System.out.println("Please enter weight in KG here, range must be between 1 and 450: ");
        kg = input.nextDouble();
        
        
        if ( kg >= 1 && kg <= 450 ) // validate kg
         System.out.printf("\nThe weight you have entered is %.0f KG\n" , kg);
        else
        {System.out.println( "Weight in KG must be in the range of 1 - 450" );
        this.kgToStonesAndPounds();
        }
      
      
        double pounds = kg * 2.204622;

        double stonesWithDecimal = pounds / 14;

        int stone = (int) stonesWithDecimal; // cast int to get rid of the decimal
        
        long poundsWithoutStone = (long)((stonesWithDecimal - stone) * 14); // Take the fractional remainder and multiply by 14
        
        System.out.println("This converts to " + stone + " Stone " + poundsWithoutStone + " Pounds " );
    }//end method kgToStonesAndPounds

命令提示符中的示例

共有3个答案

陆俊迈
2023-03-14

递归(在其内部调用方法)不是处理错误的方法,它只应在逻辑需要时使用。

要再次询问,请使用一个循环,该循环仅在输入有效时退出

double kg;
do {
    System.out.println("Please enter weight in KG here, range must be between 1 and 450: ");
    kg = input.nextDouble();
    if (kg >= 1 && kg <= 450) {
        System.out.printf("\nThe weight you have entered is %.0f KG\n", kg);
        break;
    } else {
        System.out.println("Weight in KG must be in the range of 1 - 450");
    }
} while (true);

你可以用模来简化你的代码

double pounds = kg * 2.204622;
int stone = (int) pounds / 14;
int poundsWithoutStone = (int) pounds % 14;
System.out.println("This converts to " + stone + " Stone " + poundsWithoutStone + " Pounds ");
锺离刚洁
2023-03-14

Java——如何在一定范围内正确验证数字用户输入

只要你得到想要的效果/结果(无不良副作用),一种方法就不比另一种方法更正确。

我可以这样做。只需最初提示,如果输入不正确,则重复提示。

double kg;
String prompt = "Please enter weight in KG here, range must be between 1 and 450: ";
System.out.println(prompt);
while ((kg = input.nextDouble()) < 1 || kg > 450) {
    System.out.println(prompt);
}
System.out.printf("\nThe weight you have entered is %.0f KG\n" , kg);
// now do something with kg
路裕
2023-03-14

在无效情况下再次调用该方法后,必须添加一个return。这样,当从方法调用返回时,如果从该方法调用它,它将不会移出else语句并执行以下代码。

public void kgToStonesAndPounds() {
    ...

    if ( kg >= 1 && kg <= 450 ) // validate kg
        System.out.printf("\nThe weight you have entered is %.0f KG\n" , kg);
    else {
        System.out.println( "Weight in KG must be in the range of 1 - 450");
        this.kgToStonesAndPounds();
        return; // here
    }
    
    ...
}
 类似资料:
  • 问题内容: 我目前正在创建第一个在控制台中执行的游戏。 我被要求验证可以用简单代码完成的输入。目标是输入,然后验证该数字是否为整数并且在1-4的范围内。如果可能,应使用基本算法解决该问题。 问题是它不会给我我想要的结果。当我输入字符串时,它可以工作,但是会在我输入的每个数字(包括范围内的数字)上循环播放。有人知道为什么吗? 问题答案: 因为你实例是,但从来没有给用户一个机会来改变这种情况,前两个条

  • 我目前正在工作的代码,以产生一个空心的正方形,由星号从1-20。到目前为止,这里是我所拥有的,但我无法弄清楚,如果用户输入的是一个大于20的数字,如何将代码循环回自身。例如,如果用户要输入21,代码仍然创建星号方块,并在下面弹出“无效大小.从1-20输入大小:”文本以重新提示用户,但新的数字不会产生任何结果。我需要它不创建正方形(如果>20或<=0),而是直接“跳转”到无效大小文本,然后创建一个正

  • 我试图验证一个逗号分隔的数字列表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模式,但还不够:

  • 对于我的Java类,我正在编写一个小程序,首先选择一个介于1和100之间的数字。然后,它会提示用户开始猜测正确的。如果用户对的猜测过高或过低,程序会打印出一个新范围,供他们在该范围内进行猜测。如果用户输入或,程序只需重新要求用户输入,但不会以任何方式更改范围。 示例输出(当机密号为20时)如下所示: 该项目似乎已经基本完成,但只有一个例外。其中一个要求是,当用户键入的超出我们给定的1和100范围时

  • 我目前有一个数字列表,我想知道这些数字中的哪些在一定范围内,以及它们在列表中的位置是什么。 我对巴黎相当陌生,所以我不知道该怎么做。 举一个简单的例子来说明我在做什么: 查找位于 0.05 和 0.15 范围内的数字 1 到 20 的逆函数 我列了一个清单,像这样: 从这里,我想要所有i的列表,以便A[i]在该范围内。 但我不知道如何从这里开始。我尝试了一些简单的if/for语句,但这些都不起作用

  • //创建一个扫描器对象以从用户扫描器scan=new scanner(system.in)读取输入; 当输入无效的范围时就会出现问题。程序提示用户重新输入指定范围内的适当整数。如果用户在此时重新输入一个无效的数据类型(例如ten),程序将崩溃。我相信这是因为一旦验证了正确的数据类型,程序就会继续验证范围,而不会重新检查正确的数据类型。 我认为通过嵌套while语句可以很容易地解决这个问题,这样每次