Java 为静态int制服修复一个愚蠢的东西

Java 为静态int制服修复一个愚蠢的东西,java,static,Java,Static,下面是我键入的脚本 import java.util.Random; public class RandomPPHOnG2 { public static int uniform(int N) { return (int) (Math.random() * N); } public static void main(String[] args) { int M = Integer.parseInt(args[0]);

下面是我键入的脚本

import java.util.Random;

public class RandomPPHOnG2
{
    public static int uniform(int N)
    {
        return (int) (Math.random() * N);
    }
    public static void main(String[] args)
    {
        int M = Integer.parseInt(args[0]);
        System.out.println(uniform(M));
    }
}
但是,当我以
Java2 100
运行这个程序时,我得到了100。这不是我想要的号码


我想得到一个从0到100的随机数。。。特别是,如何调整
System.out.println(统一(M))打印0到M之间的数字?..

不要重新发明轮子。Java有
Random
类,该类已经通过
nextInt
方法提供了此功能

class Main
{
  private final static Random r = new Random();

  public static int uniform(int min, int max)
  {
    // +1 assumes inclusive range, [min,max]        
    return min + r.nextInt(max-min+1); 
  } 
}

你写的程序没有什么问题

当我以
100
作为命令行参数编译并运行它(使用Eclipse和Java8)时,每次都会得到不同的数字


程序中唯一的错误是风格:

  • 导入java.util.Random
是多余的,因为您不使用该类
  • 您不检查
    args
    的大小,因此可能会出现意外的异常
  • 变量名不应以大写字母开头;e、 g.
    M
    N
    应该是
    M
    N
  • 类名对我来说没有任何意义

  • 如果你也解释一下为什么他的原始代码不起作用会更好。你能解释一下如何调整我的代码而不是使用你的代码吗?那不是我的代码。这是JDK代码。您的示例编译并运行良好:。因此,错误一定在其他地方,或者您发布的代码与您正在使用的代码不同。您确定这实际上产生了100个错误吗?即使它真的可以(我不确定它是否可以),它这样做的概率在天文上也是不可能的。很可能您的报告有误。另外,为什么您导入了
    Random
    ,然后没有使用专门为执行此任务而设计的方法
    Random.nextInt
    ?是的。如果我投100,那么我得到100。如果我输入1354654,那么我得到1354654…你确定你的实际代码中有
    uniform
    调用,而不仅仅是打印
    M
    ?@user2357112,我正在查看脚本并尝试更改某些内容。。。;;所以这就是随机产生的原因。我想我在这里用得不好。但是,我实际上不想使用
    Random
    。即使我得到的是一个不同的数字,但作为Math#Random()返回带正号的双精度值,大于或等于0.0,小于1.0,然后将该值与输入的数字相乘。。。我在命令提示符下检查了它,它成功了!。。。。但是,我一直在用DrJava一次又一次地尝试,我不知道我一直遇到同样的问题。。正如您所说,脚本在命令提示符下非常好,但我不知道为什么DrJava中会出现问题,您能解释一下吗?/@Yk26:您在DrJava中运行的代码不同。检查您正在使用、保存和重新编译的文件。也许DrJava的
    Math.random()
    实现已损坏?或者您正在运行不同的代码。。。正如user2357112所建议的,在这种情况下,问题在于DrJava被破坏了。(可能是随机数生成器的种子设定不正确。请尝试更改程序以打印一系列随机数…)