如何使用队列对Integer Stream进行排序?实验室JAVA

时间:2014-10-27 05:16:58

标签: java sorting integer queue modulo

好的,所以这个程序需要使用队列分隔整数流。我得到一个输出,但它不是所需的顺序,首先整数可被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()+" ");

}

}

1 个答案:

答案 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()+" ");