由于我将while循环添加到我的小石头,纸和剪刀游戏中,它一直给我1号。
package steenpapierschaar1;
import java.util.Scanner;
/**
*
* @author T
*/
public class SteenPapierSchaar1 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int rock = 1 ; // waarde van Rock
int paper = 2; // waarde van paper
int scissor = 3;// waarde van scissor
int AI = 1 + (int) (Math.random() *3);// maakt int AI een random getal nog niet af moet een range in komen
Scanner KeyBoard = new Scanner (System.in);// naam scanner input
boolean playing = true;
String answer, answer2 = null;
while(playing = true){
System.out.println("choose 1 for rock, 2 for paper and 3 for scissor"); // string met keuze voor User
int UserChoice = KeyBoard.nextInt();// waarde van UserChoice
if (AI == 1 && UserChoice == 2 || AI == 2 && UserChoice == 3 || AI == 3 && UserChoice == 1) { // als de speler elke keer 1x hoger heeft wint hij de ronde
System.out.println("You WIN");// outprint met dat je gewonnen hebt en wat de computer doet
if (AI == 1)
System.out.println("The Computer did rock");
if (AI == 2)
System.out.println("The Computer did paper");
if (AI == 3)
System.out.println("The Computer did scissors");
}
else if (AI == 1 && UserChoice == 1 || AI == 2 && UserChoice == 2 || AI == 3 && UserChoice == 3) {
System.out.println("Draw");
if (AI == 1)
System.out.println("The Computer did rock");
if (AI == 2)
System.out.println("The Computer did paper");
if (AI == 3)
System.out.println("The Computer did scissors");
}
else if (AI == 1 && UserChoice == 3 || AI == 2 && UserChoice == 1 || AI == 3 && UserChoice == 2){
System.out.println("You Lose");
if (AI == 1)
System.out.println("The Computer did rock");
if (AI == 2)
System.out.println("The Computer did paper");
if (AI == 3)
System.out.println("The Computer did scissors");
}
}
}
}
答案 0 :(得分:1)
您的代码中存在一些问题。你有几个未使用的变量,如
int rock = 1 ; // waarde van Rock
int paper = 2; // waarde van paper
int scissor = 3;// waarde van scissor
应该是
final int ROCK = 1; // waarde van Rock
final int PAPER = 2; // waarde van paper
final int SCISSORS = 3;// waarde van scissor
并使用
if (AI == ROCK) ...
其他问题是while (playing == true)
注意=
是赋值运算符==
正在比较运算符。因此,在您的循环中,您实际上将true
分配给playing
,然后始终将其评估为true
。
为了避免在您错误地写=
而不是==
时出现此类问题,只需使用
while (playing){
}
如果用户想继续/退出游戏,你可能应该在每次游戏后询问。您也可以通过检查-1
可以代表"退出"等值来执行此操作。
另一个问题是你永远不会重新分配AI
内部循环的值,因此它的值不能改变,并且与程序开始时的值相同。所以也许移动你的
int AI = 1 + (int) (Math.random() * 3);
在while
循环开始时让AI
获得新值。
BTW2代替Math.random()*3
,这是一种神秘的,你可以使用Random
类及其nextInt(n)
方法,它将随机范围内的任何整数[0; n)
0
(包括)n
(不包括)。 也可以解释为[0; n-1]
。所以你的代码看起来像
Random r = new Random();
while(..){
int AI = r.nextInt(3) + 1; // +1 because we want to move range [0; 2] to [1; 3]
...
}
看起来你正在调用
if (AI == 1)
System.out.println("The Computer did rock");
if (AI == 2)
System.out.println("The Computer did paper");
if (AI == 3)
System.out.println("The Computer did scissors");
在你的每个赢/输/输条件中。在这种情况下,您可以简单地将其移出每个块,如
if (win conditions){
print win
}else if (draw condition){
print draw
}else if (lose condition){
print lose
}
<move code drawing computer hand here>
绘制条件看起来过于复杂。当AI
和UserChoice
相等如此简单时,看起来就是实现了绘制
if (AI == UserChoice)
可以取代
if (AI == 1 && UserChoice == 1 || AI == 2 && UserChoice == 2 || AI == 3 && UserChoice == 3)
您也可以使用modulo %
运算符简化您的其他条件。
答案 1 :(得分:0)
包含java.util.Random
并做两件事。
使用此功能:
public static int randAI() {
Random rand = new Random();
int randomNum = rand.nextInt((3 - 1) + 1) + 1;
return randomNum;
}
并在循环中添加:
while(playing = true){
AI = randAI();
//REST of your code
这样你的ai会在每次迭代时随机。
答案 2 :(得分:0)
因为Math.random()
会在0.0 to 1.0
之间给出值。
所以在大多数情况下
int AI = 1 + (int) (Math.random() *3);
对于您的子指令(int) (Math.random() *3)
,在大多数情况下,值为0
,因此AI
将为1
。
如javaDoc
中提到的那样public static double random()
返回带有正号的double值,大于或等于0.0且小于1.0。返回值是伪随机选择的,具有来自该范围的(近似)均匀分布。
您可以使用java.util.Random
答案 3 :(得分:0)
您永远不会为AI
设置新值。
因此,该值总是会重复使用,具体取决于您在程序启动期间设置的值。
还要确保初始化随机数生成器
Random rand = new Random();
然后在你的循环中,你可以调用
int randomNumber = rand.nextInt((max - min) + 1) + min;
最小值和最大值设置在您的范围内。
请参阅How do I generate random integers within a specific range in Java?有关详细说明。
答案 4 :(得分:0)
要回答您的问题,AI不会在while循环中进行更新。只需将AI变量初始化移动到while循环中即可。
int AI = 0;
while(playing = true){
AI = 1 + (int) (Math.random() *3);
System.out.println("choose 1 for rock, 2 for paper and 3 for scissor");