Java 如何使用math.random,但仅针对特定值?
以下是我所拥有的(这只是我全部代码的摘录): 我怎样才能让它只产生一个0、1或2的随机数 在我后面的一个返回语句中,它说在这里获取的字母会导致“null” 以下是完整的代码(如果有帮助):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
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。如果我在开关盒之前没有使用某种循环,有可能吗?好的,我刚才看到了@