GustavusGans
Grünschnabel
Hallo,
Ich habe im Moment ein kleines Projekt einen Taschenrechner zu machen und wir haben auch schon ein paar Grundlagen gemacht wie Punkt vor Strich Rechnung, allerdings scheitert es bei uns an den Klammer (also Klammer-vor-Punkt-vor-Strich-Regel) und wollte deshalb fragen ob jemand von euch eine Idee hat wie das klappen könnte.
P.S.: Wir haben schon eine Sache herausgefunden und zwar entfernt er die Klammern nicht, was Voraussetzung für unsere Idee wäre ^^"
hier der Code:
Ich habe im Moment ein kleines Projekt einen Taschenrechner zu machen und wir haben auch schon ein paar Grundlagen gemacht wie Punkt vor Strich Rechnung, allerdings scheitert es bei uns an den Klammer (also Klammer-vor-Punkt-vor-Strich-Regel) und wollte deshalb fragen ob jemand von euch eine Idee hat wie das klappen könnte.
P.S.: Wir haben schon eine Sache herausgefunden und zwar entfernt er die Klammern nicht, was Voraussetzung für unsere Idee wäre ^^"
hier der Code:
Java:
import java.util.Scanner;
public class FindeBaum {
public static void main(String[] args) {
while (true) {
FindeBaum fb = new FindeBaum();
Scanner scan = new Scanner(System.in);
System.out.print("Eingabe:");
String input = scan.nextLine();
int res = fb.plusminus(fb.Brackets(input));
System.out.println("Ergebnis:" + res);
}
}
public String Brackets(String input) {
int inb = 0;
FindeBaum fb = new FindeBaum();
if(fb.braccheck(input) == false)return input;
int bcount = 0;
String[] putTogether = new String[input.length()];
String inBrackets = "";
boolean bbracs = false;
for(int i = 0; i < input.length(); i++) {
if(input.charAt(i) == '(')bcount++;
if(input.charAt(i) == ')')bcount--;
if(input.charAt(i) == '(' && bcount == 0 && bbracs == false) {
bbracs = true;
i++;
inb++;
}
if(input.charAt(i) == ')' && bcount == 1) {
i++;
inb++;
}
putTogether[inb] = putTogether[inb] + input.charAt(i);
}
String res = "0+";
for(int i = 0; i < putTogether.length; i++) {
if(putTogether[i] != null)res = res + fb.plusminus(fb.Brackets(putTogether[i]));
}
System.out.println(res);
return fb.Brackets(res);
}
public int timesby(String input) {
FindeBaum fb = new FindeBaum();
char[] split = new char[input.length()];
String[] splitcalc = new String[input.length()];
for (int i = 0; i < input.length(); i++) {
split[i] = input.charAt(i);
}
int csign = 0;
for (int i = 0; i < split.length; i++) {
if (splitcalc[csign] == null)
splitcalc[csign] = "";
if (split[i] == '*' || split[i] == '/') {
csign++;
splitcalc[csign] = "";
splitcalc[csign] = splitcalc[csign] + split[i];
csign++;
splitcalc[csign] = "";
i++;
}
splitcalc[csign] = splitcalc[csign] + split[i];
}
return fb.calc(splitcalc);
}
public int plusminus(String input) {
FindeBaum fb = new FindeBaum();
char[] split = new char[input.length()];
String[] splitcalc = new String[input.length() + 1];
for (int i = 0; i < input.length(); i++) {
split[i] = input.charAt(i);
}
int csign = 0;
for (int i = 0; i < split.length; i++) {
if (splitcalc[csign] == null)
splitcalc[csign] = "";
if (split[i] == '+' || split[i] == '-') {
csign++;
if (splitcalc[csign] == null)
splitcalc[csign] = "";
splitcalc[csign] = splitcalc[csign] + split[i];
csign++;
if (splitcalc[csign] == null)
splitcalc[csign] = "";
i++;
}
splitcalc[csign] = splitcalc[csign] + split[i];
}
for (int i = 0; i < splitcalc.length; i++) {
if ((splitcalc[i].equals("+") || splitcalc[i].equals("-")) == false) {
splitcalc[i] = Integer.toString(fb.timesby(splitcalc[i]));
}
if (splitcalc[i + 1] == null)
break;
}
return fb.calc(splitcalc);
}
public int calc(String[] splitcalc) {
int res = Integer.parseInt(splitcalc[0]);
for (int i = 0; i < splitcalc.length - 2; i++) {
if (splitcalc[i + 1] == null)
break;
if (splitcalc[i + 1].equals("+")) {
res = res + Integer.parseInt(splitcalc[i + 2]);
i++;
} else if (splitcalc[i + 1].equals("-")) {
res = res - Integer.parseInt(splitcalc[i + 2]);
i++;
} else if (splitcalc[i + 1].equals("*")) {
res = res * Integer.parseInt(splitcalc[i + 2]);
i++;
} else if (splitcalc[i + 1].equals("/")) {
res = res / Integer.parseInt(splitcalc[i + 2]);
i++;
}
}
return res;
}
public boolean braccheck(String input) {
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) == '(')
return true;
}
return false;
}
}