2016-12-14 5 views
0

Я пытаюсь вызвать три переменные, которые не входят в область моего метода. Класс Application вызывает класс Calculator для выполнения основных операций.Вызов переменной вне класса

Я знаю, что есть несколько способов сделать это, но то, что это самый основной способ вызова переменной операции и методы addNumbers, subtractNumbers, multiplyNumbers и divideNumbers от метода calculate() в Calcuator классе?

код для класса Application:

import java.util.Scanner; 

public class Application { 
    public static void main(String[] args){ 
    int quantity1; 
    int quantity2; 
    int operation; 
    Scanner userInput = new Scanner(System.in); 

    System.out.println("Please select one of the following operations: "); 
    System.out.println("1- Addition, 2-Subtraction, 3-Multiplication, 4-Division, 5-exit: "); 
    operation = userInput.nextInt(); 
    System.out.println("Please enter the first quantity: "); 
    quantity1 = userInput.nextInt(); 

    System.out.println("Please enter the second quantity: "); 
    quantity2 = userInput.nextInt(); 
    Calculator myCalculator = new Calculator(); 
    myCalculator.calculate(); 
    } 

    public void calculate() { 
    switch(operation) { 
     case 1: 
     System.out.println(addNumbers(quantity1, quantity2)); 
     case 2: 
     System.out.println(subtractNumbers(quantity1, quantity2)); 
     case 3: 
     System.out.println(multiplyNumbers(quantity1, quantity2)); 
     case 4: 
     System.out.println(divideNumbers(quantity1, quantity2)); 
     case 5: 
     System.exit(0); 
    }  
    } 
} 

код для класса Калькулятор:

package calculator; 

import java.util.Scanner; 

public class Calculator { 
    public int addNumbers(int A, int B){ 
    return A+B; 
    } 
    public int subtractNumbers(int A, int B){ 
    return A - B; 
    } 
    public int multiplyNumbers(int A, int B){ 
    return A * B; 
    } 
    public int divideNumbers(int A, int B){ 
    return A/B; 
    } 
} 

* Edit: мне нужно вызвать метод вычислить, исходя из класса Application.

+0

Вы не можете ссылаться на 'Calculate()' экземпляром из 'Calculator', он принадлежит классу' Application'. – haifzhan

+0

Хорошо, спасибо, я изменю это. – statsguyz

ответ

0
package com.company; 

import java.util.Scanner; 

public class Application { 
     private static int quantity1; 
     private static int quantity2; 
     private static int operation; 
     private Calculator myCalculator = new Calculator(); 

    public static void main(String[] args) { 
     Scanner userInput = new Scanner(System.in); 

     System.out.println("Please select one of the following operations: "); 
     System.out.println("1- Addition, 2-Subtraction, 3-Multiplication, 4-Division, 5-exit: "); 
     operation = userInput.nextInt(); 
     System.out.println("Please enter the first quantity: "); 
     quantity1 = userInput.nextInt(); 

     System.out.println("Please enter the second quantity: "); 
     quantity2 = userInput.nextInt(); 


     new Application().calculate(); 
    } 

    public void calculate() { 

     switch (operation) { 
      case 1: 

       System.out.println(myCalculator.addNumbers(quantity1, quantity2)); 

      case 2: 
       System.out.println(myCalculator.subtractNumbers(quantity1, quantity2)); 

      case 3: 
       System.out.println(myCalculator.multiplyNumbers(quantity1, quantity2)); 

      case 4: 
       System.out.println(myCalculator.divideNumbers(quantity1, quantity2)); 

      case 5: 
       System.exit(0); 
     } 

    } 
} 
  • переместил свои локальные переменные Quantity1, quantity2 и операции за пределами main() и сделать их статические переменные
  • переместилось myCalculator снаружи, а также.
  • вызова addNumbers, substractNumbers по myCalculator
  • Не изменились anyhting в классе Calculator

Вот мой результат:

Please select one of the following operations: 
1- Addition, 2-Subtraction, 3-Multiplication, 4-Division, 5-exit: 
1 
Please enter the first quantity: 
2 
Please enter the second quantity: 
2 
4 
0 
4 
1 

Внимание: ваш switch statement не работает, он печатает все операции приводят к тому, что вы не предоставили никаких break в любом случае, поэтому все операции были вытеснены yed, это называется blocks fall through. вам нужно сделать свою единственную работу по исправлению. Вот enter link description here может помочь вам

0

Я считаю, что метод calculate() должен был быть в классе Calculator, а не в классе Application, согласно вашему вопросу в фрагменте кода.

Используйте переменные экземпляра вместо локальных переменных метода и пометьте их как частные (также статические при доступе от статического метода). Таким образом вы можете установить значения с помощью соответствующих методов setter и fetch с использованием соответствующих методов getter в вашем классе Calculator, поскольку они будут публичными методами.

Это стандартная практика, называемая конвенцией JavaBean.

1

Не понимаю, почему вы структурировали свой код так, как сейчас. С моей точки зрения основное приложение отвечает за чтение трех входных значений (двух операндов и одного оператора). Он также может содержать экземпляр калькулятора.

Предположим, что метод вычисления перемещен непосредственно в Калькулятор и принимает эти три значения в качестве параметров. Затем калькулятор может выполнить операцию (на основе оператора/коммутатора) и вернуть результат.

Поскольку вы передаете три входа основного приложения в класс калькулятора, это должно решить вашу проблему.

0

Основной и элегантный способ - написать конструктор в вашем классе Calculator.

  • В основном методе, просто передать параметры operation, quantity1 и quantity2 в конструктор при создании экземпляра нового объекта myCalculator.
  • Вместо того, чтобы положить ваш метод calculate() в класс Application и, как указано в вашем описании, calculate() метод должен идти в Calculator класс.
  • Invoke calculate() метод, объявленный в Calculator класса

Отрывок из main(String[] args) метода

Calculator myCalculator = new Calculator(operation, quantity1, quantity2); 
myCalculator.calculate(); 

код для класса Калькулятор:

package calculator; 
import java.util.Scanner; 

public class Calculator { 
    // Add three private variable to indicate operation and operands 
    private int operand1; 
    private int operand2; 
    private int operation; 

    // You should write a constructor to take parameters read from Scanner 
    public Calculator(int operation, int quantity1, int quantity2){ 
     operand1 = quantity1; 
     operand2 = quantity2; 
     this.operation = operation; 
    } 

    public int addNumbers(int A, int B){ 
     return A+B; 
    } 
    public int subtractNumbers(int A, int B){ 
     return A - B; 
    } 
    public int multiplyNumbers(int A, int B){ 
     return A * B; 
    } 
    public int divideNumbers(int A, int B){ 
     return A/B; 
    } 

    // Your calculator method should goes here 
    public void calculate(){ 
     switch(operation){ 
     case 1: 
      System.out.println(addNumbers(operand1, operand2)); 
      break; 
     case 2: 
      System.out.println(subtractNumbers(operand1, operand2)); 
      break; 
     case 3: 
      System.out.println(multiplyNumbers(operand1, operand2)); 
      break; 
     case 4: 
      System.out.println(divideNumbers(operand1, operand2)); 
      break; 
     default: 
      break; 
     } 
    } 
} 
Смежные вопросы