全新的编码,所以很抱歉,如果这是一个基本的问题。我在做一个作业,用Java编写游戏战舰的代码。
我使用一个方法让用户输入坐标,然后保存这些坐标作为一个数组,以便在另一个方法中使用。我知道方法中的变量不能保存。
因此,我为该方法创建了一个返回值,然后在我的主类中创建了一个新变量,并设置为该方法的返回值。
public static char[][] player1ships() {
System.out.println("PLAYER 1, ENTER YOUR SHIPS' COORDINATES.");
Scanner input = new Scanner(System.in);
char[][] player1 = new char[5][5];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
player1[i][j] = '-';
}
}
for (int i = 1; i <= 5; ) {
System.out.println("Enter location for ship " + i);
int a = input.nextInt();
int b = input.nextInt();
if ((a >= 0 && a < 5) && (b >= 0 && b < 5) && (player1[a][b] == '-')) {
player1[a][b] = '@';
i++;
} else if ((a >= 0 && a < 5) && (a >= 0 && b < 5) && (player1[a][b] == '@'))
System.out.println("You can't place two or more ships on the same location");
else if ((a < 0 || a >= 5) || (b < 0 || b >= 5))
System.out.println("You can't place ships outside the " + 5 + " by " + 5 + " grid");
}
return player1;
}
我想运行这个方法,让用户输入坐标,然后保存返回数组,以便以后使用。然而,当我运行程序时,它似乎运行了两次方法,因为输出提示用户通过2个周期的“输入位置”。
当我在末尾添加测试行时,它确实在索引数组处打印了正确的符号,因此它似乎确实保存了更新后的数组。
那么,如何保存返回值作为变量,而不需要再次运行和打印整个方法呢?
public static void main(String[] args) {
char [][] strike = player1ships();
player1ships();
//test to see if array updated
System.out.println(strike[0][0]);
}
}
这是程序运行的结果.并通过player1ships方法两次而不是一次。
showing how it prompts user through two cycles before printing out the last line
4条答案
按热度按时间g6ll5ycj1#
如果你调用了一个方法,但没有对它的返回值做任何事情,Java不会抱怨,所以你实际上调用了
player1ships()
方法两次:和
您可以简单地删除
player1ships()
的第二个调用(没有赋值的那个),因为您不使用它的结果。643ylb082#
在main方法中删除/注解第二个方法调用并重新运行代码。它工作正常
希望它能正常工作?
x759pob23#
//mysql();
rqenqsqc4#
谢谢大家的帮助。我删除了第二个player 1 ships();方法在我的主方法中,代码工作得很好,也适当地保存了变量,以便在另一个方法中使用。我敢肯定我的格式是可怕的,有一个更好的方法来写这个程序,但我真的很感谢所有的帮助故障排除!
下面是我更新的代码: