java - 我如何使用 math.random 但仅适用于某些值?

标签 java random switch-statement

这是我所拥有的(这只是我的整个代码的摘录):

int num = (int) Math.random()*100;
    switch(num)
    {
    case 0 : compChoice = "R";break;
    case 1 : compChoice = "P";break;
    case 2 : compChoice = "S";break;
    }

如何让它只得出 0、1 或 2 的随机数?

在我稍后的返回语句中,它说此处获取的字母导致“null”

如果有帮助的话,这是完整的代码:

import java.util.Scanner;
import static java.lang.System.*;

public class RockPaperScissors
{
private String playChoice;
private String compChoice;

public RockPaperScissors()
{



}

public RockPaperScissors(String player)
{
    playChoice = player;
}

public void setPlayers(String player)
{
    playChoice = player;
    int num = (int) Math.random()*100 %3;
    switch(num)
    {
    case 0 : compChoice = "R";break;
    case 1 : compChoice = "P";break;
    case 2 : compChoice = "S";break;
    }
    out.print(compChoice);
}

public String determineWinner()
{
    String winner="";

    if(playChoice == "R")
    {
        switch(compChoice)
        {
        case "R" : winner = "!Draw Game!";break;
        case "P" : winner = "!Computer wins <<Paper Covers Rock>>!";break;
        case "S" : winner = "!Player wins <<Rock Breaks Scissors>>!";break;
        }
    }
    else if(playChoice == "P")
    {
        switch(compChoice)
        {
        case "R" : winner = "!Player wins <<Paper Covers Rock>>!";break;
        case "P" : winner = "!Draw Game!";break;
        case "S" : winner = "!Computer wins <<Scissors Cuts Paper>>!";break;
        }
    }
    else if(playChoice == "S")
    {
        switch(compChoice)
        {
        case "R" : winner = "!Computer wins <<Rock Breaks Scissors>>!";break;
        case "P" : winner = "!Player wins <<Scissors Cuts Paper>>!";break;
        case "S" : winner = "!Draw Game!";break;
        }
    }
    return winner;
}

public String toString()
{
    String output="";

    output = "player had " + playChoice + "\n computer had " + compChoice + "\n " + determineWinner();

    return output;
}
}

这是我的运行者类(class),因为有人指出我没有在任何地方调用任何方法:

import java.util.Scanner;
import static java.lang.System.*;

public class Lab10d
{
public static void main(String args[])
{
    Scanner keyboard = new Scanner(System.in);
    char response;

    //add in a do while loop after you get the basics up and running

        String player = "";

        out.print("Rock-Paper-Scissors - pick your weapon [R,P,S] :: ");

        //read in the player value
        player = keyboard.next();

        RockPaperScissors game = new RockPaperScissors(player);
        game.determineWinner();
        out.println(game);
            while(response == response)
    {
        out.print("Rock-Paper-Scissors - pick your weapon [R,P,S] :: ");
        player = keyboard.next();
        game.setPlayers(player);
        game.determineWinner();
        out.println(game + "\n");
        out.println("would you like to play again? (y/n):: ");
        response = (char) keyboard.next();




    }

}
}

最佳答案

使用Modulo operator :

int num = (int) Math.random()*100 % 3;

Math.random() 返回 pseudo-random value 0 到 1 之间。

乘以 100 使其成为 0 到 100 之间的数字(带十进制值)。

转换为 (int) 会丢弃小数值 - 与 Math.floor() 相同(如果您的语言有此功能)。

模 3 是除以 3 的余数:例如,55/3 = 18 余 1(换句话说,(18 * 3) + 1 = 55)。

关于java - 我如何使用 math.random 但仅适用于某些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13280076/

相关文章:

java - Java 超时哈希表

java - 在布局和 ScrollView 底部添加按钮

java - 如何使用restTemplate获取真实的http代码和响应正文?

algorithm - 如何使用生成 [0.0, 1.0) 之间的 float 的随机生成器生成 [1, n] 之间的随机数

C词法分析器。使用开关分析和计算小数/非小数

java - 使用 JWT token 时 Spring Boot 安全上下文返回 null

python-3.x - 如何在Python3中随机生成未观察到的数据

使用不同参数调用函数会产生相同的输出。 (C)

c++ - 如何编译 Duff 的设备代码?

php - 带 CASE/WHEN 或开关的父/子 MySQL 查询