gpt4 book ai didi

java - 如何解析变量?

转载 作者:行者123 更新时间:2023-12-02 05:00:22 33 4
gpt4 key购买 nike

我正在制作 Nim 游戏,并且正在添加单人游戏模式。为此,我创建了一个方法(不确定这是否是您所说的),并在用户回合结束时调用它。弹出一条错误消息:“变量未解析。”这是我的代码的放置吗?请帮忙。

我尝试再次创建变量,然后调用该变量。

这是到目前为止的代码:

import java.util.Scanner;
import java.util.Random;
public class nim {

public static void computerMove() {
Random randA = new Random();
int pcPilePick = randA.nextInt(10);

Object amtInPile;
if (pcPilePick == 1) {
amtInPile = stones1;
}
if (pcPilePick == 2) {
amtInPile = stones2;
}
if (pcPilePick == 3) {
amtInPile = stones3;
}
}

public static void main(String[] args) {
Scanner input = new Scanner(System.in);

System.out.println("Welcome!");
System.out.println("This is the game of Nim.");
System.out.println("[1]Single player or [2]multiplayer?");
String choice = input.nextLine();
int gameMode = Integer.parseInt(choice);

int stones1 = 9;// These variables will be used
int stones2 = 9;// in order to subtract a number
int stones3 = 9;// of stones from the pile.

int tStones = stones1 + stones2 + stones3;

while (tStones > 0) {
System.out.println("[1] Pile 1: " + stones1); //This stack will display
System.out.println("[2] Pile 2: " + stones2); //the stone count for
System.out.println("[3] Pile 3: " + stones3); //each pile after the first move.

System.out.println("From which pile would you like to take?");
String aMove = input.nextLine();
System.out.println("How many stones would you like to take?");
String bMove = input.nextLine();
int pilePick = Integer.parseInt(aMove);
int amtInPile = 0;
if (pilePick == 1) {
amtInPile = stones1;
}
if (pilePick == 2) {
amtInPile = stones2;
}
if (pilePick == 3) {
amtInPile = stones3;
}

int stonePick = Integer.parseInt(bMove);

/*All the while loops after this comment are
*used in order to prevent stupid answers.
*/
//legal move
//illegal move
if (pilePick > 3 || stonePick > amtInPile) {
System.out.println("But nothing happened!");

System.out.println("That move is invalid");
pilePick = 0;
stonePick = 0; // ensure that for an illegal move, nothing will change.
}
if (pilePick == 1) { //This stack of code will
stones1 = stones1 - stonePick;
}
if (pilePick == 2) { // subtract stones based on the
stones2 = stones2 - stonePick;
}
if (pilePick == 3) { // pile input and stone input.
stones3 = stones3 - stonePick;
}
tStones = stones1 + stones2 + stones3;
if (stones1 + stones2 + stones3 > 0) {
System.out.println("Taking " + stonePick + " stones from stack " + pilePick);
}
if (gameMode == 1) {
computerMove();
}

}
System.out.println("You lose!");
}

}

最佳答案

变量stones1stones2stones3仅在main方法中具有上下文,它们在内部未定义computerMove 方法

您可以将它们定义为static类变量,但这是不良习惯的开始,相反,修改computerMove方法来接受它需要的信息

public static void computerMove(int stone1, int stone2, int stone3) {
Random randA = new Random();
int pcPilePick = randA.nextInt(10);

Object amtInPile;
if (pcPilePick == 1) {
amtInPile = stones1;
}
if (pcPilePick == 2) {
amtInPile = stones2;
}
if (pcPilePick == 3) {
amtInPile = stones3;
}
}

现在调用computeMove会执行一些操作,但除了方法本身之外它没有上下文,因此您可能需要返回值

public static int computerMove(int stone1, int stone2, int stone3) {
//...
return amtInPile;
}

然后您可以在调用它的相同上下文中维护它......

int computerPile = 0;
//...
if (gameMode == 1) {
computerPile = computerMove(stones1, stones2, stones3);
}

看看Passing Information to a Method or a Constructor了解更多详情

关于java - 如何解析变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28334674/

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