#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