Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不重复的情况下简化代码?_Java - Fatal编程技术网

Java 如何在不重复的情况下简化代码?

Java 如何在不重复的情况下简化代码?,java,Java,我在做一个方法,用户轮流移除石头,有很多相同的代码重复,只是有一点不同(每个回合的用户名)。所以我想我可以把它变成半个长度的简单代码,但我不确定我怎么能做到。有没有一种方法可以在每次循环中只获取不同的用户名而不重复相同的代码两次?提前谢谢 int turn=0,n=0; while (stoneNum>0) { if(turn==2*n-1&&stoneNum>0) {System.out.println(p1.getName()+"'s turn - r

我在做一个方法,用户轮流移除石头,有很多相同的代码重复,只是有一点不同(每个回合的用户名)。所以我想我可以把它变成半个长度的简单代码,但我不确定我怎么能做到。有没有一种方法可以在每次循环中只获取不同的用户名而不重复相同的代码两次?提前谢谢

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;}
     }

将块放入循环:

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;
    }
  }
}
for(播放器p:Arrays.asList(p1,p2)){
int det=(p==p1)?2*n-1:2*n;
如果(回合==det&&stoneNum>0){
System.out.println(p.getName()+“’的回合-删除多少?:”;
移除=sc.nextInt();
s、 设置音调(移除);
stoneNum=stoneNum-s.removeStone();
showStones();

if(stoneNum使用一个额外变量
标志
删除重复代码

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;
        }
    }

使用一个保存当前用户的变量,或者将重复的代码放入一个方法中,并使用不同的参数调用它,怎么样?
for(Player p:Arrays.asList(p1,p2)){…您的代码,用p替换p1/p2..}
.turn是唯一不同的变量。找到一种方法将其传递到方法中。I/O不应该是该方法的一部分-不写入UI。@AndyTurner是正确的-我错过了播放器p1和p2。通常,如果重复了基本相似的代码体,那么它应该是一个子例程(=Java中的方法)。它操作的不同对象应作为参数传递。
stoneNum-=s.removeStone();