Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在尝试将执行while循环转换为while循环_Java_Loops - Fatal编程技术网

Java 正在尝试将执行while循环转换为while循环

Java 正在尝试将执行while循环转换为while循环,java,loops,Java,Loops,我尝试将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

我尝试将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);
        }
    }
}
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();
}

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

这是因为您从未再次将变量初始化为y,因此在

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

“y”
再次初始化

并在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);
        }
    }
}
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();
}

Do While循环保证至少运行一次,而循环不运行。您将得到一个空白输出,因为您正在等待第11行的键盘输入,但您不能
do while
循环和
while
循环是不可互换的,至少没有额外的布尔变量。你为什么还要尝试?谢谢你的努力!我是否正确理解了if reach=keyboard.next();是在这里注释的,然后程序总是在这里自动为我键入“y”?它不会再改变
,所以你会遇到内联循环!