Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 “返回的随机数生成器”;0“;在爪哇_Java - Fatal编程技术网

Java “返回的随机数生成器”;0“;在爪哇

Java “返回的随机数生成器”;0“;在爪哇,java,Java,我已经测试了随机数生成器,它在应用程序之外运行良好。这是一段相当标准的代码。我创建了getter和setter,NetBeans不会抱怨传递给应用程序的任何东西,但应该是一个随机数的是“0”。我想了解更多关于getter和setter以及类的信息。我可能指定的东西不正确 //这是类代码 public class RandomGen { int minSeed = 100; int maxSeed = 999; int num; public static vo

我已经测试了随机数生成器,它在应用程序之外运行良好。这是一段相当标准的代码。我创建了getter和setter,NetBeans不会抱怨传递给应用程序的任何东西,但应该是一个随机数的是“0”。我想了解更多关于getter和setter以及类的信息。我可能指定的东西不正确

//这是类代码

public class RandomGen {

    int minSeed = 100;
    int maxSeed = 999;
    int num;

    public static void RandomNum(int minSeed, int maxSeed) {
        Random rand = new Random();
        int num = rand.nextInt(maxSeed - minSeed) + 1;
    }

    public void setMin(int minSeed) {
        this.minSeed = minSeed;
    }

    public void setMax(int maxSeed) {
        this.maxSeed = maxSeed;
    }

    public int getNum() {
        return num;
    }
}
这是我的应用程序中main中的代码

RandomGen rnumber = new RandomGen();
int rnum = rnumber.getNum();
int bigSeed = rnumber.maxSeed;
int smallSeed = rnumber.minSeed;

System.out.println("Random Number =  " + rnum);
System.out.println("MaxSeed = " + bigSeed);
System.out.println("MinSeed = " + smallSeed);
这是打印的报税表

Random Number =  0
MaxSeed = 999
MinSeed = 100

您已经创建了一个局部变量,因此使用全局变量作为

num = rand.nextInt(maxSeed - minSeed) + 1;
根据您的代码,您还需要调用
static
方法来初始化
num

RandomGen rnumber = new RandomGen();
RandomGen.RandomNum(rnumber.minSeed, rnumber.maxSeed);
//^^^^^^^^^^^^^^^^^^^^^
int rnum = rnumber.getNum();
int bigSeed = rnumber.maxSeed;
int smallSeed = rnumber.minSeed;
注意:构造函数不能是静态的,不能有任何返回类型


首先

第二

public static void RandomNum(int minSeed, int maxSeed)
 {
    Random rand = new Random();
    num = rand.nextInt(maxSeed - minSeed) + 1; // remove the declaration you try to make it local variable 

 }
这是不正确的

试试这个:

import java.util.Random;

public class RandomGen {

    private Random random;
    private int minRange;
    private int maxRange;

    public static void main(String[] args) {
        int minRange = (args.length > 0) ? Integer.parseInt(args[0]) : 100;
        int maxRange = (args.length > 1) ? Integer.parseInt(args[1]) : 200;
        int numValues = (args.length > 2) ? Integer.parseInt(args[2]) : 10;
        RandomGen randomGen = new RandomGen(minRange, maxRange);
        for (int i = 0; i < numValues; ++i) {
            System.out.println(randomGen.getNextIntInRange());
        }
    }

    public RandomGen(int minRange, int maxRange) {
        this(minRange, maxRange, null);
    }

    public RandomGen(int minRange, int maxRange, Long seed) {
        this.minRange = minRange;
        this.maxRange = maxRange;
        this.random = (seed == null) ? new Random() : new Random(seed);
    }

    public int getNextIntInRange() {
        return this.minRange + this.random.nextInt(this.maxRange-this.minRange)+1;
    }
}
import java.util.Random;
公共类随机发生器{
私有随机;
私家车;
私有整数最大范围;
公共静态void main(字符串[]args){
int minRange=(args.length>0)?Integer.parseInt(args[0]):100;
intMaxRange=(args.length>1)?Integer.parseInt(args[1]):200;
int numValues=(args.length>2)?Integer.parseInt(args[2]):10;
RandomGen RandomGen=新的RandomGen(最小范围,最大范围);
对于(int i=0;i
如果要在构造函数中重新声明num,只需使用num not int num。如果您的代码
num
变量未在IDE上初始化,则应该有一种方法打开变量隐藏警告。我建议你这样做;这会帮你省去很多麻烦。顺便说一句,你应该直接返回随机数,而不是把它存储在变量中,然后用另一种方法只返回它。谢谢大家。做出了改变,学到了一些东西,但仍然是零。maio290-你说“你从来没有调用过RandomNum。我试过了,但它马上就坏了。其他的更改都达到了目标,但我还是得到了一个零。有没有其他方法可以公开随机数,这样我就可以看到它在工作?@HEQX你改变了这个
num=rand.nextInt(maxSeed-minSeed)+1;
并调用
RandomGen.RandomNum(rnumber.minSeed,rnumber.maxSeed)
@HEQX明白了,将
int num
更改为
static int num
,您不能在静态上下文中使用非静态变量,尽管我强烈建议您创建一个参数化构造函数来使用非静态成员谢谢您Pavneet和所有其他成员。它现在可以工作了。我从来没有看到过这种情况。因此,现在我不得不盯着它看有一段时间。我正在写一个复杂的游戏,这只是其中很小的一部分,但同样重要。@HEQX我很高兴我能帮上忙,快乐游戏我还没有看到这样做。为什么你说我所做的是错的?我确实注意到我的下限并没有在所有情况下都得到尊重。我尝试了几次后,得到的数字都低于100。我但是没有看到任何低于50的值。当然,这是不正确的,您的解决方案会解决这个问题吗?因为每次调用getNum时都会创建一个新的随机实例。它是方法的局部变量。它需要是类方法。如果您否决了它,您不了解随机是如何工作的。运行它并查看。好的,我会的试一试。谢谢。我可能不知道它是如何工作的,但我的印象是它使用了一个基于1970年1月1日以来毫秒数的种子。除此之外,我不知道它内部到底在做什么。@HEQX mine运行。试一试。谢谢duffymo。运行得很好,实际上并没有不遵守规定的限制。我不知道为什么另一个代码不能在两个限制内工作。它看起来很标准。你想说一些你认为我需要知道的关于Random的事情吗?
public static void RandomNum(int minSeed, int maxSeed)
 {
    Random rand = new Random();
    num = rand.nextInt(maxSeed - minSeed) + 1; // remove the declaration you try to make it local variable 

 }
import java.util.Random;

public class RandomGen {

    private Random random;
    private int minRange;
    private int maxRange;

    public static void main(String[] args) {
        int minRange = (args.length > 0) ? Integer.parseInt(args[0]) : 100;
        int maxRange = (args.length > 1) ? Integer.parseInt(args[1]) : 200;
        int numValues = (args.length > 2) ? Integer.parseInt(args[2]) : 10;
        RandomGen randomGen = new RandomGen(minRange, maxRange);
        for (int i = 0; i < numValues; ++i) {
            System.out.println(randomGen.getNextIntInRange());
        }
    }

    public RandomGen(int minRange, int maxRange) {
        this(minRange, maxRange, null);
    }

    public RandomGen(int minRange, int maxRange, Long seed) {
        this.minRange = minRange;
        this.maxRange = maxRange;
        this.random = (seed == null) ? new Random() : new Random(seed);
    }

    public int getNextIntInRange() {
        return this.minRange + this.random.nextInt(this.maxRange-this.minRange)+1;
    }
}