Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用math.random,但仅针对特定值?_Java_Random_Switch Statement - Fatal编程技术网

Java 如何使用math.random,但仅针对特定值?

Java 如何使用math.random,但仅针对特定值?,java,random,switch-statement,Java,Random,Switch Statement,以下是我所拥有的(这只是我全部代码的摘录): 我怎样才能让它只产生一个0、1或2的随机数 在我后面的一个返回语句中,它说在这里获取的字母会导致“null” 以下是完整的代码(如果有帮助): import java.util.Scanner; import static java.lang.System.*; public class RockPaperScissors { private String playChoice; private String compChoice; public

以下是我所拥有的(这只是我全部代码的摘录):

我怎样才能让它只产生一个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;
}
}
使用:

random()返回介于0和1之间的值

乘以100使其成为一个介于0和100之间的数字(带十进制值)

强制转换为
(int)
会删除十进制值-与Math.floor()相同(如果您的语言中有)

模3是3的再结晶:例如,55/3=18余数1(换句话说,(18*3)+1=55)

使用:

random()返回介于0和1之间的值

乘以100使其成为一个介于0和100之间的数字(带十进制值)

强制转换为
(int)
会删除十进制值-与Math.floor()相同(如果您的语言中有)


模3是3的再结晶:例如,55/3=18余数1(换句话说,(18*3)+1=55)

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

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);
        }
    }
}
公共类NewMain{
公共静态void main(字符串[]args){
int-num;
字符串compChoice=“”;
对于(int ii=0;ii<10;ii++){
num=(int)(Math.random()*100)%3;
开关(num){
案例0:
compChoice=“R”;
打破
案例1:
compChoice=“P”;
打破
案例2:
compChoice=“S”;
打破
}
System.out.println(num+“”+compChoice);
}
}
}

Gregmac的方法还可以,只是缺少一组()。如果您的代码实际上就是您上面给出的代码,并且compChoice始终为空,那么就存在严重错误。

基于不同的注释,我想尝试另一种方法。我只是把你的代码复制到我的IDE中,然后运行它

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);
        }
    }
}
公共类NewMain{
公共静态void main(字符串[]args){
int-num;
字符串compChoice=“”;
对于(int ii=0;ii<10;ii++){
num=(int)(Math.random()*100)%3;
开关(num){
案例0:
compChoice=“R”;
打破
案例1:
compChoice=“P”;
打破
案例2:
compChoice=“S”;
打破
}
System.out.println(num+“”+compChoice);
}
}
}
Gregmac的方法还可以,只是缺少一组()。如果您的代码实际上就是您上面给出的代码,并且compChoice始终为空,则会出现严重错误。

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

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

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

i、 e.
intv=(int)(Math.random()*3)

如果简单乘法让您感到害怕,那么有一个java.util.Random类。你可以做:

/** 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;
}
使用随机实例可以插入更高级的随机数生成器,如果要进行随机实验,则必须使用该生成器。

Math.Random()
返回介于0和1之间的浮点值

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

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

i、 e.
intv=(int)(Math.random()*3)

如果简单乘法让您感到害怕,那么有一个java.util.Random类。你可以做:

/** 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;
}

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

我认为一个好方法是在乘以数字后对其进行四舍五入。我不能像你们中的一些人回答的那样工作,但是这个怎么样

var a=Math.random()*3;
var num=Math.round(a);
switch(num)
{
case 0 : compChoice = "R";break;
case 1 : compChoice = "P";break;
case 2 : compChoice = "S";break;
}

我认为这样做的一个好方法就是在乘以数字后对其进行四舍五入。我不能像你们中的一些人回答的那样工作,但是这个怎么样

var a=Math.random()*3;
var num=Math.round(a);
switch(num)
{
case 0 : compChoice = "R";break;
case 1 : compChoice = "P";break;
case 2 : compChoice = "S";break;
}

所以使用Mod 3只会导致0、1或2如何?我刚刚编辑了我的代码以包含Mod 3,但它仍然返回compChoice为“null”@tech_geek23,然后我建议您调试代码。您可以检查
num
是否介于(或等于)0和2之间。在switch语句之后,您还应该能够检查
compChoice
是否有效,其余的取决于您。我理解模(或Mod),但我不确定Java是否以您所说的方式解释它about@tech_geek23根据定义,对非负整数进行模3运算的结果为0、1或2。如果这对你不起作用,那你就做错了。所以使用Mod 3只会导致0、1或2如何?我刚刚编辑了我的代码以包含Mod 3,但它仍然将compChoice返回为“null”@tech_geek23,然后我建议你调试代码。您可以检查
num
是否介于(或等于)0和2之间。在switch语句之后,您还应该能够检查
compChoice
是否有效,其余的取决于您。我理解模(或Mod),但我不确定Java是否以您所说的方式解释它about@tech_geek23根据定义,对非负整数进行模3运算的结果为0、1或2。如果这对你不起作用,那就是你做错了。开头的switch case代码来自我刚才添加的代码。是的,它总是返回null。如果我在开关盒之前没有使用某种循环,有可能吗?好的,我刚才看到了@