Upn-Rechner

Status
Nicht offen für weitere Antworten.

F34RL355

Mitglied
Bin gerade dabei einen Upn Rechner zu erstellen...

Hab dafür einen eigene Klasse Stack mit Hilfe eines Arrays implementiert.
Java:
class Stack{

final int max = 20;
int [] stack = new int [max];
int size = 0;

public void push(int n){
stack[size++] = n;
}
public int pop(){
return stack[--size];
}

public boolean hasNext(){
return size != 0; 
}

//public String toString()

}

Nun hab ich noch eine Klasse, mit der Methode "readOperand" welche einen eingegebenen Int Wert auf den Stack ablegen soll.

Java:
class UpnCalculator{
  
  Stack stapel = new Stack();

  public void readOperand(int a){
  a.push();
}

public int readOperator(int operator){
    int zahl1 = stapel.pop(); 
  
}

}

Code:
UpnCalculator.java:7: int cannot be dereferenced
  a.push();
   ^
1 error

Kann mir da vll. jemand weiterhelfen 🙂
 
Zuletzt bearbeitet:
Deine Methode push erfordert einen int als Argument, du übergibst ihm allerdings beim Aufruf mittels a.push(); gar nichts. Das nächstes problem ist, dass a ein int ist und nicht dein Stapel. also würde die Methode warscheinlich stapel.push(a); lauten, welche du eigendlich aufrufen möchtest.
 
korrekt wäre
Java:
stappel.push(a);
a ist ein int und da gibt's keine Methode namens push 🙂
 
Das muß stappel.push(a) heißen.

Übrigens:

- stappel sollte stapel heissen.
- Du fragst bei push nicht ab, ob dein size auch nicht größer als dein max wird-
 
Die Fehlermeldung sagt dir doch alles, was du brauchst. Du kannst nicht einfach eine objektmethode (push) von einem int aufrufen wollen. Wenn dir das nicht klar ist, google mal nach primitiven Datentypen. Du willst da stapel.push(a); (Stapel nur mit einem 'p')

EDIT: Ach Mist, einmal beim Beitragschreiben weggegangen und schon ist man einige Beiträge zu spät.
 
Danke euch allen !!

Bin selber grad draufkommen dass ich mich bei "stappel" verschrieben hab ^^

Auch danke für den Tipp, dass ich bei push das max nicht überprüf, hab das gleich geändert ...

Java:
  final int max = 19;
  int [] stack = new int [max];
  int size = 0;
  String ans = "";
  
  public void push(int n){
    if (size ==20){
    ans = "false";}
    stack[size++] = n;
  }
 
Java:
  public void push(int n){
    if (size ==max) {
        System.out.println("Fehler: Stack läuft über";
        return;
   }
    stack[size++] = n;
  }
 
So eine Frage hab ich jetzt noch:

Java:
class Stack{
  
  final int max = 19;
  int [] stack = new int [max];
  int size = 0;
  String ans = "";
  
  public void push(int n){
    if (size ==20){
      ans = "false";
    }
    stack[size++] = n;
  }
  public int pop(){
    return stack[--size];
  }
  
  public boolean hasNext(){
    return size != 0; 
  }
  
  public String toString(){
  return "0 = " + stack[0];  
  
  }    
}

Java:
class UpnCalculator{
  
  Stack stapel = new Stack();

  public void readOperand(int a){
  stapel.push(a);
}

public void readOperator(int operator){
    int zahl1 = stapel.pop();
    int zahl2 = stapel.pop();
    
    int sum = zahl1+zahl2;
    
    stapel.push(sum);
  
}
}

ZUM TESTEN:

Java:
import java.util.Scanner;

class UpnApplication{

public static void main (String [] args){

 
  Scanner reader = new Scanner(System.in);
  
Stack stapel = new Stack();   
UpnCalculator test = new UpnCalculator();

stapel.push(5);
stapel.push(2);
test.readOperator(1);

System.out.print(stapel);

}
}

Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
        at Stack.pop(Stack.java:15)
        at UpnCalculator.readOperator(UpnCalculator.java:10)
        at UpnApplication.main(UpnApplication.java:15)
 
Kanns vielleicht sein, dass ich 2 unterschiedliche Stacks hab und ich mich deshalb bei "readOperator" in einem anderen Stack befind, dass noch gar keine Daten enthält ?
 
jep genau das ist das problem test hat eine instanz von stack du addest aber nur auf die instanz in UpnApplication und willst dann von der instanz aus test auslesen
 
Okay, Danke !

Ich steh aber grad ein bissl an, hättest du vielleich einen kleinen Hinweis für mich, wie ich das richtig hinbekomm :bahnhof:

Nur ein kleiner Schubser in die richtige Richtung 🙂
 
Du kannst doch einfach statt ersterem letzteres schreiben?
Java:
stapel.push(5);
stapel.push(2);
test.readOperator(1);
Java:
test.readOperand(5);
test.readOperand(2);
test.readOperator(1);
 
Vielen Dank ^^ Da hätt ich eigentlich selber draufkommen müssen ...!

Java:
 public String toString(){
   for (int i=0; i<=size; i++){
   return stack[i] + "\n";   }
}

Haste vll. auch einen Tipp für das Problem ! Ich würd gern die Elemente des Stacks ausgeben, wobei nach jedem ein Zeilenvorschub sein soll !

mit System.out.print wärs ja einfach, aber gibts auch 'ne möglichkeit mit return ??
 
Ich würd so was machen:
Java:
public String toString() {
    String str = "[";
    for (int i = 0; i <= size; i++) {
        str += "\n\t" + stack[i];
    }
    str += "\n]";
    return str;
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben