如何从其他方法调用局部变量?

时间:2019-01-18 19:25:41

标签: java parameters local-variables

我想缩短我的方法,但是这样做时某些变量不起作用。我应该对参数做些什么?我的用户位于最底端的auction.makeBid(user,value);是不起作用的。

这是我在底部缩短另一种方法的新方法

    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;

这是我要实现代码的地方。在底部的即时通讯应该有可变的用户。

    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 :(得分:0)

不能使用在一个局部方法中声明的局部变量,而在另一个局部方法中使用它。 如果您想做一些减少代码的事情,请尝试在类范围而不是方法范围内声明变量。

答案 1 :(得分:0)

在Java中,括号之间有一些叫做“作用域”的东西。在一个作用域中创建的变量不能被另一个作用域访问。一个示例是您在此处使用的变量。您可以做的是,可以从另一个方法调用该方法并获取“用户”的返回值,也可以在一个范围内将变量作为另一个方法的参数传递。我将在下面用ar mini示例进行演示:

last_half

这显然是行不通的,因为您不能通过这种方式从scopeOne中的scopeOne访问myName。您将得到一个编译时错误。您可以通过多种方式解决此问题,但这是一个示例:

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

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

您可以将变量作为参数传递给方法,并使变量成为参数。这样,它可以在您尝试调用的方法的本地范围内。您可以做的另一件事是使User对象变量成为类或实例变量,然后在您的方法中对其进行更新。