随机数不断给出数字1

时间:2015-04-22 13:57:13

标签: java random int

由于我将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");
            }              

        }        
    }
}

5 个答案:

答案 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>

绘制条件看起来过于复杂。当AIUserChoice相等如此简单时,看起来就是实现了绘制

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");