我正在为学校做作业,要求我们找到最大的十个数字。数字在0-9之间。我相信我得到了那个部分。我的问题是我正在尝试添加分配不需要的额外功能。我试图在boolean语句为false后让循环完全重启并给出错误消息。在我输入无效值后,它会给出错误消息,但在我按下“确定”后,它会继续显示下一个数字。我希望它在循环开始时重新开始。
以下是代码:
package Largest;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class LargestMain {
public static void main(String[] args) {
int number = 0;
String numStr = "";
int []myArray = new int[10];
int count = 1;
int largest = 0;
boolean valid = false;
while(valid == true); { // Loop to check validity
for(int i = 0; i < myArray.length; i++) {
myArray[i] = i + 1;
numStr = JOptionPane.showInputDialog("Please enter number " + count++ + ":");
number = Integer.parseInt(numStr); // Converts string value to integer
if(number >= largest) {
largest = number;
}
// If-Else if statements checks if values entered are equal to 0-9
if(number >= 0 && number <= 9) {
valid = true;
}
else if ((!(number >= 0 && number <= 9))) {
valid = false;
}
if (valid == false) {
JOptionPane.showMessageDialog(null, "INVALID INPUT...Try Again!!!", "Results", JOptionPane.YES_OPTION);
continue;
}
}
JOptionPane.showMessageDialog(null, "The Largest Number Is: " + largest, "Results", JOptionPane.PLAIN_MESSAGE);
}
}
}
我可以通过添加return来结束循环:
if (valid == false) {
JOptionPane.showMessageDialog(null, "INVALID INPUT...Try Again!!!", "Results", JOptionPane.YES_OPTION);
return;
}
我真的想学习如何从头开始重启循环。我尝试搜索不同的主题,但没有人帮助我解决我的问题。感谢您的帮助!
答案 0 :(得分:2)
要重新启动循环,您可以使用continue
关键字。 continue
将跳到下一个循环迭代。
当使用while循环时,它只是重新启动循环,因为循环没有结束直到valid
为真。当使用for循环时,它会跳到下一次迭代(所以如果你当前在索引5上并使用continue,它将转移到索引6而不是停留在5)。
对于嵌套循环,您可以标记循环以指定该语句的循环:
firstloop:
while(valid) {
secondloop:
while(true) {
continue firstloop;
}
}
此外,在检查布尔值时不需要== true
。它可以表示为
while(valid) {
}
至于检查错误valid == false
,您使用
while(!valid) {
}
答案 1 :(得分:1)
由于您是初学者并且正在尝试学习,因此我对您的代码进行了审核,并附上了一些可能对您有所帮助的评论。我在下面发布了更新的代码。
声明:您应该在最里面的闭包中声明一个需要它的变量。除largest
以外,所有其他人都可以进入for
。
您的数组变量没有意义。因为你在去的时候跟踪最大的,而不是在最后找到它。
控制:您的/loop to check validity/
需要严格遵循输入部分,而不是整个程序,因此您可以重复输入语句,直到您满意为止。
public static void main(String[] args)
{
int largest = 0;
for(int i = 1; i <= 10; i++)
{
boolean valid = false;
while (!valid)
{
String numStr = JOptionPane.showInputDialog("Please enter number " + i + ":");
int number = Integer.parseInt(numStr); //Converts string value to integer
if (number >= 0 && number <= 9)
{
valid = true;
}
else
{
JOptionPane.showMessageDialog(null, "INVALID INPUT...Try Again!!!", "Results", JOptionPane.YES_OPTION);
}
}
if (number > largest)
{
largest = number;
}
}
JOptionPane.showMessageDialog(null, "The Largest Number Is: " + largest, "Results", JOptionPane.PLAIN_MESSAGE);
}
答案 2 :(得分:0)
您可以使用带标签的继续:
firstloop:
while(valid){
secondloop:
for(int i=0; i<10; i++{
//something
if(something){
continue firstloop;
}
}
}
有关详细信息,请参阅documentation。
UPDATE:此外...您的if / else语句的else部分中不需要条件。只做一个else{ valid=false }
就等于你现在正在做的事情。另一种选择是进一步简化它并完全跳过if / else部分并且只有:
valid = number >= 0 && number <= 9
答案 3 :(得分:0)
编写递归函数,即调用自身的函数。
public static void DoSomething()
{
// optionally ask the user for input at this point before processing begins.
while(yourCondition)
{
// do your stuff.
}
// when execution reaches here the condition is no longer valid; start over.
if(conditionToStartOver)
DoSomething(); // start again
}
答案 4 :(得分:0)
你的逻辑几乎是正确的但你不应该在外循环中循环valid
。请记住,当输入无效时,您希望停止内部循环。通常情况下,外部循环会为用户提供退出程序的选项。
例如:
while(true) {
boolean valid = true;
for(...; ...; ...) {
...
if(number < 0 || 9 < number) {
valid = false;
break;
}
}
if(valid) {
// show largest input dialog
} else {
// show invalid input dialog
}
// optionally ask the user if they want to exit
// if so, break
}