Welcome to the Java Programming Forums

The professional, friendly Java community. 21,500 members and growing!

The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.

>> REGISTER NOW TO START POSTING

Members have full access to the forums. Advertisements are removed for registered users.

# Thread: (Beginner's calculator) Additional calculation after first result...

1. ## (Beginner's calculator) Additional calculation after first result...

Sorry for this crap disguised as a code. Just about finished learning loops...

This is a simple calculator and I have to do one more calculation after the initial calculation (i.e. 120 + 23 = 123, - 33 = 90)

```import java.util.Scanner;

public class Calc {

public static void main(String[] args) {

Scanner input = new Scanner (System.in);

double first, sec, third, result;

String symbol;

System.out.print("Enter the first value: ");
first=input.nextDouble();
System.out.print("Enter your operator (+,-,*,/): ");
symbol=input.next();
System.out.print("Enter the second value: ");
sec=input.nextDouble();

Scanner input2 = new Scanner(System.in);

switch(symbol){
case "+":
result = first + sec;
System.out.println(result);

String another;
System.out.print ("Enter another operator (+,-,*,/): ");
another=input2.next();
System.out.print(("Enter the third value: "));
third=input2.nextDouble();

switch(another){
case"+":
System.out.println(result + third);
break;
case"-":
System.out.println(result-third);
break;
case "*":
System.out.println(result*third);
break;
case "/":
System.out.println(result/third);
break;
default:
System.out.println("What the hell?");
break;
}

case "-":
result = first - sec;

System.out.println(result);
System.out.print ("Enter another operator (+,-,*,/): ");
another=input2.next();
System.out.print(("Enter the third value: "));
third=input2.nextDouble();

switch(another){
case"+":
System.out.println(result+third);
break;
case"-":
System.out.println(result-third);
break;
case "*":
System.out.println(result*third);
break;
case "/":
System.out.println(result/third);
break;
default:
System.out.println("What the hell?");
break;
}

case "*":
result = first * sec;
System.out.println(result);
System.out.print ("Enter another operator (+,-,*,/): ");
another=input2.next();
System.out.print(("Enter the third value: "));
third=input2.nextDouble();

switch(another){
case"+":
System.out.println(result+third);
break;
case"-":
System.out.println(result-third);
break;
case "*":
System.out.println(result*third);
break;
case "/":
System.out.println(result/third);
break;
default:
System.out.println("What the hell?");
break;
}

case "/":
result=first/sec;
System.out.println(result);
System.out.print ("Enter another operator (+,-,*,/): ");
another=input.next();
System.out.print(("Enter the third value: "));
third=input.nextDouble();

switch(another){
case"+":
System.out.println(result+third);
break;
case"-":
System.out.println(result-third);
break;
case "*":
System.out.println(result*third);
break;
case "/":
System.out.println(result/third);
break;
default:
System.out.println("What the hell?");
break;
}
default:
System.out.println("What the hell?");
break;
}
}
}```

I'll never look at a calculator the same way again after this...wow.

I can get the result, but:

(a) displays a weird result after the answer after the correct second calculation (i.e. 12 + 5 = 17.0 - 2, 15.0 7.0 OR 4 / 2 = 2.0 * 8 = 16.0 What the hell?)

(b) it doesn't break like it should after the second calculation. It doesn't end unless "what the hell" comes out.

I'm thinking both are resulting from the same mistake; bracket problem (in switch(another)), but I can't point exactly where and how to fix it...

A few other Q's:

(1) Is there any way to put numeric operations (i.e. +,-) on the same line as my numbers? For example, make 2 + 3 runnable with an intended outcome instead of asking for 2, 3, then +?

(2) How do I make this code better? I know using switch within a switch is 99.99% of the time a big No-No...but I just couldn't find an alternative to get the result at my current level of knowledge (toenail-deep).

2. ## Re: (Beginner's calculator) Additional calculation after first result...

A suggestion: Add the value of the variable that caused the default: case to be executed to the error message so you can see what the computer saw and understand what the code is doing.

3. ## The Following User Says Thank You to Norm For This Useful Post:

skw4712 (January 30th, 2013)

4. ## Re: (Beginner's calculator) Additional calculation after first result...

It doesn't display any error message...It's a logic error...But I just can't seem to pinpoint where...

--- Update ---

Wow. Wow. I forgot to put breaka at the end of each cases under switch(symbol). Found the problem as I was writing comments from top-down to see what the problem was...

New code:

