user2620255
user2620255

Reputation: 137

java calculator loop not working properly

For some reason my calculator won't wait for user input to finish the do while loop. I'm very new to java coding (currently only been doing it for a few hours). I want the user to be able to do more math before the program closes instead of having to reopen it every time they want to use it (obviously I don't mean anything serious by this I just want to learn and I think this will help.

heres my code

import java.util.Scanner;


public class calculator {
public static void main(String[] args){
    double Answer;
    String op;
    double num1;
    double num2;
    String again;
    boolean yesorno = true;

            Scanner input = new Scanner(System.in);

             while (yesorno = true){
                System.out.print("What opperation would you like to preform? +,-,*,/, :");
                op = input.nextLine();
                System.out.print("What is the first number? : ");
                num1 = input.nextDouble();
                System.out.print("And the seccond number? : ");
                num2 = input.nextDouble();
                if (op.equals("+")) {
                    Answer = (num1 + num2);
                    System.out.println(Answer);

                } else if (op.equals("-")) {
                    Answer = num1 - num2;
                    System.out.println(Answer);

                } else if (op.equals("*")) {
                    Answer = num1 * num2;
                    System.out.println(Answer);

                } else if (op.equals("/")) {
                    Answer = num1 / num2;
                    System.out.println(Answer);

                }
                System.out.println("Would you like to do any more math?");
                again = input.nextLine();
                if (again.equals("yes")) {
                    yesorno = true;
                } else if (again.equals("no")) {
                    yesorno = false;
                    System.out.print("have a good day!");

                }
            } while (yesorno = true);       
}
}

please ignore the akward formatting at the beggining and end of this code.

Upvotes: 0

Views: 3564

Answers (4)

user6322020
user6322020

Reputation:

Try this....

public class Main {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    boolean status = true;
    while(status){

    String answer = "";
    String choise = "";

    System.out.println("\"WELCOME TO JAVA CALCULATOR\"");

    Scanner scn = new Scanner(System.in);
    Scanner cal = new Scanner(System.in);
    Scanner cho = new Scanner(System.in);

    System.out.println("Enter the numers one by one that you want to calculate..");
    int numA = scn.nextInt();
    int numB = scn.nextInt();
    int result = 0;
    System.out.println("What you want to calculate...?");
    answer = cal.nextLine();

    if(answer.equals("+")){
        result = numA+numB;}
    if(answer.equals("-")){
        result = numA-numB;}
    if(answer.equals("*")){
        result = numA*numB;}
    if(answer.equals("/")){
        result = numA/numB;}
    System.out.println( "The result of " + numA + " and " + numB + " is : " + result);
    System.out.println("Do you want to continue.....(y) or (n)?");
    choise = cho.nextLine();

    if(choise.equalsIgnoreCase("y")){
        System.out.println("Welcome back.....:)\n\"Make By Saikat Halder\"");
        status = true;}
    if(choise.equalsIgnoreCase("n")){
        System.out.println("Good bye....Thanks for useing java Calculator......:)");
        System.exit(0);

        }
    }
}

}

Upvotes: 0

nachokk
nachokk

Reputation: 14413

1) while(yesorno = true ) you are doing assignation change to while(yesorno == true) to prevent this thing you can use yoda style while(true = yesorno) then a compile error would throw cause you can't assign something to a value. Or even more simpler just use while(yesorno)

2) Follow Java Code Convention , variable names are in lower case.

3)if this block get executed while (yesorno = true); you will have an infinite loop.

4) If you are using java 7 , you can do switch over strings

             switch(op){
             case "+":answer = num1 + num2;break;
             case "-":answer = num1 - num2;break;
             case "*":answer = num1 * num2;break;
             case "/":answer = num1 / num2;break;
             default: throw new IllegalArgumentException("Invalid operation "+ op);
             }
             System.out.println(answer);

Upvotes: 1

Kenyakorn Ketsombut
Kenyakorn Ketsombut

Reputation: 2122

There were many errors, I have fixed it and commented it for you. Hope it helps:

import java.util.Scanner;

// KK: by general convention class names should always start with an upper case letter
public class calculator {
    public static void main(String[] args) {
        double Answer; //KK: local variable should be lower case
        String op;
        double num1;
        double num2;
        String again;
        boolean yesorno = true;

        Scanner input = new Scanner(System.in);

        //KK: for comparing you need the double-equals
        //KK: the loop will be executed as long as the expression is true, so for a boolean you don't need it at all
        //KK: you can use either of the following:
        // while (yesorno == true)
        // while (yesorno)
        while (yesorno) {
            System.out.print("What opperation would you like to preform? +,-,*,/, :");
            op = input.nextLine();
            System.out.print("What is the first number? : ");
            num1 = input.nextDouble();
            System.out.print("And the seccond number? : ");
            num2 = input.nextDouble();
            if (op.equals("+")) {
                Answer = (num1 + num2);
                System.out.println(Answer);

            } else if (op.equals("-")) {
                Answer = num1 - num2;
                System.out.println(Answer);

            } else if (op.equals("*")) {
                Answer = num1 * num2;
                System.out.println(Answer);

            } else if (op.equals("/")) {
                Answer = num1 / num2;
                System.out.println(Answer);

            }
            System.out.println("Would you like to do any more math?");
            //KK: you need to call nextLine twice because you printed 2 lines here
            //KK: otherwise again will be empty, so yesorno will always be true and you have an endless loop
            again = input.nextLine();
            again = input.nextLine();
            if (again.equals("yes")) {
                yesorno = true;
            } else if (again.equals("no")) {
                yesorno = false;
                System.out.print("have a good day!");
            }
        }
        // KK: the following line was an empty loop, that didn't do anything, so I commented it
        // while (yesorno = true);

    }
} //KK: this one was missing at the end too ;)

(I started my comments with KK, so you see them and can remove them later.)

Upvotes: 0

kevinsa5
kevinsa5

Reputation: 3411

You are assigning, not testing for equality in while (yesorno = true){. You should use while (yesorno == true){, since the double equals (==) tests for equality.

Upvotes: 1

Related Questions