(我有一个家庭作业问题,我一直坚持认为这与Java中的“do-while循环”有关。)
它要求我有一个do-while循环,继续提示用户输入“小于100的数字”,直到输入的数字实际上小于100。
(它将运行三个测试:) 例:测试1: 对于用户输入123,395,25,预期输出为:
Enter a number (<100):
Enter a number (<100):
Enter a number (<100):
Your number < 100 is: 25
(这是我目前的代码:)
public class NumberPrompt {
public static void main (String [] args) {
Scanner scnr = new Scanner(System.in);
int userInput = 0;
do {
System.out.println("Enter a number (<100):" );
System.out.println("Enter a number (<100):" );
System.out.println("Enter a number (<100):" );
userInput = userInput + 25;
} while (userInput > 100);
System.out.print("");
System.out.println("Your number < 100 is: " + userInput);
}
(我的输出与上面的测试1结果完全匹配,但我意识到我没有正确设置循环,因为当它执行第二次测试“-9”时,输出与我的第一次完全相同试验:)
Enter a number (<100):
Enter a number (<100):
Enter a number (<100):
Your number < 100 is: 25
(这是我第一周被介绍到循环中,我搜索了一些示例,但我没有找到许多“Do”while循环让我想起这个。如果有人有一些很好的提示或指南指向我,我将非常感激。)
答案 0 :(得分:0)
您不需要写三次System.out.println("Enter a number (<100):" );
。每次用户输入的值小于100时,它都会自动显示。您可以自己为userInput分配值,而不是从用户那里获取输入。你应该写下面给出的代码。
do {
System.out.println("Enter a number (<100):" );
userInput = scnr.nextInt();
} while (userInput > 100);
System.out.println("Your number < 100 is " + userInput);
答案 1 :(得分:0)
正如Juan的评论建议的那样,您没有阅读用户输入值。基本上,这是使用nextInt()
方法完成的。更重要的是,int
是原始类型,必须初始化。您选择值0.那么为什么不选择101以使它以不正确的值开始?然后你确定将触发while
循环:
public static void main(String... aArgs) {
Scanner sc = new Scanner(System.in);
// initialise at 101 to trigger the while loop
int userInput = 101;
// as we start at 101, it will enter the loop at least once
while (userInput > 100) {
System.out.println("Enter a number (<100):");
userInput = sc.nextInt();
}
System.out.println("Your number < 100 is: " + userInput);
}
2.1异常捕获
上述代码可能足以让您获得批准。但是,为了学习,我有一个基本的原则:从不信任用户!。如果是上一个示例,如果用户输入azerty
,那么您的程序会向您抛出InputMismatchException
。那是什么?此错误告诉您扫描程序预期int
并且您向他提供了其他内容:它会将其抛出。
一个简单的比喻是:扫描仪只能吃苹果。你给了他一个梨:他需要一点点然后把它扔掉:&#34; 我只能吃苹果&#34;。为了防止你的扫描仪呕吐,你可以问他:&#34; 尝试一下,如果这不是苹果,那就试试别的&#34;
在代码中,它提供了类似的内容:
public static void main(String... aArgs) {
Scanner sc = new Scanner(System.in);
// initialise at 101 to trigger the while loop
int userInput = 101;
// as we start at 101, it will enter the loop at least once
while (userInput > 100) {
// tell the scanner to try something
try {
System.out.println("Enter a number (<100):");
userInput = sc.nextInt();
}
// if the input is not a number, tell him do this this:
catch (InputMismatchException e) {
System.out.println("This is not a number!");
}
}
System.out.println("Your number < 100 is: " + userInput);
}
如果您不熟悉try/catch
条款,可以阅读this
2.1扫描仪喂食
以上代码不正在运行。怎么样?如果你输入一些不是数字的东西,比如&#34; aaaa&#34;,你就会有无限的
输入一个数字(&lt; 100):
这不是数字!
为什么呢?因为扫描仪没有输出你的输入。基本上,他要么应该吃梨(但他会呕吐)或扔到垃圾桶但是你从未告诉过他把它丢到垃圾箱里!扫描仪需要在尝试下一次输入之前使用输入。
简而言之:
userInput
从101开始,因此输入while
循环aaaa
。InputMismatchException
被抓住了。 &#34;这不是数字!&#34;打印出来aaaa
。如何解决这个问题?告诉扫描仪使用next()
消费输入:
public static void main(String... aArgs) {
Scanner scnr = new Scanner(System.in);
// initialise at 101 to trigger the while loop
int userInput = 101;
// as we start at 101, it will enter the loop at least once
while (userInput > 100) {
// tell the scanner to try something
try {
System.out.println("Enter a number (<100):");
userInput = scnr.nextInt();
}
// if the input is not a number, tell him do this this:
catch (InputMismatchException e) {
// consume the incorrect input with scnr.next()
// so that user can enter another input
System.out.println(scnr.next() + " is not a number!");
}
}
System.out.println("Your number < 100 is: " + userInput);
}