Verknüpfte If - Abfrage

05/30/2015 14:18 The_Dentist#1
Hallo,

Ich habe gerade ein kleines Problem bei einer If- Abfrage.

Folgendes soll erreicht werden:

Eingabe ein String z.B. 1+*1
Diese Eingabe soll in Chars durchlaufen werden.

Nun möchte ich sowas wie:

Code:
 if(!((s.charAt(i) == '+' || s.charAt(i) == '-' || s.charAt(i) == '/' || s.charAt(i) == '*') 
                        && Character.isDigit(i + 1) || s.charAt(i + 1) != '(')){
                        System.out.println("Es können keine zwei binäre Operationen aufeinander folgen!");
                        return false;
                }
Also in einer For-Schleife laufe, ich die einzelnen Chars des Strings durch und möchte nun überprüfen ob eine binäres "Operationszeichen" auftritt(+,-,*,/), jetzt soll die darauffolgende Stelle überprüft werden, sollte diese keine Zahl oder auch keine Klammer sein, soll er abbrechen.

Ich bin vermutlich gerade einfach nur zu doof, weil ich schon zu lange jetzt daran sitze. Kann mir dabei gerade Jemand helfen?

Vielen Dank!

Gruß
05/30/2015 14:45 Zunft#2
Ich vermute dein Problem liegt in der for-Schleife.. Ich würde es folgendermaßen lösen:

Code:
String s = "1+*1";
        
        int i = 1;
        
        for(Character c : s.toCharArray())
        {
            if(c == '/' || c == '-' || c == '+' || c == '*')
            {
                if(Character.isDigit(s.charAt(i)))
                {
                   
                }
                else
                {
                    System.out.println("Es können keine zwei binäre Operationen aufeinander folgen!");
                }
            }
            
            i++;
        }
05/30/2015 17:04 Belur#3
Mit einem Regex kann man gut prüfen ob keine 2 Rechenzeichen aufeinander folgen:
Code:
String s = "1+*1";
String pattern = ".*[\\*\\/\\+\\-]{2}.*";
 if(s.matches(pattern)){
	System.out.println("Es können keine zwei binäre Operationen aufeinander folgen!");
  }
Gibt sicherlich bessere reguläre Ausdrücke dafür, aber ich hab schon länger nicht mehr damit gearbeitet ;p