Java использует пользовательский ввод из других методов

#java #methods

#java #методы

Вопрос:

Я посетил другие вопросы, похожие на мои, но не нашел того, который применим ко мне.

Чтобы уменьшить мою строку кодов вместо копирования, вставляя этот процесс ввода в мой оператор if else. Я создал UInputs(); метод, который будет получать пользовательские данные. Поэтому я могу просто вызывать его всякий раз, когда это необходимо, но я не могу использовать введенные пользователем значения внутри 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 OPERATIONStt|nt|t[ ]tAdditiont|nt|t[-]tSubtractiont|nt|t[*]tMultiplicationt|nt|t[/]tDivisiont|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("================================nAdditionn");
        UInputs();
        double answer = num1   num2   num3   num4   num5;
        System.out.println("nSum : "   answer );
        System.out.println("================================n");
    }
    else if (Choice == '-') {//SUBTRACTION
        System.out.println("================================nSubtractionn");
        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. ваши переменные num являются локальными переменными. Вы можете объявить их на уровне класса как переменные экземпляра (или статические)

Ответ №1:

Не лучший ответ, который я мог бы придумать, но, безусловно, некоторые улучшения облегчают усвоение кода…

Я перешел UInputs на вызываемый метод calculate() . Теперь он принимает выбранную функцию в качестве входных данных, а затем запрашивает у пользователя 5 чисел. Затем функция применяется к 5 числам. Другим способом выполнения этого вычисления было бы запросить число у пользователя, вернуть его и последовательно применить функцию к возвращаемым числам, чтобы получить результат … это было бы лучше.

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

    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 OPERATIONStt|");
        System.out.println("t|t[ ]tAdditiontt|");
        System.out.println("t|t[-]tSubtractiontt|");
        System.out.println("t|t[*]tMultiplicationt|");
        System.out.println("t|t[/]tDivisiontt|");
        System.out.println("t|_______________________|n");
    }
}
  

Однако вам должно быть проще расширять / редактировать.

Вывод:

     _________________________
    |   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
  

Аналогично для вычитания:

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

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

Difference : -20.0
================================
  

Комментарии:

1. это лучшее. я просто понимаю, что мне предстоит пройти долгий путь, ха-ха

Ответ №2:

вы можете создать какой-то класс-оболочку

 class MyNumberWrapper {

  double num1;
  double num2;

}
  

тогда UInput будет выглядеть так

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

затем в вашей основной функции вы можете просто использовать MyNumberWrapper wrapper = UInput() и получать доступ ко всем переменным с wrapper.num1 помощью и т. wrapper.num2 Д

Комментарии:

1. для ответа вы должны хотя бы объяснить, в чем проблема

2. на самом деле первый комментарий под вопросом объясняет, в чем проблема — локальная переменная

3. да, я знаю, это мой комментарий. Я имел в виду: объясните, ПОЧЕМУ изменения, внесенные вами в код, решают проблему как часть вашего ответа. Простое предоставление кода для копирования вставки без достойного объяснения на самом деле ничему не научит OP