如何将do while循环转换为while循环

时间:2014-09-15 23:01:44

标签: java loops while-loop do-while

如何将do-while循环转换为while循环?

int numAttempts = 0;

do
{
    System.out.println("Do you want to convert to Peso or Yen?");
    pesoOrYen = readKeyboard.nextLine();

    if(pesoOrYen.equalsIgnoreCase("Peso")||pesoOrYen.equalsIgnoreCase("Yen"))
    {
        notPesoOrYen = false;
    }
    else if (numAttempts < 2)
    {
        System.out.println("Sorry, but '"+pesoOrYen+"' is not a valid currency type. Try again:");
        notPesoOrYen = true; 
    }

    numAttempts++;

} while(notPesoOrYen==true && numAttempts < 3);

我尝试while(notPesoOrYen==true && numAttempts < 3)然后声明,但它没有用。

我的完整代码

package currencyconverter;

import java.util.Scanner; import java.text.NumberFormat;

公共类CurrencyConverter {

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

    double doubleUsersCaptial;
    boolean notPesoOrYen=true;
    String pesoOrYen;
    double usersConvertedCapital;
    boolean userInputToRunProgramAgain=true;

    final double US_DOLLAR_TO_PESO = 13.14;
    final double US_DOLLAR_TO_YEN  = 106.02;


    do
    {

        System.out.println    ("How much money in US dollars do you have?");
        String usersCaptial    = readKeyboard.nextLine();
        doubleUsersCaptial = Double.parseDouble(usersCaptial);

        int numAttempts = 0;

        do
        {
            System.out.println    ("Do you want to convert to Peso or Yen?");
            pesoOrYen      = readKeyboard.nextLine();



            if(pesoOrYen.equalsIgnoreCase("Peso")||pesoOrYen.equalsIgnoreCase("Yen"))
            {
                notPesoOrYen = false;
            }
            else if (numAttempts < 2)
            {
                System.out.println("Sorry, but '"+pesoOrYen+"' is not a valid currency type. Try again:");
                notPesoOrYen = true; 

            }
        numAttempts++;
        }while(notPesoOrYen==true && numAttempts < 3);

        if(numAttempts==3)
        {
            System.out.println("Sorry, but '"+pesoOrYen+"' is not a valid currency type.");
            System.out.println("You entered the wrong currency type too many times\nGood Bye");
            System.exit(0); 
        }

        if (pesoOrYen.equalsIgnoreCase("Peso"))
        {
            usersConvertedCapital = doubleUsersCaptial*US_DOLLAR_TO_PESO;
        }
        else 
        {
            usersConvertedCapital = doubleUsersCaptial*US_DOLLAR_TO_YEN;
        }


        NumberFormat formatter     = NumberFormat.getCurrencyInstance();
        String formatUsersCaptial = formatter.format(doubleUsersCaptial);
        String formatUsersConvertedCapital  = formatter.format(usersConvertedCapital);


        System.out.println(formatUsersCaptial+"US Dollars = "
                          +formatUsersConvertedCapital+" "+pesoOrYen);
        System.out.println("Would you like to run the Program Again?(enter 'yes' or 'no')");
        String runProgramAgain = readKeyboard.nextLine();


        if (runProgramAgain.equalsIgnoreCase("yes"))
        {
            userInputToRunProgramAgain = true;
        }
        else if (runProgramAgain.equalsIgnoreCase("no"))
        {
            System.out.println("Goood Bye");
            System.exit(0);    
        }

        else
        {
            System.out.println ("You entered something other than 'yes' or 'no'\n"
                               +"Good Bye");
            System.exit(0);
        }
    }while (userInputToRunProgramAgain==true);
}

}

2 个答案:

答案 0 :(得分:0)

whiledo... while几乎相同,do... while只是在第一次评估退出条件之前执行迭代,而while评估它甚至是第一次迭代(所以最终while循环的主体永远不能被访问,而do... while主体总是至少执行一次。)

您的代码段不完整,但我猜您在循环之前未将notPesoOrYen初始化为true,这就是它无效的原因。最后,不要写while(notPesoOrYen==true && numAttempts < 3)而是while(notPesoOrYen && numAttempts < 3)== true比较是不必要的。

答案 1 :(得分:0)

在循环中将您的布尔变量初始化:

int numAttempts = 0;
boolean notPesoOrYen=true;
while (notPesoOrYen && numAttempts < 3) {
    System.out.println("Do you want to convert to Peso or Yen?");
    pesoOrYen = readKeyboard.nextLine();

    if (pesoOrYen.equalsIgnoreCase("Peso") || pesoOrYen.equalsIgnoreCase("Yen")) {
        notPesoOrYen = false;
    } else if (numAttempts < 2) {
        System.out.println("Sorry, but '" + pesoOrYen + "' is not a valid currency type. Try again:");
        notPesoOrYen = true; 
    }
    ++numAttempts;
};