好的,所以这个程序需要使用队列分隔整数流。我得到一个输出,但它不是所需的顺序,首先整数可被3整除然后1%3然后2%3 有什么建议? 这是我的代码:
import java.util.Random;
public class Oct22
{
public static void main(String[] arg)
{
int x;
Random rnd = new Random();
Queue<Integer> queue = new ArrayQueue<Integer>();
Queue<Integer> queue2 = new ArrayQueue<Integer>();
//for(char c='a'; c<= 'z'; c++)
// queue.add(c);
for(int i=0;i<20;i++)
queue2.add(rnd.nextInt(100));
for(int i=0;i<queue2.size();i++)
{
x=queue2.remove();
if(x%3==0)
queue.add(x);
else
queue2.add(x);
}
for(int i=0;i<queue2.size();i++)
{
x=queue2.remove();
if(x%3==1)
queue.add(x);
else
queue2.add(x);
}
for(int i=0;i<queue2.size();i++)
{
x=queue2.remove();
if(x%3==2)
queue.add(x);
else
queue.add(x);
}
System.out.println(queue.size());
System.out.println(queue2.size());
System.out.println("the size of queue is: " + queue.size());
while(!queue.isEmpty())
System.out.print(queue.remove()+ " ");
System.out.println("\n---------------------------------");
while(!queue2.isEmpty())
System.out.print(queue2.remove()+" ");
}
}
答案 0 :(得分:1)
在每个循环中,更改此:
for(int i=0;i<queue2.size();i++)
到此:
int size = queue2.size();
for(int i=0;i<size;i++)
这是必要的,因为当你删除和添加项目时,queue2的大小会在你的循环中不断变化。
BTW,最后一个循环可以替换为
queue.addAll(queue2);
因为此时queue2中的所有剩余数字应该具有2的余数。
完整代码:
int x;
int size;
Random rnd = new Random();
Queue<Integer> queue = new ArrayDeque<Integer>();
Queue<Integer> queue2 = new ArrayDeque<Integer>();
for(int i=0;i<20;i++)
queue2.add(rnd.nextInt(100));
size = queue2.size();
for(int i=0;i<size;i++)
{
x=queue2.remove();
if(x%3==0)
queue.add(x);
else
queue2.add(x);
}
size = queue2.size();
for(int i=0;i<size;i++)
{
x=queue2.remove();
if(x%3==1)
queue.add(x);
else
queue2.add(x);
}
size = queue2.size();
for(int i=0;i<size;i++)
{
x=queue2.remove();
if(x%3==2)
queue.add(x);
else
queue.add(x);
}
System.out.println(queue.size());
System.out.println(queue2.size());
System.out.println("the size of queue is: " + queue.size());
while(!queue.isEmpty())
System.out.print(queue.remove()+ " ");
System.out.println("\n---------------------------------");
while(!queue2.isEmpty())
System.out.print(queue2.remove()+" ");