记录用户输入以影响if语句java

时间:2015-04-12 05:39:11

标签: java loops if-statement user-input

我想知道如何解决这个问题。我想说的是,每当用户输入“纸张”时,它就会增加一个计数,当计数为3或以上时,计算机会为下一个选择剪刀。我的代码在这里,我想知道我是否朝着正确的方向前进。

 double PC = Math.random();

 String User = UI.askString("Enter choice: ");
 int paper = 0;
 paper ++;
 int finalCount = 0;

 UI.clearGraphics();

 if(PC < 0.3333 || paper > 3){ 
    UI.drawImage("scissors-left.jpg", 100, 100);
    UI.drawString("PC chose scissors", 100, 90);

    if(User.equalsIgnoreCase("rock")){
         UI.drawImage("rock-right.jpg", 300, 100);
         UI.drawString("you win", 300, 90);
         finalCount = finalCount + 1;


        }

    if(User.equalsIgnoreCase("scissors")){
         UI.drawImage("scissors-right.jpg", 300, 100);
         UI.drawString("tie", 300, 90);
         finalCount = finalCount + 0;


        }   

    if(User.equalsIgnoreCase("paper")){
         UI.drawImage("paper-right.jpg", 300, 100);
         UI.drawString("you lose", 300, 90);
         finalCount = finalCount - 1;
         paper ++;

    }

}

else if(PC > 0.667){ 
     UI.drawImage("rock-left.jpg", 100, 100);
     UI.drawString("PC chose rock", 100, 90);
    if(User.equalsIgnoreCase("rock")){
         UI.drawImage("rock-right.jpg", 300, 100);
         UI.drawString("tie", 300, 90);
         finalCount = finalCount + 0;


        }

    if(User.equalsIgnoreCase("scissors")){
         UI.drawImage("scissors-right.jpg", 300, 100);
         UI.drawString("you lose", 300, 90);
         finalCount = finalCount - 1;


        }   

    if(User.equalsIgnoreCase("paper")){
         UI.drawImage("paper-right.jpg", 300, 100);
         UI.drawString("you win", 300, 90);
         finalCount = finalCount + 1;
         paper++;

    }

}
else{ 
     UI.drawImage("paper-left.jpg", 100, 100);
     UI.drawString("PC chose paper", 100, 90);
    if(User.equalsIgnoreCase("rock")){
         UI.drawImage("rock-right.jpg", 300, 100);
         UI.drawString("you lose", 300, 90);
         finalCount = finalCount - 1;


        }

    if(User.equalsIgnoreCase("scissors")){
         UI.drawImage("scissors-right.jpg", 300, 100);
         UI.drawString("you win", 300, 90);
         finalCount = finalCount + 1;



        }   

    if(User.equalsIgnoreCase("paper")){
         UI.drawImage("paper-right.jpg", 300, 100);
         UI.drawString("tie", 300, 90);
         finalCount = finalCount + 0;
         paper ++;

    }

}

return finalCount;
}

谢谢:)

1 个答案:

答案 0 :(得分:0)

程序中有很多重复的代码。当你有这么多重复时,你应该寻找避免重复的方法。

例如,您测试User是否等于"rock",如果它是真的,则您绘制"rock-right.jpg"。但是无论PC是什么,这个测试以及绘制图像的代码都是相同的。因此,您可以将其移出if测试PC的{​​{1}},然后执行此操作,然后再说if (PC < 0.3333 || paper > 3)

if(User.equalsIgnoreCase("rock")){
     UI.drawImage("rock-right.jpg", 300, 100);
}
else if (User.equalsIgnoreCase("scissors")) {
     UI.drawImage("scissors-right.jpg", 300, 100);
}
else if (User.equalsIgnoreCase("paper")) {
     UI.drawImage("paper-right.jpg", 300, 100);
}

然后您可能会发现自己甚至不需要if语句,因为您每次都使用几乎相同的参数重复drawImage:< / p>

UI.drawImage(User.toLowerCase() + "-right.jpg", 300, 100);

所以9个drawImage来电已减少到1个。

你可以做的另一件事是不要用这么多if来检查岩石,纸张,剪刀的每种组合。假设我们将每个字符串翻译成一个数字,其中rock = 0,paper = 1,scissors = 2。这是一个表格,显示每个组合的获胜者:

PC     \ User |  rock=0  |  paper=1  | scissors=2
rock=0        |   Tie    |   User    |   PC
paper=1       |   PC     |   Tie     |   User
scissors=2    |   User   |   PC      |   Tie

请注意,这些行遵循一种模式:当您转到下一行时,&#34;赢家&#34;值向右旋转一个位置(右侧的值向左移动),此模式一直向下(OK,只有一行)。但是每当你看到这种模式时,你应该考虑使用%(modulo)运算符来找到答案。在这种情况下,它将像这样工作:

if (PC == User)
    it's a tie
else if ((PC + 1) % 3 == User)
    the user wins
else
    the PC wins

这适用于所有9种组合,它们应该大量简化代码,而不是嵌套if语句的9种组合。