如何简化代码而不重复?

时间:2019-04-03 11:41:07

标签: java

我当时正在制定一种方法,用户轮流去掉石头,重复很多相同的代码,只是一件事是不同的(每回合的用户名)。所以我认为我可以将其变成一半长度的简单代码,但是我不确定如何做到这一点。有没有办法在每个回合中仅获得不同的用户名而无需重复两次相同的代码?预先感谢

int turn=0,n=0;
while (stoneNum>0)
{   
  if(turn==2*n-1&&stoneNum>0)
 {System.out.println(p1.getName()+"'s turn - remove how many? : ");
     remove = sc.nextInt();
     s.setStone(remove); 
     stoneNum = stoneNum-s.removeStone();
     showStones();
     if (!(stoneNum>0))turn=1;
     if (!(stoneNum>0)) break;}


if(turn==2*n&&stoneNum>0)
{System.out.println(p2.getName()+"'s turn - remove how many? : ");
       remove = sc.nextInt();
       s.setStone(remove);
      stoneNum = stoneNum-s.removeStone();
      showStones();
      if (!(stoneNum>0))turn=2;
      if (!(stoneNum>0))break;}
     }

2 个答案:

答案 0 :(得分:2)

将您的代码块放入循环中

for (Player p : Arrays.asList(p1, p2)) {
  int det = (p == p1) ? 2 * n - 1 : 2 * n;
  if (turn == det && stoneNum > 0) {
    System.out.println(p.getName() + "'s turn - remove how many? : ");
    remove = sc.nextInt();
    s.setStone(remove);
    stoneNum = stoneNum - s.removeStone();
    showStones();
    if (stoneNum <= 0) {
      turn = (p == p1) ? 1 : 2;
      break;
    }
  }
}

答案 1 :(得分:0)

使用一个额外的变量flag删除重复的代码。

int turn = 0, n = 0;
    int flag=0;
    while (stoneNum > 0)

    {
        if (turn == 2 * n - 1 && stoneNum > 0) {
            System.out.println(p1.getName() + "'s turn - remove how many? : ");
            flag=1;
        } else if (turn == 2 * n && stoneNum > 0) {
            System.out.println(p2.getName() + "'s turn - remove how many? : ");
            flag=2;
        }
        remove = sc.nextInt();
        s.setStone(remove);
        stoneNum = stoneNum - s.removeStone();
        showStones();
        if (!(stoneNum > 0)) {
            turn = flag;
            break;
        }
    }