我正在制作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!");
}
}
答案 0 :(得分:2)
变量stones1
,stones2
和stones3
只有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);
}
答案 1 :(得分:0)
在方法computeMove
中第8行 - > 16行的if语句中,引用了未定义的变量stones1, stones2, stones3
。你需要声明这些变量来引用它们,或者将它们作为参数传递(这可能是你想要的)。
public static void computerMove(int stones1, int stones2, int stones3){
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;
}
}
并将第87行的函数调用更改为:
computerMove(stones1, stones2, stones3);