2016-09-18 10 views
0

優先キューを表すのにArrayListを使用します。だから私はArrayListの特定の位置にアイテムを追加したいと思います。私はそれを実行したときしかし、システムがException in thread "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 0.スレッド "main"の例外java.lang.IndexOutOfBoundsException:インデックス:10、サイズ:0 JAVA

public class PriorityQueue 
{ 
public ArrayList<String> Queue=new ArrayList<>(); 

public void enqueu(String s, int p) 
{ 
    Queue.add(p,s); 
} 

public void dequeu() 
{ 
    String temp=Queue.get(Queue.size()-1); 
    Queue.remove(temp); 
} 
public void print() 
{ 
    String[] print=new String[Queue.size()]; 
    print=Queue.toArray(print); 
    for(int i=0;i<Queue.size();i++) 
    { 
     System.out.println(print[i]); 
    } 


} 

public static void main(String[] args) 
{ 
    PriorityQueue test= new PriorityQueue(); 
    test.enqueu("x",10); 
    test.enqueu("Y",1); 
    test.enqueu("Z",3); 

    test.print(); 
}} 
+0

どのようなデバッグ試行をしましたか? https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ –

+0

あなたの 'enqueue' doeは' enqueue'が最後に追加されるので、これが待ち行列になっていれば意味をなさないキューの任意のインデックスではない。 Priority Queueクラスをコールするので、 'enqueue'メソッドの2番目のパラメータは、インデックスではなく要素の優先順位になります。あなたはおそらくQueuesでいくつか読むべきです。 –

答えて

0

を教えてくれましたArrayListadd(int index, E element)ためJavadocが言うので:

挿入し、このリスト内の指定された位置に指定された要素を。 現在その位置にある要素(存在する場合)およびそれに続く要素を右に移動します(インデックスに1を追加します)。

例外:IndexOutOfBoundsException - インデックスが範囲 (インデックス< 0 ||インデックス>サイズ())

あなたがやっているの外にある場合:呼び出す

test.enqueu("x",10); 

Queue.add(10,"x"); // "Queue" is the arrayList 

ArrayListのサイズが0のインデックス10に文字列を追加しようとしています。つまり、あなたはこれを試しています、インデックス>サイズ()。だからあなたはIndexOutOfBoundsExceptionを得ています。

また、あなたのデザインとあなたがすべきことについてもっと考えてみてください。 Enqueueは、このようにして何をしようとしていません。

関連する問題