Java 在整个程序中修改整数值

Java 在整个程序中修改整数值,java,Java,我正在爪哇制作战舰。我已经到了比赛的最后阶段,但我不知道如何在玩家/电脑被“击中”时减少玩家数量。有没有办法修改x和y,这样如果它们减少到4,int值不会重置为5 我环顾四周,知道int值不能用这种方式修改,但我读了一些关于使用包装器类的内容?不知道这是否适用于这里? 我还考虑过将int值更改为char数组,并使用类似于a-e的东西,然后将字母转换为ascII表并从中减少,但这似乎不是很有效。 在当前的方式下,我试图使游戏我不能返回int值,因为在我的playersTurn方法中,它有可能返回x

我正在爪哇制作战舰。我已经到了比赛的最后阶段,但我不知道如何在玩家/电脑被“击中”时减少玩家数量。有没有办法修改x和y,这样如果它们减少到4,int值不会重置为5

我环顾四周,知道int值不能用这种方式修改,但我读了一些关于使用包装器类的内容?不知道这是否适用于这里? 我还考虑过将int值更改为char数组,并使用类似于a-e的东西,然后将字母转换为ascII表并从中减少,但这似乎不是很有效。 在当前的方式下,我试图使游戏我不能返回int值,因为在我的playersTurn方法中,它有可能返回x或y,并且您只能返回1个正确的值

如果Tl:Dr,简单地说,我需要一种方法来减少x和y,使值保持在新的整数。5->4->3->2->1->游戏结束。 下面是简化的代码。谢谢大家!

public static void main(String[] args) {
   int x = 5; //PlayersShips
   int y = 5; //ComputersShips
   play(field, x, y);

}

public static void play(char[][] field, int x, int y){
   while(x != 0 || y != 0) {
        playersTurn(field, x, y);
        computersTurn(field, x, y);
        }
}

public static void computersTurn(char[][] field, x, y){

   //Computer randomly chooses an x and y coordinate to 'attack'. 
   //The '&' symbol is the player's ships

   if(field[x][y] == '&') {
      x--;
}

这就是您正在做的:在方法的范围内更改x的值

要解决此问题,可以让方法返回int:

或者,您可以在类级别声明x,但不建议这样做:


你测试代码了吗?x-将x从5设置为4。。。这不是你想要的吗?还有,为什么不把x重命名为numShips呢?使用有意义的变量名。它确实将其设置为4,但随后它会“重置”,并且只会将其从5->4更改,然后再次从5->4更改。在我的程序中,它们被命名为playerships和computersShips,但为了便于阅读,我在这里更改了它。@ericmcgrandle无法从方法调用的方法内部更改调用方的变量/值。但您可以使用类和字段来存储可由多个组件使用/更改的值。然而,在这种情况下,你不需要这些信息,因为你可以简单地在棋盘上查看一个玩家有多少艘船。我理解代码的第一部分,只是在方法的范围内对其进行更改。我很难返回值,因为在我的实际程序中,在其中一个方法中有两个可能的返回值。要么玩家击中自己的飞船,玩家飞船,要么他们击中电脑飞船,电脑飞船。在类级别声明它的问题是,它希望它是一个静态引用,我不完全理解,并将继续阅读,但当我尝试时,它仍然并没有将其更改为超过4。也就是说,它从未达到3、2或1。谢谢你的回复@然后ericmcgrandle将其声明为static:static int x=5;我可能做错了什么,但即使在类级别声明为static,它也只能从5->4开始,然后在5重置。另外,出于好奇,为什么不建议在类级别声明它?@ericmcgrandle如果您修改您的问题,将代码包含在任何人都可以复制/粘贴并运行的文档中,那么会更容易提供帮助。另外,请查看:我将完整代码上传到github。链接是主要问题。
public static void main(String[] args) {
  int x = 5;

  decrement(x);
}

public static void decrement(int new_x) {
  new_x--;
  // now, new_x = 4... but if we don't return a value,
  // x remains unchanged
}
public static void main(String[] args) {
  int x = 5;

  x = decrement(x); // we now return x-1, and set x to this new value
}

public static void decrement(int new_x) {
  return x--;
}
static int x = 5;

public static void main(String[] args) {        
  decrement(); // no need to pass in anything now
}

public static void decrement() {
  x--; // x is now 4 in every method in this class
}