- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
package morrisJCh5Sec2;
import java.util.Scanner;
public class Ch5Sec2 {
public static int collectInteger(String purpose, int minimum, int maximum) {
Scanner input = new Scanner(System.in);
System.out.println(purpose);
System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
int value = input.nextInt();
while(input.hasNext()) {
if(!input.hasNextInt()) {
System.out.println("The value you enter needs to be between " + minimum + " and " + maximum + ". Please try again.");
System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
value = input.nextInt();
input.next();
continue;
//not an integer
}//end not int if
else {
value = input.nextInt();
if(value >= minimum && value <= maximum) {
return value;
}
else {
System.out.println("The value you enter needs to be between " + minimum + " and " + maximum + ". Please try again.");
System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
value = input.nextInt();
}//end else out of bounds
}
//input.close();
}
return 0;
}//end collectInteger
public static void main(String args[]) {
final int LOW_INT = 0;
final int HIGH_INT = 100;
int inputValue = collectInteger("Enter the number of cats.", LOW_INT, HIGH_INT);
System.out.printf("Your number of cats was %d.\n", inputValue);
}//end main
}//end class
Enter the number of cats.
Enter an integer between 0 and 100: -56
-56
The value you enter needs to be between 0 and 100. Please try again.
Enter an integer between 0 and 100: 101
101
The value you enter needs to be between 0 and 100. Please try again.
Enter an integer between 0 and 100: jads
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at morrisJCh5Sec2.Ch5Sec2.collectInteger(Ch5Sec2.java:30)
at morrisJCh5Sec2.Ch5Sec2.main(Ch5Sec2.java:42)
我的输出应该允许输入一个字符串,并且它会再次要求输入一个整数。另一个问题是我的代码不应该让用户输入两次输入,它应该只接受用户输入一次并运行代码。
最佳答案
您的代码中有很多对 next()
和 nextInt()
的额外调用。您可以将代码转换为 do-while
循环。此外,您还可以在第一个 if
中额外调用 next()
。然后在内部 else
中,您要求用户输入 nextInt()
,但由于您在循环开始时调用 nextInt()
,这是一个额外的,这就是为什么它要求输入两次。此外,在第一个 if
中,它会处理输入是否不是可解析的 int。如果不是,则有 value = input.nextInt()
,这将导致输入不匹配异常。相反,调用空白 next()
来清除错误的输入:
public static int collectInteger(String purpose, int minimum, int maximum) {
Scanner input = new Scanner(System.in);
System.out.println(purpose);
System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
int value;
do {
if(!input.hasNextInt()) {
System.out.println("The value you enter needs to be between " + minimum + " and " + maximum + ". Please try again.");
System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
input.next(); //clear bad input
}
else {
value = input.nextInt();
if(value >= minimum && value <= maximum) {
return value;
}
else {
System.out.println("The value you enter needs to be between " + minimum + " and " + maximum + ". Please try again.");
System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
}
}
} while(input.hasNext());
return 0;
}
示例输出:
Enter the number of cats.
Enter an integer between 0 and 100: -51
The value you enter needs to be between 0 and 100. Please try again.
Enter an integer between 0 and 100: 20000
The value you enter needs to be between 0 and 100. Please try again.
Enter an integer between 0 and 100: Hello
The value you enter needs to be between 0 and 100. Please try again.
Enter an integer between 0 and 100: 4
Your number of cats was 4.
关于java - 输入必须输入两次,并且可以输入字符串时不允许输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53269192/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!