Błąd podczas dodawania obiektu na stos

0

Witam mam problem z dodawaniem obiektu na stos.Podczas kompilacji wyskakuję błąd w postaci "pushOperator(Operator) in StackOnp cannot be applied to (java.lang.String,int)" oto kod :

public class Operator {
private String operator;
private int priority;
public Operator(String operator, int priority){
this.operator=operator;
this.priority=priority;
}
public String getOperator(){
return operator;
}
public int getPriority(){
return priority;
}
} 
public class StackONP{
private int maxSize; // rozmiar tablicy zawierającej stos
private Operator[] stos; // tablica zawierająca stos
private int top; // indeks szczytu stosu
public StackONP(int rozmiar){//tworzy stos
stos=new Operator[rozmiar];
top=-1;
}
public void pushOperator(Operator o) {
stos[top++] = o; 
}
public Operator popOperator(){ // pobiera i usuwa element ze szczytu stosu
return stos[top--]; 
 }
public boolean isEmpty(){
return (top == -1);
}
public Operator peekOperator(){ // zwraca wartość na szczycie stosu
return stos[top];
}
}
public class MainClass {
public static void main(String[] args){
StackONP stack = new StackONP(2;
stack.pushOperator("d",2);
System.out.println(stack.isEmpty());
}
}
1

Nie zgadzają się typy argumentów funkcji. Zapewne powinno być tak:

stack.pushOperator(new Operator("d",2));
0

Jeszcze mam jedno pytanie w jaki sposób zrobić aby ten stos był dynamiczny ?

0

Nie jestem pewien co znaczy stos dynamiczny, ale chyba starczy zmienić typ pola stos, z Operator[] na ArrayList<Operator>.

0

Chodzi mi o to że nie przypisuję statycznie wielkości tablicy lecz wielkość ta zależy od ilości odkładanych lub zdejmowanych elementów ze stosu.Niestety nie mogę korzystać z wbudowanych pojemników Javy (Stack, Vector itp).

1

Kolega miesza się w zeznaniach już od kilku wątków.
Proponuję zaimplementować sobie stos, jako listę wiązaną, do której dodajesz tylko na początek i pobierasz tylko z początku. Jeśli ma być jeszcze niżej, to napisz sobie listę wiązaną, której każdy element będzie węzłem zawierającym Operatora i link do następnego węzła. Wtedy Twój obiekt "Stos" wskazuje na początek tej listy (pierwszy węzeł), każde pobranie zabiera pierwszy element i ustawia wskaźnik stosu na drugi, a każde dodanie elementu Tworzy nowy węzeł, jako jego wartość wpisuje dodawanego Operatora, a jako wartość next - wskaźnik do poprzedniego pierwszego (teraz już drugiego) elementu. Dla zaawansowanych można sobie dorobić metody isEmpty() lub size(). Ta pierwsza informuje, czy wartość pierwszego węzła istnieje, a ta druga iteruje wgłąb zliczając elementy.
To jest bardzo szkolny przykład pomagający zrozumieć naturę kolekcji w Javie. Jestem pewny, że był on wyjaśniony na wykładzie.
Nie napiszę Koledze całego kodu, ponieważ zadanie brzmiało zapewne "zaimplementuj stos", a regulamin tego forum zabrania wykonywania całych zadań - tym bardziej tych na zaliczenie.
Podsumowując: potrzebujesz trzech klas: Operator (już masz), Stos (który zawiera metody do pobierania/dodawania/zliczania/etc. oraz wskaźnik do pierwszego węzła klasy Wezel), oraz w końcu Wezel, która zawiera zmienną "value" typu Operator oraz zmienną "next" typu Wezel. Napisz to, popatrz na to i mam nadzieję, że wymyślisz, co z tym dalej zrobić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1