gpt4 book ai didi

java - 为什么当我递归调用函数时,它返回以前的值而不是新值?

转载 作者:太空宇宙 更新时间:2023-11-04 06:10:12 25 4
gpt4 key购买 nike

我必须编写一个程序来启动 2 个玩家,并将相同的 Dealer 实例传递给每个玩家。每位玩家发完 7 张牌后,每位玩家将自己的牌列表打印到一个文本文件中,文件名为玩家编号。

现在,在多米诺骨牌游戏中,两个玩家不能拥有相同的牌,即(玩家 1:2,4 和玩家 2:4,2)。

我使用了 boolean 标志的二维数组来控制这一点,但是每当我打印列表时,我发现 2 个或更多玩家具有相同的图 block 。另外,请注意,我必须使用线程来代表玩家。

这是我的 Player 的运行方法。每个玩家应该得到 7 block 。

public synchronized void run() {

try {
try (PrintWriter writer = new PrintWriter("Player " + player + ".txt")) {
for (int i = 0; i < 7; i++) {
Random r = new Random();
int a = r.nextInt(6);
int b = r.nextInt(6);
System.out.println("Player " + player + " is requesting a tile");
DominoTiles dealt = dealer.deal(a, b);
tiles[i] = dealt;

writer.println("Requesting Player " + player + ": ");
writer.println("Side 1 = " + tiles[i].getSide1() + " Side 2 = " + tiles[i].getSide2());

}
} catch (InterruptedException ex) {
Logger.getLogger(Player.class.getName()).log(Level.SEVERE, null, ex);
}

} catch (FileNotFoundException ex) {
Logger.getLogger(Player.class.getName()).log(Level.SEVERE, null, ex);
}

}

这是我的经销商的交易方法。如果函数进入 if block ,我将返回该函数;如果它进入 else if block ,我会再次调用它。问题是,我返回了使函数进入 else if block 的值!

 public synchronized DominoTiles deal(int a, int b) throws FileNotFoundException, InterruptedException {
DominoTiles dealt = new DominoTiles(a, b);
System.out.println("Dealer is dealing");

if ((count < 28 && check[a][b] == false)) {
System.out.println("Checking " + a + " " + b + ": " + check[a][b]);

System.out.println(a + " " + b + " has been dealt");

check[a][b] = true;
check[b][a] = true;
System.out.println("Checking now : " + check[a][b]);
count++;
System.out.println("Count = " + count);

} else if ((count < 28 && (check[a][b] == true || check[b][a] == true)) || (check[b][a] == true)) {
System.out.println("I tried to deal the same again!" + a + " " + b + " and it was " + check[a][b] + " " + check[b][a
]);
int c = r.nextInt(7);
int d = r.nextInt(7);
deal(c, d);
} else {
System.out.println("All tiles have been dealt");
System.exit(0);
}

return dealt;

}

最佳答案

这是因为您没有将递归调用 deal() 的结果分配给 dealt 变量。

修复:

public synchronized DominoTiles deal(int a, int b) throws  FileNotFoundException, InterruptedException {
DominoTiles dealt = new DominoTiles(a, b);
System.out.println("Dealer is dealing");

if ((count < 28 && check[a][b] == false)) {
System.out.println("Checking " + a + " " + b + ": " + check[a][b]);

System.out.println(a + " " + b + " has been dealt");

check[a][b] = true;
check[b][a] = true;
System.out.println("Checking now : " + check[a][b]);
count++;
System.out.println("Count = " + count);


} else if ((count < 28 && (check[a][b] == true || check[b][a] == true)) || (check[b][a] == true)) {
System.out.println("I tried to deal the same again!" + a + " " + b + " and it was " + check[a][b] + " " + check[b][a
]);
int c = r.nextInt(7);
int d = r.nextInt(7);
dealt = deal(c, d);
} else {
System.out.println("All tiles have been dealt");
System.exit(0);
}

return dealt;

}

关于java - 为什么当我递归调用函数时,它返回以前的值而不是新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28835553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com