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

Я хочу сократить свой метод, но при этом некоторые из моих переменных не работают.Должен ли я что-то сделать с параметрами?Мой пользователь внизу auction.makeBid (пользователь, стоимость);это тот, который не работает.

Это мой новый метод, чтобы сократить другой внизу

    private User checkUser() {
    System.out.println("Enter the name of the user>");
    String nameUser = inputToString();

    User user = null;
    for (User userName : users) {
        if (userName.getName().equalsIgnoreCase(nameUser)) {
            user = userName;
            return user;
        }
    }
        System.out.println("Error: no such user");
        return null;

Здесь я хочу реализовать код.Внизу я должен иметь переменную user.

    private void makeBid() {
    User u = checkUser();

    System.out.println("Enter the name of the dog");
    String nameDog = inputToString();
    Dog dogsname = null;
    for (Dog dogsName : registerDog) {
        if (dogsName.getName().equalsIgnoreCase(nameDog)) {
            dogsname = dogsName;
            break;
        }
    }
    if (dogsname == null) {
        System.out.println("Error: this dog is not up for auction");
        return;
    }

    Auction auction = null;
    for (Auction auctionsMany : auctions) {
        if (auctionsMany.getDog().equals(dogsname)) {
            auction = auctionsMany;
            break;
        }
    }

    if (auction == null) {
        System.out.println("Error no auction");
        return;
    }

    Bid b = auction.getHighestBid();
    int min;
    if (b == null) {
        min = 1;
    } else {

        min = b.getAmountBid() + 1;
    }

    int value = 0;
    do {
        System.out.println("Enter a bid");
        value = input.nextInt();
        input.nextLine();
        if (value < min) {
            System.out.println("Error to low bid");
        }
    } while (value < min);

    auction.makeBid(user, value);
    System.out.println("Bid made");

}

Ответы [ 2 ]

0 голосов
/ 18 января 2019

В Java есть вещи, называемые "областями видимости" между круглыми скобками. Переменная, созданная в одной области, не может быть доступна из другой области. Примером является переменная, которую вы используете здесь. Что вы можете сделать, так это то, что вы можете либо вызвать метод из другого метода и получить возвращаемое значение для «пользователя», либо передать переменную в одной области видимости в качестве параметра для другого метода. Ниже я продемонстрирую пример с ar mini:

public static void scopeOne() {
    String myName = "name";
}

public static void scopeTwo() {
    System.out.println(myName);
}

Это, очевидно, не будет работать, потому что вы не можете получить доступ к myName из scopeOne в scopeTwo таким образом. Вы получите ошибку во время компиляции. Вы можете решить эту проблему различными способами, но вот один из примеров:

public static void scopeOne() {
    String myName = "name";
    scopeTwo(myName);
}

public static void scopeTwo(String myName) {
    System.out.println(myName);
}

Вы можете передать переменную методу в качестве аргумента и сделать переменную параметром. Таким образом, он может находиться в локальной области метода, который вы пытаетесь вызвать. Еще вы можете сделать переменную объекта User переменной класса или экземпляра, а затем обновить ее в своих методах.

0 голосов
/ 18 января 2019

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

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