java - 如何使用队列对整数流进行排序?实验室JAVA

标签 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()+" ");

}

}

最佳答案

在每个循环中,更改此:

for(int i=0;i<queue2.size();i++)

对此:

int size = queue2.size();
for(int i=0;i<size;i++)

这是必要的,因为当您删除和添加项目时,queue2 的大小在循环内不断变化。

顺便说一句,最后一个循环可以替换为

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

关于java - 如何使用队列对整数流进行排序?实验室JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26581543/

相关文章:

java - 如何在不输入固定长度的情况下使用LSD String Sort?

java - Java 如何处理整数下溢和上溢,您将如何检查它?

c# - 用 001 和 1 初始化 int 有区别吗?

java - 如何使用 OOP 概念将 arraylist 对象设置为表

c++ - 我的代码中的错误在哪里

java - 在 fragment 上实现向上导航

javascript - 对具有多个条件的对象进行排序

C++ 语法问题 : if var ! = type int

java - 使用 Stream 从对象列表中查找最常见的属性值

java - 在java中重写equals和hashcode方法?