繁体   English   中英

如何从另一种方法调用局部变量?

[英]How do i call on a local variable from another method?

我想缩短我的方法,但是这样做时我的一些变量不起作用。 我应该对参数做些什么吗? 我的用户在底部拍卖.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");

}

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

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

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

这显然不起作用,因为您无法通过这种方式从 scopeTwo 中的 scopeOne 访问 myName。 你会得到一个编译时错误。 您可以通过多种方式解决此问题,但这是一个示例:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM