Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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 不产生随机输出的随机迭代器_Java_Random_Iterator - Fatal编程技术网

Java 不产生随机输出的随机迭代器

Java 不产生随机输出的随机迭代器,java,random,iterator,Java,Random,Iterator,特定迭代器的迭代应该在RandomizedQueue中的对象上是随机的,并且每个迭代器应该记住它自己的特定顺序(一旦声明)。 以下是我的Iterable和Iterator代码: Some die rolls: 1 1 5 6 3 6 6 1 2 4 6 2 4 5 6 4 4 2 2 5 6 6 2 6 4 5 3 3 2 Mean (should be around 3.5): 3.4882 Standard deviation (should be around 1.7): 1.7069

特定迭代器的迭代应该在RandomizedQueue中的对象上是随机的,并且每个迭代器应该记住它自己的特定顺序(一旦声明)。 以下是我的Iterable和Iterator代码:

Some die rolls: 1 1 5 6 3 6 6 1 2 4 6 2 4 5 6 4 4 2 2 5 6 6 2 6 4 5 3 3 2 
Mean (should be around 3.5): 3.4882
Standard deviation (should be around 1.7): 1.7069
Two colours from first shuffle: yellow green 
Entire second shuffle: yellow green blue red 
Entire third shuffle: yellow green blue red 
Entire fourth shuffle: yellow green blue red 
Entire fifth shuffle: yellow green blue red 
Entire sixth shuffle: yellow green blue red 
Remaining two colours from first shuffle: blue red
import java.util.Iterator;
导入java.util.NoSuchElementException;
公共类RandomizedQueue实现了Iterable{
私人物品[]a;
私人int N;
公共随机化队列(){
a=(项目[])新对象[2];
}//构造一个空的随机队列
公共布尔值为空(){
返回N==0;
}//队列是否为空?
公共整数大小(){
返回N;
}//返回队列中的项目数
公共作废排队(项目){
如果(item==null)抛出新的NullPointerException();
如果(N==a.length)调整大小(2*a.length);//如果需要,数组大小加倍
a[N++]=项目;
}//添加项目
专用空间大小调整(整数容量){
断言容量>=N;
项目[]临时=(项目[])新对象[容量];
对于(int i=0;i0&&N==a.length/4)调整大小(a.length/2);
退货项目;
}//删除并返回一个随机项
公共物品样本(){
if(isEmpty())抛出新的java.util.NoSuchElementException();
int random=StdRandom.uniform(N);//生成一个数字b/w 0和N-1
项目=a[随机];
退货项目;
}//返回(但不要删除)随机项
公共迭代器迭代器(){
返回新的随机迭代器();
}//以随机顺序对项返回独立迭代器
私有类RandomIterator实现了迭代器{
私有int i=N;
私有项[]项副本=(项[])新对象[N];
公共随机迭代器(){
System.arraycopy(a,0,itemcopy,0,N);
StdRandom.shuffle(itemcopy,0,N-1);
}
公共布尔hasNext(){return i>0;}
public void remove(){抛出新的UnsupportedOperationException();}
公共项目下一步()
{ 
如果(!hasNext())抛出新的NoSuchElementException();
返回一个[--i];
}
}
}
StdIn、StdOut和StdRandom是为赋值提供的类,它们的函数已在程序中使用,它们的工作方式与其名称相符。
那么为什么不同的迭代器不产生随机输出呢<代码>无序排列生成对象的随机排列。arraycopy将一个阵列复制到另一个阵列
StdOut.print
的行为类似于
System.out.print

在我看来,它是正确的,让我们检查一下准确性

3.5-3.4882
=0.0118

1.7-1.7069
=-0.069

两者都“接近”其预期值

编辑

而且

Some die rolls: 1 1 5 6 3 6 6 1 2 4 6 2 4 5 6 4 4 2 2 5 6 6 2 6 4 5 3 3 2 
Mean (should be around 3.5): 3.4882
Standard deviation (should be around 1.7): 1.7069
应该是

StdRandom.shuffle(itemcopy, 0, N-1);
同样,您也可以使用相同的
iterator()
方法

StdRandom.shuffle(itemcopy, 0, N);
RandomizedQueue C=新的RandomizedQueue();
C.排队(“红色”);C.排队(“蓝色”);C.排队(“绿色”);C.排队(“黄色”);
迭代器I=新的随机化队列(C).Iterator();
迭代器J=新的随机化队列(C).Iterator();
迭代器K=新的随机化队列(C).Iterator();
迭代器L=新的随机化队列(C).Iterator();
迭代器M=新的随机化队列(C).Iterator();
迭代器N=新的随机化队列(C).Iterator();

是的,他们是正确的迭代器部分在第二、第三、第四个位置不工作。。shuffle没有按随机顺序打印黄、蓝、绿、红。@Zoro请确保您添加了另一个构造函数,以便像我的第二次编辑一样再次获取集合。RandomizedQueue迭代器是否返回RandomIterator的实例?在随机迭代器中,在哪里传递
N
。看起来您使用值初始化了RandomIterator,但是,如果您在初始化它之后排队,那么就没有什么可开始的了,所以也就没有什么可以开始了shuffled@blueygh2我应该发布完整的RandomizedQueue类吗?那可能是helpful@bluegh2我已经发布了完整的class@blueygh2我发现了那只虫子,那是一只阴险的虫子。在
next()
方法中,它应该是
itemcopy[--i]
而不是
a[--i]
StdRandom.shuffle(itemcopy, 0, N-1);
StdRandom.shuffle(itemcopy, 0, N);
RandomizedQueue<String> C= new RandomizedQueue<String>();
C.enqueue("red"); C.enqueue("blue"); C.enqueue("green"); C.enqueue("yellow"); 

Iterator I= new RandomizedQueue<String>(C).iterator();
Iterator J= new RandomizedQueue<String>(C).iterator();
Iterator K= new RandomizedQueue<String>(C).iterator();
Iterator L= new RandomizedQueue<String>(C).iterator();
Iterator M= new RandomizedQueue<String>(C).iterator();
Iterator N= new RandomizedQueue<String>(C).iterator();