首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何才能只对某些值使用math.random?

我如何才能只对某些值使用math.random?
EN

Stack Overflow用户
提问于 2012-11-08 07:27:18
回答 4查看 2.6K关注 0票数 0

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

代码语言:javascript
复制
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的随机数?

在我后面的一个return语句中,它说这里获取的字母结果是一个"null“

如果有帮助,下面是完整的代码:

代码语言:javascript
复制
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;
}
}

下面是我的runner类,因为有人指出我没有在任何地方调用任何方法:

代码语言:javascript
复制
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();




    }

}
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-08 07:30:37

使用Modulo operator

代码语言:javascript
复制
int num = (int) Math.random()*100 % 3;

Math.random()返回一个介于0和1之间的pseudo-random value

乘以100会得到一个介于0和100之间的数字(带有十进制值)。

强制转换为(int)会丢弃十进制值-与Math.floor()相同,如果您的语言中有该值的话。

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

票数 2
EN

Stack Overflow用户

发布于 2012-11-08 08:11:09

Math.random()返回一个介于0和1之间的浮点值。

如果将其乘以3,则得到一个介于0和3之间的浮点值。

如果将浮点值转换为整数,则会得到0、1或2。

int v = (int) (Math.random() * 3);

如果你害怕简单的乘法运算,这里有一个java.util.Random类。您可以执行以下操作:

代码语言:javascript
复制
/** Re-usable source of random numbers */
private Random rand = new Random();

/** Choose a value of 0, 1, or 2 */
public int myChoice() {
    int v = rand.nextInt(3);
    return v;
}

使用Random实例允许您插入更高级的随机数生成器,如果您打算进行随机实验,这将是必要的。

票数 2
EN

Stack Overflow用户

发布于 2012-11-08 07:52:19

基于不同的评论,我想尝试另一种方法。我只是将您的代码复制到我的IDE中,并运行它。

代码语言:javascript
复制
public class NewMain {
    public static void main(String[] args) {
        int num;
        String compChoice = "";
        for (int ii = 0; ii < 10; ii++) {
            num = (int) (Math.random() * 100) % 3;

            switch (num) {
                case 0:
                    compChoice = "R";
                    break;
                case 1:
                    compChoice = "P";
                    break;
                case 2:
                    compChoice = "S";
                    break;
            }

            System.out.println(num + " " + compChoice);
        }
    }
}

Gregmac的方法还可以,只是缺少一组()。如果您的代码实际上就是上面给出的代码,并且compChoice总是为空,那么一定是出了什么大问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13280076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档