要求是/否回到循环

时间:2011-08-06 04:56:54

标签: java loops

如果用户回答Y / y,我该如何回到尝试循环?我知道下面的代码不会要求用户你想再试一次(是/否)?。我目前只能使用bufferedReader。

import java.io.*;

public class Num10 {
    public static void main(String[] args){
        String in="";
        int start=0, end=0, step=0;

        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));


        try{
            System.out.print("Input START value = ");
            in=input.readLine();
            start=Integer.parseInt(in);
            System.out.print("Input END value = ");
            in=input.readLine();
            end=Integer.parseInt(in);
            System.out.print("Input STEP value = ");
            in=input.readLine();
            step=Integer.parseInt(in);
        }catch(IOException e){
            System.out.println("Error!");
        }

        if(start>=end){
            System.out.println("The starting number should be lesser than the ending number");
            System.exit(0);
        }else
        if(step<=0){
            System.out.println("The step number should always be greater than zero.");
            System.exit(0);
        }

        for(start=start;start<=end;start=start+step){
            System.out.println(start);
        }       

        System.out.println("\nDo you want to try again (Y/N)?");
    }
}

4 个答案:

答案 0 :(得分:7)

do ... while循环适用于此。

boolean again = false;
do
{
     // your code here
     again = askQuestion();
} while(again);

或者您可以使用常规while循环:

boolean again = true;
while(again)
{
    // your code here
    again = askQuestion();
}

对于这两者,askQuestion是另一种方法,它会向用户询问问题并返回truefalse

答案 1 :(得分:1)

使用do{..... }while();

像:

boolean again=true;
do{
    try{
    //your code
    }
    //your code
}while(again);

如果用户回答Y / y,我该如何回到try循环?
你不能回到try{.....}。你必须使用

public static void main(String... args){
    //your code
} 

而不是public static void main(String[] args){}
然后在您想要的代码位置使用main();

答案 2 :(得分:0)

  

如果用户回答Y / y,我该如何回到try循环?

try不会创建循环。这就是问题所在。

循环“自动返回”直到某些事情发生结束循环。这就是他们循环的原因。

所以你在try块周围放了一个实际的循环,并在循环结束时询问问题,如果用N / n回答(或者其他什么,你可以自己决定你是怎么回事)想要处理它,如果输入是一些其他垃圾)。 do - while循环是合适的,因为它会在结尾而不是开头检查其退出条件(例如whilefor)。

答案 3 :(得分:0)

Java有很多这样的工具。这些被称为“循环”。 Java中可用的循环是whiledo ... whileforfor ... each。 while循环是最简单的。它看起来像这样:

while (condition) {
    // Some code
}

基本上,我把“条件”放在你放置任何布尔值的地方。布尔值只是一个可以是truefalse的值,没有别的。在Java中,您可以创建boolean类型的变量,但通常情况下,您不会显式创建布尔值。

相反,您将使用条件语句。例如,x < yx == yx >= y都是“条件语句”。这意味着,最后,他们评估为布尔值。所以,在这段代码中:

int x = 1;
int y = 5;
if (x < y) {
    // Code
}

它所说的x < y,实际上是在幕后将其评估为true。布尔值很重要,并且在Java中的许多地方使用。

无论如何,回到循环的主题,让我们进入下一个循环do ... while。它看起来像这样:

do {
    // Code
} while (condition);

do ... whilewhile的工作方式相同,但总是至少运行一次,即使条件为false

forfor ... each稍微复杂一些。它们实际上只是捷径。请考虑以下代码:

int i = 0;
while (i < 10) {
    System.out.println("I is: " + i);
    i++;
}

这里,循环将运行10次,i将跟踪循环次数。 for循环可以做同样的事情,但是更简洁:

for (int i = 0; i < 10; i++) {
    System.out.println("I is: " + i);
}

该代码将执行与第一个代码相同的操作,但它使用for循环。如您所见,for循环有三个部分。在第一个中,您可以声明一个变量,在第二个中,您可以设置一个条件,在第三个中,您可以放置​​在循环的每次迭代中运行的内容。在迭代数组时经常使用for循环,但你可能还没有学过,所以不要担心。

for ... each循环比其他循环更复杂,所以如果你还没理解它,不要担心。基本上,它是获取列表的所有元素或Collections API中的任何内容的快速方法。例如,假设您有一个字符串列表,您可以使用它来获取列表中的所有字符串:

for (String string : aList) {
    System.out.println(string);
}

这将遍历列表中的每个字符串并将其打印出来。

无论如何,回到手头的问题。在这里,我们需要选择一个循环来使用,似乎最好的情况是一个简单的while循环。做这样的事情:

boolean condition = true;
while (condition) {

    // Your code

    try {
        while (true) { //Creates an infinite loop
            in = input.readLine();
            if (in.equalsIgnoreCase("y")) {
                condition = true;
                break;
            } else if (in.equalsIgnoreCase("n")) {
                condition = false;
                break;
            } else {
                System.out.println("Please enter either Y or N.");
            }
        }
    } catch (IOException e) {
        System.out.println("ERROR!");
    }

}

在这里,我们使用两个while循环。第一个包装整个代码,检查名为condition的布尔值。我们已将其初始化为true,因此循环将始终至少运行一次。其次,我做了另一个while循环。在这里,我做了while (true),这将永远运行。但是,您可以使用break关键字“中断”循环。我使用它的原因是用户有可能输入“y”或“n”以外的内容。在这种情况下,它应该再次问他们。如果它变为“Y”,则将condition设置为true并突破循环(这在技术上是不必要的,因为条件已经设置为true)。如果它变为“N”,则将其设置为false并突破循环。由于它现在是false,循环将退出,程序将结束。