我想缩短我的方法,但是这样做时某些变量不起作用。我应该对参数做些什么?我的用户位于最底端的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");
}
答案 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对象变量成为类或实例变量,然后在您的方法中对其进行更新。