随机类java
我一直在做一些关于随机课堂使用的练习 我有一个名为Card的类,它有五个实例变量,其中包含一个整数的引用,该整数应该位于指定的范围内 这五个数字是使用random类生成的。代码如下:随机类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
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的用途是什么?很好的问题!我将在一分钟内编辑我的答案。