Hernan Diaz
Hernan Diaz

Reputation: 31

How to convert a do while loop to a while loop

How do I convert my do-while loop to a while loop?

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);

I tried to do while(notPesoOrYen==true && numAttempts < 3) then the statement but it did not work.

MY FULL CODE

package currencyconverter;

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

public class 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);
}

}

Upvotes: 1

Views: 13439

Answers (2)

jsurf
jsurf

Reputation: 189

Initialise your boolean variable outside while loop:

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;
};

Upvotes: 0

Dici
Dici

Reputation: 25950

while and do... while are almost the same, do... while simply performs an iteration before evaluating for the first time the exit condition, whereas while evaluates it even for the first iteration (so eventually the body of a while loop can never be reacher whereas a do... while body will always be executed at least once).

Your code snippet is not complete but I guess you didn't initialized notPesoOrYen to true before the loop and that's why it is not working. Finally, don't write while(notPesoOrYen==true && numAttempts < 3) but while(notPesoOrYen && numAttempts < 3), the == true comparison is unnecessary.

Upvotes: 2

Related Questions