Guten Abend!
Folgendes Problem, soll ein Java Programm schreiben, welches einen UPN (UPN = umgekehrte polnische Notation) Taschenrechner Simuliert. Habe bereits folgenden Quellcode geschrieben:
Allerdings bekomme ich in der Funktion ReadFirst ab Zeile 52 überall wo "Vorzeichen" steht die Fehlermeldung:
non-static variable Vorzeichen cannot be referenced from a static context
Wo liegt der Fehler?
Folgendes Problem, soll ein Java Programm schreiben, welches einen UPN (UPN = umgekehrte polnische Notation) Taschenrechner Simuliert. Habe bereits folgenden Quellcode geschrieben:
Java:
import java.io.*;
public class stapel {
private static int[] stack;
private static int size;
int Vorzeichen;
boolean ende;
public static void init(){
stack = new int[10];
size = 0;
}
public static boolean empty(){
return size == 0;
}
public static int peek(){
return stack[size-1];
}
public static int pop(){
return stack[--size];
}
public static void push(int value){
if(size == stack.length){
reSize();
}
stack[size++] = value;
}
public static void reSize(){
int[] tmp = new int[stack.length * 2];
for(int i = 0; i < stack.length; i++){
tmp = stack;
}
stack = tmp;
}
public static int getSize(){
return size;
}
public static void readFirst() throws IOException{
int input = System.in.read();
if(input >= '0' && input <= '9'){
int tmp = readZahl(input - '0');
if(tmp != -1){
if(Vorzeichen == '-'){
tmp *= -1;
}
stapel.push(tmp);
Vorzeichen = 0;
}
} else if (input == '+' || input == '-' || input == '*' || input == '/') {
Vorzeichen = input;
} else if (input == '\n' || input == '\r'){
if(Vorzeichen == '+' || Vorzeichen == '-' || Vorzeichen == '*' || Vorzeichen == '/'){
rechne(Vorzeichen);
Vorzeichen = 0;
} else if(!stapel.empty()){
ende = true;
}
} else {
System.out.println("böse eingabe!");
eatEvil();
}
}
public static int readZahl(int number) throws IOException{
int input;
while(true){
input = System.in.read();
if(input >= '0' && input <= '9'){
number = number * 10 + (input - '0');
} else if(input == '\n'){
break;
} else {
System.out.println("Fehler!");
eatEvil();
return -1;
}
}
return number;
}
public static void eatEvil() throws IOException{
while(true){
int input = System.in.read();
if (input == '\r') {
} else if (input == '\n') {
break;
} else {
}
}
}
public static void rechne(int operator){
int ergebnis = 0;
if(stapel.getSize() >= 2){
int zahl2 = stapel.pop();
int zahl1 = stapel.pop();
switch (operator){
case '+':
ergebnis = zahl1 + zahl2;
System.out.println(zahl1 + " + " +zahl2 + " = " + ergebnis);
break;
case '-':
ergebnis = zahl1 - zahl2;
System.out.println(zahl1 + " - " +zahl2 + " = " + ergebnis);
break;
case '*':
ergebnis = zahl1 * zahl2;
System.out.println(zahl1 + " * " +zahl2 + " = " + ergebnis);
break;
case '/':
if(zahl2 != 0){
ergebnis = zahl1 / zahl2;
System.out.println(zahl1 + " / " +zahl2 + " = " + ergebnis);
} else {
System.out.println("Ungültige Operation: Division durch 0");
stapel.push(zahl1);
}
break;
}
stapel.push(ergebnis);
} else {
System.out.println("Zu wenige Elemente für diese Aktion vorhanden!");
}
}
Allerdings bekomme ich in der Funktion ReadFirst ab Zeile 52 überall wo "Vorzeichen" steht die Fehlermeldung:
non-static variable Vorzeichen cannot be referenced from a static context
Wo liegt der Fehler?