Искам да използвам ArrayList
да представлява приоритетната опашка. Затова искам да добавя елемент на конкретна позиция на ArrayList
, Но когато го пусна, системата ми каза Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 0.
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 за отговор № 1Тъй като Javadoc за add(int index, E element)
на ArrayList
казва:
Вмъква указания елемент в указаната позиция в този списък. Премества елемента, който понастоящем е на тази позиция (ако има такъв) и който и да е следващите елементи вдясно (добавя един към техните индекси).
Хвърля: IndexOutOfBoundsException - ако индексът е извън обхвата (индекс <0 || index> размер ())
Правиш:
test.enqueu("x",10);
който извиква:
Queue.add(10,"x"); // "Queue" is the arrayList
Опитвате се да добавите низ към индекс 10, където размерът на ArrayList е 0. Това означава, че се опитвате това, където index> size (), Така че получавате IndexOutOfBoundsException
.
Също така помислете повече за своя дизайн и какво трябва да направите. Enqueue
не работи по този начин, което се опитвате да направите.