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
的大小,因此可能会出现意外的异常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被破坏了。(可能是随机数生成器的种子设定不正确。请尝试更改程序以打印一系列随机数…)