Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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_Java_Random - Fatal编程技术网

随机类java

随机类java,java,random,Java,Random,我一直在做一些关于随机课堂使用的练习 我有一个名为Card的类,它有五个实例变量,其中包含一个整数的引用,该整数应该位于指定的范围内 这五个数字是使用random类生成的。代码如下: public class Card { private String cardName; private int yearOfInvention; private int novelty; private int popularity; private double trendiness; private int

我一直在做一些关于随机课堂使用的练习

我有一个名为Card的类,它有五个实例变量,其中包含一个整数的引用,该整数应该位于指定的范围内

这五个数字是使用random类生成的。代码如下:

public class Card
{

private String cardName;
private int yearOfInvention;
private int novelty;
private int popularity;
private double trendiness;
private int numberOfDialects;


public Card(String cardName) {
    this.cardName = cardName;
    Random rand = new Random(); 
    yearOfInvention = 1900 + rand.nextInt(111);
    novelty = rand.nextInt(10);
    popularity = rand.nextInt(100);
    trendiness = rand.nextDouble() + rand.nextInt(4);
    numberOfDialects = rand.nextInt(50);
 }
对于“趋势性”,我的值需要是0-5之间的任何数字,包括小数部分,但仅限于小数点后一位

目前它会给我例如

私人双趋势1.2784547479963435


是否有一种方法可以限制小数点的数量而不舍入,并影响“随机性”?

您可以使用以下十进制数字的格式

double number = 0.9999999999999; // this is eg of double no
DecimalFormat numberFormat = new DecimalFormat("#.00"); // provide info about how many decimals u want 
System.out.println(numberFormat.format(number)); 

您可以按如下方式使用十进制数的格式

double number = 0.9999999999999; // this is eg of double no
DecimalFormat numberFormat = new DecimalFormat("#.00"); // provide info about how many decimals u want 
System.out.println(numberFormat.format(number)); 
/**
*返回一个介于max和它的负数之间的浮点随机数
*/ 
公共静态浮点getFloatRandomNumber(int max){
double isNegative=(Math.random()*10);
//如果是负数,比如50:50
如果(为负<代码>/**
*返回一个介于max和它的负数之间的浮点随机数
*/ 
公共静态浮点getFloatRandomNumber(int max){
double isNegative=(Math.random()*10);
//如果是负数,比如50:50

如果(isNegative最简单的方法可能是生成一个介于0-50之间的数字,然后除以10

trendiness = rand.nextInt(51) / 10d;
只是别忘了添加描述性注释,或者将其提取到具有适当名称的helper方法中。这样一段线性代码可能会让人困惑,因为它的意图不太清楚


编辑回答OP非常好的问题:

为什么括号之间的数字是51而不是50

这取决于您决定哪一个更正确。您的“0-5之间的数字”规范不是很清楚。
rand.nextInt(51)
调用将在区间
[0,50]
中生成一个随机整数。
rand.nextInt(50)
将在区间
[0,50)
中生成一个数字(注意半开区间),或0-49。你选择适合你的东西

另外,10之后的d的目的是什么

让我们看看。尝试运行以下命令:

System.out.println(new Random().nextInt(50) / 10);
它只输出数字0-4。问题是,如果表达式中的所有数字都是整数,则除法是基于整数的。它将舍入任何十进制余数。为避免这种情况,表达式中至少需要有一个实数(通常是双精度的)


这就是
10d
的作用。它与
10.0
(双)10
相同。最简单的方法可能是生成一个介于0-50之间的数字,然后除以10

trendiness = rand.nextInt(51) / 10d;
只是别忘了添加描述性注释,或者将其提取到具有适当名称的helper方法中。这样一段线性代码可能会让人困惑,因为它的意图不太清楚


编辑回答OP非常好的问题:

为什么括号之间的数字是51而不是50

这取决于您决定哪一个更正确。您的“0-5之间的数字”规范不是很清楚。
rand.nextInt(51)
调用将在区间
[0,50]
中生成一个随机整数。
rand.nextInt(50)
将在区间
[0,50)
中生成一个数字(注意半开区间),或0-49。你选择适合你的东西

另外,10之后的d的目的是什么

让我们看看。尝试运行以下命令:

System.out.println(new Random().nextInt(50) / 10);
它只输出数字0-4。问题是,如果表达式中的所有数字都是整数,则除法是基于整数的。它将舍入任何十进制余数。为避免这种情况,表达式中至少需要有一个实数(通常是双精度的)


这就是
10d
的作用。它与
10.0
(double)10
一样,你可以对它进行四舍五入。逻辑是一样的。是的,你可以使用bigdecime对它进行四舍五入,或者如果你想让它更随机的话,可以将两个整数的bigdecime变大(四舍五入会减少随机性;))这不是重复的,因为这对我来说不是理想的解决方案。你可以舍入它。逻辑是一样的。是的,你可以使用BigDecimal对它进行舍入,或者如果你想让它更随机的话,将BigDecimal的两个整数变大(舍入会使它不那么随机;))这不是重复的,因为这对我来说不是理想的解决方案。是的-这是完美的!非常感谢。我可以问一下,为什么括号之间的数字是51而不是50吗?还有,10后面的d的用途是什么?@javapalava很好的问题!我会在一分钟内编辑我的答案。是的-这是完美的!非常感谢。我可以问一下,为什么是di吗括号中的git是51而不是50?另外,10个?@javapalava问题后面的d的用途是什么?很好的问题!我将在一分钟内编辑我的答案。