Java数组在do/while循环中重置?

Java数组在do/while循环中重置?,java,Java,在上下文中,这是一个堆积游戏,用户选择数组中的一个元素,然后拿走一个指定的数字,选择最后一个计数器的那一个获胜。所以我的问题是循环,因为随着轮次的增加,do/while循环中的数组将重置并再次启动 do{ if(userPicked == 1){ System.out.println(player1 +" will start the game."); player1 = startingPlayer; player2 = secondPlayer; }else{

在上下文中,这是一个堆积游戏,用户选择数组中的一个元素,然后拿走一个指定的数字,选择最后一个计数器的那一个获胜。所以我的问题是循环,因为随着轮次的增加,do/while循环中的数组将重置并再次启动

do{
  if(userPicked == 1){
    System.out.println(player1 +" will start the game.");
    player1 = startingPlayer;
    player2 = secondPlayer;
  }else{
    System.out.println(player2+ " will start the game.");
    player2 = startingPlayer;
    player1 = secondPlayer;
  } //else
  gamesPlayed = gamesPlayed + 1; 
  System.out.println("The piles are.....");
  System.out.println("1 | " + piles [0]);
  System.out.println("2 | " + piles [1]);
  System.out.println("3 | " + piles [2]);
  System.out.println("4 | " + piles [3]);
  System.out.println("5 | " + piles [4]);


  do{  

    System.out.println(player2 + "First pick the pile you would like to minus from");
    System.out.println( "then pick the amount you would like to take away."); 
    int userPile = readInt ("What pile would you like to minus from");
    int userTokens = readInt("How many tokens would you like to take away");
    //the game goes below this 
    if(userPile == 1){
      System.out.println("1 | " + (piles [0] - userTokens));
      System.out.println("2 | " + piles [1]);
      System.out.println("3 | " + piles [2]);
      System.out.println("4 | " + piles [3]);
      System.out.println("5 | " + piles [4]);  
    }else if(userPile == 2){
      System.out.println("1 | " + piles [0]);
      System.out.println("2 | " + (piles [1] - userTokens));
      System.out.println("3 | " + piles [2]);
      System.out.println("4 | " + piles [3]);
      System.out.println("5 | " + piles [4]);  
    }else if(userPile == 3){
      System.out.println("1 | " + piles [0]);
      System.out.println("2 | " + piles [1]);
      System.out.println("3 | " + (piles [2] - userTokens));
      System.out.println("4 | " + piles [3]);
      System.out.println("5 | " + piles [4]);
    }else if(userPile == 4){
      System.out.println("1 | " + piles [0]);
      System.out.println("2 | " + piles [1]);
      System.out.println("3 | " + piles [2]);
      System.out.println("4 | " + (piles [3] - userTokens));
      System.out.println("5 | " + piles [4]);
    }else if(userPile == 5){
      System.out.println("1 | " + piles [0]);
      System.out.println("2 | " + piles [1]);
      System.out.println("3 | " + piles [2]);
      System.out.println("4 | " + piles [3]);
      System.out.println("5 | " + (piles [4] - userTokens));
    }else{
      System.out.println("An error occured"); 
    }//else

    System.out.println(player1 + "First pick the pile you would like to minus from");
    System.out.println( "then pick the amount you would like to take away."); 
    int userPile2 = readInt ("What pile would you like to minus from");
    int userTokens2 = readInt("How many tokens would you like to take away");
    //the game goes below this 
    if(userPile == 1){
      System.out.println("1 | " + (piles [0] - userTokens2));
      System.out.println("2 | " + piles [1]);
      System.out.println("3 | " + piles [2]);
      System.out.println("4 | " + piles [3]);
      System.out.println("5 | " + piles [4]);  
    }else if(userPile == 2){
      System.out.println("1 | " + piles [0]);
      System.out.println("2 | " + (piles [1] - userTokens2));
      System.out.println("3 | " + piles [2]);
      System.out.println("4 | " + piles [3]);
      System.out.println("5 | " + piles [4]);  
    }else if(userPile == 3){
      System.out.println("1 | " + piles [0]);
      System.out.println("2 | " + piles [1]);
      System.out.println("3 | " + (piles [2] - userTokens2));
      System.out.println("4 | " + piles [3]);
      System.out.println("5 | " + piles [4]);
    }else if(userPile == 4){
      System.out.println("1 | " + piles [0]);
      System.out.println("2 | " + piles [1]);
      System.out.println("3 | " + piles [2]);
      System.out.println("4 | " + (piles [3] - userTokens));
      System.out.println("1 | " + piles [4]);
    }else if(userPile == 5){
      System.out.println("1 | " + piles [0]);
          System.out.println("1 | " + piles [1]);
          System.out.println("1 | " + piles [2]);
          System.out.println("1 | " + piles [3]);
          System.out.println("5 | " + (piles [4] - userTokens));
        }else{
          System.out.println("An error occured"); 
        }//else  


      }while (piles [0] + piles [1] + piles [2] + piles [3] + piles [4] > 1 );
如果有人知道如何在两个玩家都进行了回合之后,保持数字不变,那就太好了。(另外,如果我们能将编程谈话保持在较低的水平,因为我只做了6周)


感谢您事先提供的帮助,这让我陷入了困境。

由于仍然没有答案,也没有所需的反馈(a),我只能建议一些编码方面的良好做法,帮助您避免,并最终找到问题的原因:

  • 避免长方法:最好在多个方法(通常是私有方法)之间进行功能分配。除此之外,这使您能够命名每个方法,因此,您会发现编码算法是可读的:
public void extractAllData(参数…)
{
if(validateParameters(…))
{
a=提取原始数据(…);
如果(存在二次数据(a))
{
b=提取二次数据(…);
}
}
返回a+b;
}

  • 尽量不要重复结构:如果两个代码块非常相似,只是在某些数字或表达式上不同,最好将它们提取到一个通用[私有]方法中,并将差异设置为该方法的参数。你会为自己节省很多时间

  • 不要使用显式常量对数组进行索引:
    a[0]、a[1]、a[2]
    等。使用变量进行索引:
    a[i]
    。而且,如果要遍历数组的所有元素,此变量必须是
    for
    循环的索引:

for(int i=0;i


这样,数组的长度就应该在初始化它的时候出现。从那时起,始终使用
array.length

在哪里声明
piles
?对于这个问题,包括所有相关的代码,并删除所有不必要的代码(如所有打印行)。使用静态ArrayList存储数据,并且永远不要使用do-while,goTo=)是一个糟糕的模板,最好使用通常的while循环。@Geisterkirche我不同意“永远不要使用do-while”。在许多情况下,do-while会导致代码更干净。对工作使用正确的结构。@Geisterkirche我几乎可以肯定你错了。我已经使用过很多次了,在将它们与正常的while循环进行比较后,发现它们更干净。如果它们没有产生更干净的代码,那么它们就被错误地使用了,这是作者的错,而不是构造的错。毫无疑问,长do-while循环会导致许多错误,长条件、短命名变量、大函数、太深的嵌套块,我认为do-whiles中没有任何漏洞不能在新手程序员手中承受其他逻辑结构的影响@Geisterkirche“简单到可以小于一个屏幕的高度”:我100%同意这一点,但这适用于所有的编码(并且没有理由离开do whiles appart)。虽然这更像是一个代码审查,但我同意。在过去的一年里,我学到的最大的一课就是学习将通用代码提取到函数中。一旦掌握了这一点,编写代码就变得非常容易。找出什么是不变的,什么是变化的,并从中发挥作用。