我刚刚开始使用这个程序编写代码,所以请放轻松。 :)所以我尝试将随机变量添加到一个arraylist,但它们一直出现在0.我想可能是因为它可能没有在列表中添加任何东西?如何在其他类(下面的类)中调用add2array方法?
public class myClass
{
// instance variables
public Random r;
public Random t;
public Random o;
public int randomR;
public int randomT;
public int randomO;
public ArrayList <Integer> myArray;
/**
* Constructor for objects of class
*/
public myClass()
{
r = new Random();
t = new Random();
o = new Random();
int randomR = (r.nextInt(10));
int randomT = (t.nextInt(10));
int randomO = (o.nextInt(10));
myArray = new ArrayList<Integer>();
}
public void add2Array()
{
myArray.add(randomR); //myArray[0] is first random number
myArray.add(randomT); //myArray[1] is second random number
myArray.add(randomO); //myArray[2] is third random number
}
}
然后在另一个类中有这个代码。我尝试在类中调用printArray,它说有一个超出范围的异常。
public class myClass2
{
Arraylist<myClass> myArray;
public myClass2()
{
myArray = new ArrayList<myClass>();
}
public void printArray()
{
System.out.println("Slot 1: " + myArray.get(0));
System.out.println("Slot 2: " + myArray.get(1));
System.out.println("Slot 3: " + myArray.get(2));
}
}
然后我创建了一个&#34; Main&#34;类。仍然越界出错。它指向printArray方法是myClass2。
public static void main(String[] args)
{
myClass m = new myClass();
myClass2 k = new myClass2();
m.add2array();
g.printArray();
}
答案 0 :(得分:4)
在构造函数中,您声明了新变量randomR
,randomT
和randomO
,这些变量会影响您现有的同名实例变量。这些实例变量未分配,因此它们的默认值为0
。在构造函数中,更改
int randomR = (r.nextInt(10));
int randomT = (t.nextInt(10));
int randomO = (o.nextInt(10));
到
randomR = (r.nextInt(10));
randomT = (t.nextInt(10));
randomO = (o.nextInt(10));
答案 1 :(得分:1)
我没有看到你在任何地方调用add2Array()
方法。获得IndexOutOfBoundsException
的原因是由于myArray
没有任何元素且代码执行myArray.get(0)
。
确保更改whate @rgettman建议否则在解决我提到的这个问题后你会得到0。
从add2Array()
构造函数
myClass()
或在另一个班级
myClass m = new myClass();
m.add2Array();
m.printArray();
不确定您要实现的目标,因为代码不是很好。同样在Java中,良好的约定是让类名以大写字母开头。
答案 2 :(得分:0)
使用SecureRandom
的Java Random
inlace。
使用Java SecureRandom
类和方法:nextInt(int n)
,它在0(包括)和指定值(不包括)之间均匀分布int值。
这是一个加密安全的PRNG,不需要播种。
来自Class SecureRandom的 SecureRandom
和Class Random继承的nextInt
方法
答案 3 :(得分:-1)
如果您使用相同的种子调用新的Random(),您将始终得到相同的答案。这是获取伪随机整数的一种方法:
using System.Security.Cryptography;
.
.
.
public int Randominteger(int minValue, int maxValue)
{
RNGCryptoServiceProvider crypt = new RNGCryptoServiceProvider();
byte[] fourbytes = new byte[4];
crypt.GetBytes(fourbytes);
return new Random(BitConverter.ToInt32(fourbytes, 0)).Next(minValue, maxValue);
}