当前位置: 首页 > 知识库问答 >
问题:

在java eclipse中使用“for”生成100个随机数并将其与用户值进行比较时出错

商勇
2023-03-14

我是全新的java和我有这个问题我总是得到0随机数大于用户的价值我应该得到不同数量的随机数大于值每次我运行的程序

package chapterfinal;
import java.util.Scanner;

public class finalf {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner (System.in);
    int greaterOrequal = 0;
    int count = 0;
    final int finalcount = 100;
    System.out.println("Enter a value between 30 and 70: ");
    int value = input.nextInt();
    
    while (value > 70 || value < 30) {
        System.out.println("Please try to enter a value between 30 and 70: ");
        value = input.nextInt();
        
    }
    
    for (count = 0; count < finalcount; count++) {
        int random = (int) Math.random() * 100;
        if (random >= value)
                greaterOrequal++;
    }
        System.out.println("There are " + greaterOrequal + " random numbers greater than " + value);
            
} }

“while”代码用于提示用户重新输入30-70之间的值,以防用户输入超出该范围的内容。

“for”代码是生成100个随机数,并分析有多少大于用户输入的值。

最后,只需打印出有多少随机数大于该值的结果,并打印用户输入的值

我知道这是一个非常简单的代码,我找不到它有什么问题!

这是我得到的结果:

Enter a value between 30 and 70: 
80
Please try to enter a value between 30 and 70: 
50
There are 0 random numbers greater than 50

应该是这样的:

Enter a value between 30 and 70:
25
Please try to enter a value between 30 and 70:
50
There are 51 random numbers greater than 50

每次运行程序时,我都会得到不同数量的随机数,大于用户值。

我希望你们能帮我

请任何帮助是赞赏!!

共有1个答案

爱繁
2023-03-14

int random=(int)数学。随机()*100

这并不像你想象的那样解析。

这将:

[A]生成0和1之间的数字。

[B] 把这个数字转换成整数,所以现在它总是0。

[C] 然后乘以100。还是0。

换句话说,它解析为((int)数学。random())*100。

简单的修正是(int)(Math.random()*100),但请注意,这不是获得0到99之间随机数的正确方法。

鸽子洞原理适用:计算机不是魔法;在0和1之间有X个唯一的数字,你的程序实际上可以产生。X是高的,但不是无限的。(大约在2^53左右)。

如果X不能完全除以100(剧透:它不能),那么0到100之间的数字会比其他数字更容易被选中:它不均匀。

你不大可能注意到(效果会很小),但这解释了为什么这个公式从根本上被打破了。

正确的方法是这样做:

Random r = new Random(); // do this only once.

int x = r.nextInt(100); // x can be 0, 99, or anything in between.

它也是更干净的代码,因为没有公式,很难打乱括号。

 类似资料:
  • 我是Java新手。所以,我想做的是,创建一个程序,生成25个随机int值,并为每个值使用if-else语句将其分类为大于、小于或等于第二个随机生成的值。我想使用数组来访问每个元素,但我不确定除了使用数组之外我还能做什么。 我知道if-else部分是完全错误的,但我不知道如何访问数组并比较它们。当我编译时,它会创建25个随机数,但打印部分总是显示 大于0的数字x 因此,[我1 ]认为总是零。 非常感

  • 我有两个理由: 这是一个简单的例子,在实际的df1中1000k行和10列,df2只有24行和更少的列。我想循环df2中的所有行,并比较那些特定的行(例如列'B'和'D')从df2在df1中具有相同的列名,如果行值匹配(如果列B中的值和df2中的列D中的值匹配相同的值在相同的列中,但在df1中)将该行中的相应斑马值分配给df2中的同一行,创建新的列斑马并分配该值。如果没有找到匹配分配0或NaN的。

  • 我得到了一个充满“项目”的枚举,我想生成枚举中的一个随机项目并将其放入我的清单中,我用数组制作了清单。数组只有10 int的空间。

  • 我正在尝试将哈希检查从服务器应用程序移动到PostgreSQL。换句话说,我需要调用一个对PGSQL的查询,它将来自查询的字符串与来自字段的字符串进行比较,并将相等比较的结果返回为bool,但如果没有关于clear SQL的过程,我不知道如何实现这一点。 upd:我有字段密码的表用户(当前为文本,将来为bytea)。我想写点什么 它必须返回true或false作为相等比较的结果。

  • 问题内容: 我需要生成一个随机数。 看来该功能已不复存在。 我的选择是, 和 。 我在函数上找不到任何文档,头文件中也没有注释。 问题答案: ===== Swift 4.2 / Xcode 10 ===== 斯威夫特在引擎盖下用来完成工作。 ===== Swift 4.1 / Xcode 9 ===== 返回 0* 到 4294967295之间 的随机数 * 返回 0.0* 到 1.0 范围内的随

  • 我可以将指向结构的指针类型转换为带符号的值以返回不同类型的错误吗。C标准是否允许这种行为,或者是一种未定义的行为。 我怎样才能让这个条件起作用?