无法保存Java中方法的返回值,而不重新运行方法

093gszye  于 2023-10-14  发布在  Java
关注(0)|答案(4)|浏览(122)

全新的编码,所以很抱歉,如果这是一个基本的问题。我在做一个作业,用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

g6ll5ycj

g6ll5ycj1#

如果你调用了一个方法,但没有对它的返回值做任何事情,Java不会抱怨,所以你实际上调用了player1ships()方法两次:

char [][] strike = player1ships();

player1ships();

您可以简单地删除player1ships()的第二个调用(没有赋值的那个),因为您不使用它的结果。

643ylb08

643ylb082#

在main方法中删除/注解第二个方法调用并重新运行代码。它工作正常

{
   public static void main(String[] args) {
        char [][] strike = player1ships();
                
        
        player1ships();     ----> this line

        
        //test to see if array updated
        System.out.println(strike[0][0]);
        
    }
}

希望它能正常工作?

x759pob2

x759pob23#

public static void main(String[] args) {
    char [][] strike = player1ships();

     //This line of yours is superfluous and should be commented out

//mysql();

//test to see if array updated
    System.out.println(strike[0][0]);

}
rqenqsqc

rqenqsqc4#

谢谢大家的帮助。我删除了第二个player 1 ships();方法在我的主方法中,代码工作得很好,也适当地保存了变量,以便在另一个方法中使用。我敢肯定我的格式是可怕的,有一个更好的方法来写这个程序,但我真的很感谢所有的帮助故障排除!
下面是我更新的代码:

public static void main(String[] args) {
    char [][] strike = player1ships();
    
    char [][] boardhit1 = battle(strike);
    
    
    //test to see if array updated
    System.out.println(strike[0][0]);
    System.out.println(boardhit1[0][0]);

相关问题