boysna
23-10-2004, 10:03
dovrei compilare un programma java che implementa la struttura dati "coda" usando due "stack". Il programma ke ho fatto viene compilato ma non capisco perchè mi lancia la "java.lang.ArrayIndexOutOfBoundsException"
at queue_con_due_stack.stackqueue.inverti(stackqueue.java:76)
at queue_con_due_stack.stackqueue.stackqueue_front(stackqueue.java:49)
at queue_con_due_stack.test.main(test.java:22)
Il codice è il seguente:
package queue_con_due_stack;
import javax.swing.JOptionPane;
public class test {
public static void main(String [] args) {
stackqueue queue = new stackqueue(10);
String num_oggetti_input =
JOptionPane.showInputDialog("Oggetti in coda?");
int num_oggetti = Integer.parseInt(num_oggetti_input);
for (int i=0; i < num_oggetti; i++)
{
String oggetto_inserito_input =
JOptionPane.showInputDialog("Inserisci il successivo");
Object o = oggetto_inserito_input;
queue.stackqueue_enqueue(o);
}
System.out.println("L'elemento al front è" + queue.stackqueue_front());
queue.stackqueue_dequeue();
System.out.println("L'elemento al front è stato eliminato");
System.out.println("Ora al front c'è:" + queue.stackqueue_front());
if (queue.stackqueue_isEmpty())
System.out.println("Coda vuota");
else
System.out.println("Coda non vuota");
System.out.println("Al momento vi sono" + queue.stackqueue_size() + "elementi");
System.exit(0);
}
}
package queue_con_due_stack;
public class stackqueue implements queue_con_due_stack {
private Object[] array2;
public int capacity;
public int top = -1;
public int f = -1;
private Object[] primo_array;
private Object[] secondo_array;
public stackqueue(int capacity)
{
int n = capacity;
primo_array = new Object[capacity];
secondo_array = new Object[capacity];
}
public int stackqueue_size()
{
return (top - f);
}
public boolean stackqueue_isEmpty()
{
if(top - f ==0)
return true;
else
return false;
}
public void stackqueue_enqueue(Object o)
{
primo_array[top + 1]= o;
top = top + 1;
}
public Object stackqueue_front()
{
secondo_array = inverti(primo_array);
return secondo_array[f + 1];
}
public Object stackqueue_dequeue()
{
secondo_array = inverti(primo_array);
Object o = pop();
primo_array = inverti(secondo_array);
f = f + 1;
return o;
}
public Object pop()
{
Object temp = secondo_array[f];
secondo_array[f] = null;
top = top + 1;
return temp;
}
public Object[] inverti(Object[] array)
{
Object[] array2 = new Object[capacity];
int j = 0;
for(int i = top; i>= 0; i--, j++)
{
array2[j] = array[i];
}
return array2;
}
}
package queue_con_due_stack;
interface queue_con_due_stack
{
public int stackqueue_size();
public boolean stackqueue_isEmpty();
public void stackqueue_enqueue(Object o);
public Object stackqueue_front();
public Object stackqueue_dequeue();
public Object[] inverti(Object[] array);
public Object pop();
}
datemi una mano vi prego....
:mc: :muro:
at queue_con_due_stack.stackqueue.inverti(stackqueue.java:76)
at queue_con_due_stack.stackqueue.stackqueue_front(stackqueue.java:49)
at queue_con_due_stack.test.main(test.java:22)
Il codice è il seguente:
package queue_con_due_stack;
import javax.swing.JOptionPane;
public class test {
public static void main(String [] args) {
stackqueue queue = new stackqueue(10);
String num_oggetti_input =
JOptionPane.showInputDialog("Oggetti in coda?");
int num_oggetti = Integer.parseInt(num_oggetti_input);
for (int i=0; i < num_oggetti; i++)
{
String oggetto_inserito_input =
JOptionPane.showInputDialog("Inserisci il successivo");
Object o = oggetto_inserito_input;
queue.stackqueue_enqueue(o);
}
System.out.println("L'elemento al front è" + queue.stackqueue_front());
queue.stackqueue_dequeue();
System.out.println("L'elemento al front è stato eliminato");
System.out.println("Ora al front c'è:" + queue.stackqueue_front());
if (queue.stackqueue_isEmpty())
System.out.println("Coda vuota");
else
System.out.println("Coda non vuota");
System.out.println("Al momento vi sono" + queue.stackqueue_size() + "elementi");
System.exit(0);
}
}
package queue_con_due_stack;
public class stackqueue implements queue_con_due_stack {
private Object[] array2;
public int capacity;
public int top = -1;
public int f = -1;
private Object[] primo_array;
private Object[] secondo_array;
public stackqueue(int capacity)
{
int n = capacity;
primo_array = new Object[capacity];
secondo_array = new Object[capacity];
}
public int stackqueue_size()
{
return (top - f);
}
public boolean stackqueue_isEmpty()
{
if(top - f ==0)
return true;
else
return false;
}
public void stackqueue_enqueue(Object o)
{
primo_array[top + 1]= o;
top = top + 1;
}
public Object stackqueue_front()
{
secondo_array = inverti(primo_array);
return secondo_array[f + 1];
}
public Object stackqueue_dequeue()
{
secondo_array = inverti(primo_array);
Object o = pop();
primo_array = inverti(secondo_array);
f = f + 1;
return o;
}
public Object pop()
{
Object temp = secondo_array[f];
secondo_array[f] = null;
top = top + 1;
return temp;
}
public Object[] inverti(Object[] array)
{
Object[] array2 = new Object[capacity];
int j = 0;
for(int i = top; i>= 0; i--, j++)
{
array2[j] = array[i];
}
return array2;
}
}
package queue_con_due_stack;
interface queue_con_due_stack
{
public int stackqueue_size();
public boolean stackqueue_isEmpty();
public void stackqueue_enqueue(Object o);
public Object stackqueue_front();
public Object stackqueue_dequeue();
public Object[] inverti(Object[] array);
public Object pop();
}
datemi una mano vi prego....
:mc: :muro: