0

I visited other questions similar to mine but did not find the one that is applicable to me.

To lessen my line of codes instead of copy pasting that input process to my if else statement. I created a UInputs(); method that will get user inputs. So I can just call it whenever it is needed but i cant use the user inputted values inside UInputs().

import java.util.Scanner;

public class Calculator {
    public static void UInputs(){
        double num1, num2, num3, num4, num5;
        Scanner scan = new Scanner(System.in);
        System.out.print("1st Number: ");
        num1 = scan.nextDouble();
        System.out.print("2nd Number: ");
        num2 = scan.nextDouble();
        System.out.print("3rd Number: ");
        num3 = scan.nextDouble();
        System.out.print("4th Number: ");
        num4 = scan.nextDouble();
        System.out.print("5th Number: ");
        num5 = scan.nextDouble();
    }

    
    public static void main (String[] args){
    char Choice;
    double num1, num2, num3, num4, num5;

    System.out.println("\t_________________________________\n");
    System.out.println("\t|\tMATH OPERATIONS\t\t|\n\t|\t[+]\tAddition\t|\n\t|\t[-]\tSubtraction\t|\n\t|\t[*]\tMultiplication\t|\n\t|\t[/]\tDivision\t|\n");
    System.out.println("\t|_______________________________|\n");
    System.out.print("\nEnter you Choice: ");
    Scanner scan = new Scanner(System.in);
    Choice = scan.nextLine().charAt(0);

    if ( Choice == '+') {//ADDITION
        System.out.println("================================\nAddition\n");
        UInputs();
        double answer = num1 + num2 + num3 + num4 + num5;
        System.out.println("\nSum : " + answer );
        System.out.println("================================\n");
    }
    else if (Choice == '-') {//SUBTRACTION
        System.out.println("================================\nSubtraction\n");
        System.out.print("1st Number: ");
        num1 = scan.nextDouble();
        System.out.print("2nd Number: ");
        num2 = scan.nextDouble();
        System.out.print("3rd Number: ");
        num3 = scan.nextDouble();
        System.out.print("4th Number: ");
        num4 = scan.nextDouble();
        System.out.print("5th Number: ");
        num5 = scan.nextDouble();
        double answer = num1 - num2 - num3 - num4 - num5;
        System.out.println("\nDifference : " + answer );
        System.out.println("================================\n");
    }
1
  • 3
    your num variables are local variables. You can declare them on class level as instance (or static) variables Commented Oct 2, 2020 at 12:26

2 Answers 2

1

Not the best answer I could have come up with but certainly some improvements to make the code easier to digest...

I changed UInputs to a method called calculate(). It now takes the function selected as input and then asks the user for 5 numbers. The function is then applied to the 5 numbers. Another way to perform this calculation would be to request a number from the user, return it, and sequentially apply the function to the returned number(s) to get a result... this would be nicer.

import java.util.Scanner;

public class Calculator {
    private static final Scanner scan = new Scanner(System.in);

    /**
    * My initial thought here was that UInputs should return values
    * and these should be cumulatively totalled. 
    * There's no need to hold the inputs in memory since 
    * once they're consumed, they're not longer needed.
    */
    public static double calculate(char functionToApply) {
        double[] inputs = new double[5];

        // works for number of inputs up to 20 - could just print "number i: " here for simplicity. 
        for (int i=0; i<inputs.length; i++) {
            String promptMessage = (i+1) + "";  // number
            // postfixture (st, nd, rd, th)
            switch (i+1) {
                case 1: promptMessage = promptMessage+"st"; break;
                case 2: promptMessage = promptMessage+"nd"; break;
                case 3: promptMessage = promptMessage+"rd"; break;
                default: promptMessage = promptMessage+"th"; break;
            }
            System.out.print(promptMessage + " Number: ");
            inputs[i] = scan.nextDouble();
        }

        double result = 0;
        for (int i=0; i<inputs.length; i++) {
            switch (functionToApply) {
                case '+': result = result + inputs[i]; break;
                case '-': result = result - inputs[i]; break;
            }
        }
        return result;
    }

    public static void main(String[] args) {

        displayMenu();
        
        char function;
        System.out.print("\nEnter your Choice: ");
        function = scan.nextLine().charAt(0);

        String heading = "";
        String lineLabel = "";
        switch (function) {
            case '+':
                heading = "Addition";
                lineLabel = "Sum";
                break;
            case '-':
                heading = "Subtraction";
                lineLabel = "Difference";
                break;
        }

        System.out.println("================================\n" + heading + "\n");
        System.out.println("\n" + lineLabel + " : " + calculate(function));
        System.out.println("================================\n");
    }

    private static void displayMenu() {
        System.out.println("\t_________________________");
        System.out.println("\t|\tMATH OPERATIONS\t\t|");
        System.out.println("\t|\t[+]\tAddition\t\t|");
        System.out.println("\t|\t[-]\tSubtraction\t\t|");
        System.out.println("\t|\t[*]\tMultiplication\t|");
        System.out.println("\t|\t[/]\tDivision\t\t|");
        System.out.println("\t|_______________________|\n");
    }
}

This should be easier for you to extend/edit though.

Output:

    _________________________
    |   MATH OPERATIONS     |
    |   [+] Addition        |
    |   [-] Subtraction     |
    |   [*] Multiplication  |
    |   [/] Division        |
    |_______________________|


Enter your Choice: +
================================
Addition

1st Number: 1
2nd Number: 2
3rd Number: 3
4th Number: 4
5th Number: 5

Sum : 15.0
================================


Process finished with exit code 0

Similarly for subtraction:


Enter your Choice: -
================================
Subtraction

1st Number: 10
2nd Number: 9
3rd Number: 1
4th Number: 0
5th Number: 0

Difference : -20.0
================================
Sign up to request clarification or add additional context in comments.

1 Comment

this is the best. i just realize that i have a long way to go haha
0

you can create some kind of wrapper class

class MyNumberWrapper {

  double num1;
  double num2;

}

then UInput will look like this

public static MyNumberWrapper UInputs(){
    MyNumberWrapper wrapper = new MyNumberWrapper();
    Scanner scan = new Scanner(System.in);
    System.out.print("1st Number: ");
    wrapper.num1 = scan.nextDouble();
    System.out.print("2nd Number: ");
    wrapper.num2 = scan.nextDouble();
    return wrapper;
}

then in your main function you can just use MyNumberWrapper wrapper = UInput() and access all variables with wrapper.num1, wrapper.num2 etc

3 Comments

for an answer, you should at least explain what the issue is
actually first comment under the question explains what the problem is - local variable
yes, I know, it's my comment. I meant: explain WHY the changes you made in the code solve the issue as part of your answer. Just providing code to copy paste without a decent explanation won't really teach the OP anything

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.