```package calc;

import java.util.Scanner;

public class Calc {

public static void main(String[] args) {

Scanner input = new Scanner (System.in);

double first, sec, third, result;

String symbol;

System.out.print("Enter the first value: ");
first=input.nextDouble(); //First value enterable
System.out.print("Enter your operator (+,-,*,/): ");
symbol=input.next(); //Operator enterable, will be using switch loop
System.out.print("Enter the second value: ");
sec=input.nextDouble(); //Second value enterable

Scanner input2 = new Scanner(System.in); //input for under switch(symbol)

switch(symbol){
case "+": //when + is entered as an operator
result = first + sec;
System.out.println(result);

String another;
System.out.print ("Enter another operator (+,-,*,/): ");
another=input2.next(); //2nd set of operator
System.out.print(("Enter the third value: "));
third=input2.nextDouble(); //Third value enterable

switch(another){
case"+":
System.out.println(result + third); //Add the third value
break;
case"-":
System.out.println(result-third);
break;
case "*":
System.out.println(result*third);
break;
case "/":
System.out.println(result/third);
break;
default:
System.out.println("What the hell?");
break;
}
break; //BREAK THE CASE "+"

case "-":
result = first - sec;

System.out.println(result);
System.out.print ("Enter another operator (+,-,*,/): ");
another=input2.next();
System.out.print(("Enter the third value: "));
third=input2.nextDouble();

switch(another){
case"+":
System.out.println(result+third);
break;
case"-":
System.out.println(result-third);
break;
case "*":
System.out.println(result*third);
break;
case "/":
System.out.println(result/third);
break;
default:
System.out.println("What the hell?");
break;
}
break;

case "*":
result = first * sec;
System.out.println(result);
System.out.print ("Enter another operator (+,-,*,/): ");
another=input2.next();
System.out.print(("Enter the third value: "));
third=input2.nextDouble();

switch(another){
case"+":
System.out.println(result+third);
break;
case"-":
System.out.println(result-third);
break;
case "*":
System.out.println(result*third);
break;
case "/":
System.out.println(result/third);
break;
default:
System.out.println("What the hell?");
break;
}
break;

case "/":
result=first/sec;
System.out.println(result);
System.out.print ("Enter another operator (+,-,*,/): ");
another=input.next();
System.out.print(("Enter the third value: "));
third=input.nextDouble();

switch(another){
case"+":
System.out.println(result+third);
break;
case"-":
System.out.println(result-third);
break;
case "*":
System.out.println(result*third);
break;
case "/":
System.out.println(result/third);
break;
default:
System.out.println("What the hell?");
break;
}
break;
default:
System.out.println("What the hell?");
break;
}

}
}```

I still do want to find out 2 questions: 1. Is there a way to include numeric operator in the same line and still get the result? (ask in one line instead of having to separate values and an operator) 2. Is there a better alternative to my code (other loop, etc)?

5. ## Re: (Beginner's calculator) Additional calculation after first result...

Is there a way to include numeric operator in the same line and still get the result?
Are you asking if the user can enter: 3.4 + 7 and then press Enter?
Have you tried it?

I see that the code still does NOT show the value of the input that caused the error message to be printed.

6. ## The Following User Says Thank You to Norm For This Useful Post:

skw4712 (January 30th, 2013)

7. ## Re: (Beginner's calculator) Additional calculation after first result...

1st: Yes and yes. I have a problem enabling Java to recognize certain characters in a string (like capitalizing each word in a string, or math operators in this case). This whole substring (what we learned) thing baffles me...can't grasp the concept

2nd: This is my output:

Enter the first value:
Enter the operator (+,-,*,/):
Enter the second value:
RESULT SHOWN
Enter the operator (+,-,*,/):
Enter the third value:
RESULT SHOWN

I got the result that I wanted...There was no error message. Thank you for so much for helping out, though!

8. ## Re: (Beginner's calculator) Additional calculation after first result...

It seems like a lot of code to comlete your task alright. You could try a few else if statments to get the same results.

```if (symbol.equals("+")) {
result = first + second;
} else if (symbol.equals("-")) {
result = first - second;
} else if   etc ......
System.out.println(result);

if(another.equals("+")) {
total = result + third;
} else if (another.equals("-")) {
total = result - third;
} else if   etc .......

System.out.println(first+" "+symbol+" "+second +" = "+result+" "+another+" "+third+" = "+total);```

wrote this on tablet so just showed you the bear bones, hope you can take something from this.
give me shout if you have any questions.

9. ## The Following User Says Thank You to dave_alan For This Useful Post:

skw4712 (January 30th, 2013)