Как вызвать переменную из другой области? - PullRequest
0 голосов
/ 13 марта 2019

Я учу Java.Я из питона, так что сфера не была самой большой проблемой (по крайней мере, для меня это было просто).Я пытаюсь сделать простую программу квитанции.Мне нужно вызывать qualityOfService из метода ratingService () в конце моего чека (я оставляю комментарий там, где я этого хочу).Как бы я поступил так?Я читал в других местах о сферах, но это не очень помогает.Извините за мое форматирование, я знаю, как досадно читать ужасно написанный код.Заранее спасибо.

import java.util.Scanner;

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

        System.out.println("Enter your first name: ");
        String firstName = userInput.nextLine();

        System.out.println("Enter the cost of your meal: ");
        double mealCost = userInput.nextDouble();
        String dummy = userInput.nextLine();

        System.out.println("Enter the percentage of tip you want to leave: ");
        double tipPercentage = userInput.nextDouble();
        String dummy1 = userInput.nextLine();

        System.out.println("Enter the quality of service: ");
        int qualityOfService = userInput.nextInt();

        // calculate values
        double tipAmount = (double)mealCost * ((double)tipPercentage/100);
        double totalCost = (double)mealCost + (double)tipAmount;
        int numberOfTwentyDollarBills = (int)totalCost / 20;   

        // 
        System.out.println("Thank you " + firstName + " for choosing our resturant!");
        System.out.println("=========================================");
        System.out.println("Cost of Meal = " + mealCost);
        System.out.println("Percentage of tip = " + tipPercentage);
        System.out.println("Tip amount = " + tipAmount);
        System.out.println("Total cost of meal = " + totalCost);
        System.out.println("Total number of twenty dollar bills = " + numberOfTwentyDollarBills);
        System.out.println("Rating of your service = " + qualityOfService);
        System.out.println("=========================================");
        // calling ratingService() goes here.
    }

    // service rating method 
    public static void ratingservice() 
    {
        int qualityOfService = 1;
        if (qualityOfService == 1) {
            System.out.println("We are sorry you weren't happy with your serivce. Please let staff know if you have any concerns");
        }
        else if (qualityOfService == 2) {
            System.out.println("We are sorry you weren't happy with your serivce. Please let staff know if you have any concerns");
        }
        else if (qualityOfService == 3) {
            System.out.println("We are happy that you enjoyed your stay somewhat, please let staff know if you have any concerns.");
        }
        else if (qualityOfService == 4) {
            System.out.println("We are glad you enjoyed your stay! Please let our staff know if you have any concerns");
        }
        else {
            System.out.println("We are glad you enjoyed your stay! Please let our staff know if you have any concerns");
        }
    }
}

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вам нужно сделать qualityOfService параметром для метода ratingservice.

public static void ratingservice(int qualityOfService) {...}

А затем вызовите его в первом методе так:

ratingService(qualityOfService)

Это потому, что в Java мы должны передать все переменные, необходимые для метода, в метод в качестве параметров. Каждый метод имеет свою область видимости переменных, и для передачи переменной из одной области видимости (первый метод) в другую область видимости (второй метод) необходимо передать ее в качестве параметра.

Другим решением было бы создать переменную экземпляра в вашем классе, но, поскольку это статические методы, они не будут работать. Переменная экземпляра может использоваться всеми экземплярами (нестатическими) методами класса.

0 голосов
/ 13 марта 2019

Это потому, что вы объявляете qualityOfService внутри метода main(), поэтому он доступен ТОЛЬКО внутри этого метода, если вы хотите, чтобы он был доступен где-то еще, его нужно передать (эточто означает "сфера").Другой вариант предложенного решения - установить его на уровне класса следующим образом:

class Main {

    static int qualityOfService;

    public static void main(String[] args) 
    {
    ...stuff...
    qualityOfService = userInput.nextInt();
    ...
    }

    public static void ratingservice() 
    {
        if (qualityOfService == 1) {
            System.out.println("We are sorry you weren't happy with your serivce. Please let staff know if you have any concerns");
        }
        ...etc...
    }
}

В этом случае, поскольку вы объявили на уровне класса, даже если вы не't инициализируйте до тех пор, пока вы не используете метод main(), он доступен в любом (статическом) методе класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...