我如何从另一个方法调用局部变量?
How do i call on a local variable from another method?
我想缩短我的方法,但是这样做时我的一些变量不起作用。我应该对参数做些什么吗?我的用户在底部 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");
}
不能使用在一个本地方法中声明的局部变量并在另一个方法中使用它。
如果您想做一些事情来减少代码,请尝试在 class 范围而不是方法范围内声明变量。
在Java括号之间有叫做"scopes"的东西。在一个作用域中创建的变量不能被另一个作用域访问。一个示例是您在此处使用的变量。您可以做的是从另一个方法调用该方法并为 "user" 获取 return 值,或者您可以将一个范围内的变量作为另一个方法的参数传递。我将在下面用 ar mini 示例进行演示:
public static void scopeOne() {
String myName = "name";
}
public static void scopeTwo() {
System.out.println(myName);
}
这显然行不通,因为您无法通过这种方式从 scopeOne 和 scopeTwo 访问 myName。你会得到一个编译时错误。您可以通过多种方式解决这个问题,但这里有一个例子:
public static void scopeOne() {
String myName = "name";
scopeTwo(myName);
}
public static void scopeTwo(String myName) {
System.out.println(myName);
}
您可以将变量作为参数传递给方法,并使变量成为参数。这样它就可以在您尝试调用的方法的本地范围内。您可以做的另一件事是将 User 对象变量设为 class 或实例变量,然后在您的方法中更新它。
我想缩短我的方法,但是这样做时我的一些变量不起作用。我应该对参数做些什么吗?我的用户在底部 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");
}
不能使用在一个本地方法中声明的局部变量并在另一个方法中使用它。 如果您想做一些事情来减少代码,请尝试在 class 范围而不是方法范围内声明变量。
在Java括号之间有叫做"scopes"的东西。在一个作用域中创建的变量不能被另一个作用域访问。一个示例是您在此处使用的变量。您可以做的是从另一个方法调用该方法并为 "user" 获取 return 值,或者您可以将一个范围内的变量作为另一个方法的参数传递。我将在下面用 ar mini 示例进行演示:
public static void scopeOne() {
String myName = "name";
}
public static void scopeTwo() {
System.out.println(myName);
}
这显然行不通,因为您无法通过这种方式从 scopeOne 和 scopeTwo 访问 myName。你会得到一个编译时错误。您可以通过多种方式解决这个问题,但这里有一个例子:
public static void scopeOne() {
String myName = "name";
scopeTwo(myName);
}
public static void scopeTwo(String myName) {
System.out.println(myName);
}
您可以将变量作为参数传递给方法,并使变量成为参数。这样它就可以在您尝试调用的方法的本地范围内。您可以做的另一件事是将 User 对象变量设为 class 或实例变量,然后在您的方法中更新它。