java - 尝试将 do-while 循环转换为 while 循环

标签 java loops

我尝试将 do-while 转换为 while 循环并编译程序,但没有任何反应。 原始的 do-while 循环代码:

import java.util.Scanner;

public class CoinFlip
{
    public static void main( String[] args )
    {
        Scanner keyboard = new Scanner(System.in);

        String coin, again;
        int flip, streak = 0;

        do
        {
            flip = 1 + (int)(Math.random()*2);

            if ( flip == 1 )
                coin = "HEADS";
            else
                coin = "TAILS";

            System.out.println( "You flip a coin and it is... " + coin );

            if ( flip == 1 )
            {
                streak++;
                System.out.println( "\tThat's " + streak + " in a row...." );
                System.out.print( "\tWould you like to flip again (y/n)? " );
                again = keyboard.next();
            }
            else
            {
                streak = 0;
                again = "n";
            }
        } while ( again.equals("y") );

        System.out.println( "Final score: " + streak );
    }
}

在我尝试从 do-while 循环执行 while 循环后的样子:

import java.util.Scanner;

public class CoinFlip2
{
    public static void main( String[] args )
    {
        Scanner keyboard = new Scanner(System.in);

        String coin, again;
        int flip, streak = 0;
        again = keyboard.next();
        //flip = 1 + (int) (Math.random()*2);

        while ( again.equals("y") )
        {
            flip = 1 + (int) (Math.random()*2);
            if ( flip == 1)
            {
                coin = "HEADS";
            }
            else
            {
                coin = "TAILS";
            System.out.println( "You flip a coin and it is..." + coin );
            }
            if ( flip == 1)
            {
                streak++;
                System.out.println("\tThat's " + streak + " in a row....");
                System.out.print( "\tWould you like to flip again (y/n)? ");
                //again = keyboard.next();
            }
            else
            {
                streak = 0;
                again = "n";
            }
            System.out.println( "Final score: " + streak);
        }
    }
}

代码编译没有问题,但运行后我看到空白输出。

最佳答案

那是因为你从未将again变量初始化为y,所以它永远不会匹配进入while的条件

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);

    String coin, again = "y";
    int flip, streak = 0;
    // flip = 1 + (int) (Math.random()*2);

    while (again.equals("y")) {
        flip = 1 + (int) (Math.random() * 2);
        if (flip == 1) {
            coin = "HEADS";
        } else {
            coin = "TAILS";
            System.out.println("You flip a coin and it is..." + coin);
        }
        if (flip == 1) {
            streak++;
            System.out.println("\tThat's " + streak + " in a row....");
            System.out.print("\tWould you like to flip again (y/n)? ");
            again = keyboard.next();
            // again = keyboard.next();
        } else {
            streak = 0;
            again = "n";
        }
    }
    System.out.println("Final score: " + streak);
    keyboard.close();
}

输出:

That's 1 in a row....
Would you like to flip again (y/n)? y
You flip a coin and it is...TAILS
Final score: 0

关于java - 尝试将 do-while 循环转换为 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33563727/

相关文章:

java - 有没有办法在 Eclipse 中自动附加非 JRE 包的 Javadoc?

javascript - 数组中最后一项的行为异常

VBA:带有 INDEX MATCH 的循环不会转到下一个值

linux - 连续循环 SQlite3 数据库,当查询找到前 3 个运行脚本时

java - Java 中的排列然后排序

java - 如何让Java进程使用多个CPU核心

java - 如何传递对抽象类的引用 - Java

java - Spring Jdbc 模板中频繁重置连接

java - 返回有向图中每个顶点的边数 (jgrapht)

javascript - 设置循环以解析 JSON 响应