Java Rechnung

Neue Frage »

Auf diesen Beitrag antworten »
Björn Java Rechnung

Meine Frage:
Hi zusammen :-)

folgendes Problem: Ich habe einen String mit Zahlen und Rechenzeichen. Ich möchte vor dem Mal-Zeichen die Zahl inklusive Vorzeichen mittels eines Substrings auslesen. Da im String ja + oder - und auch * oder / vorkommen kann wollte ich diese Fälle in der while-Anweisung abdecken. Leider bekomme ich immer eine OutofBounds-Exception (Zeile 23). Wenn ich nur eine Anweisung abfrage (also plus zum Beispiel) funktioniert es, nur bei mehreren nicht. Woran könnte das liegen?

Vielen Dank :-)

Meine Ideen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
package javarechnung;

public class JavaRechnung 
{
    public static void main(String[] args)  
    {
        String name = "15-16*6+24";
        char mal = '*';
        char minus = '-';
        char plus = '+';
        int zwischenSpeicher = 0;
        String zahl1 = "";
        
        for (int i=0; i<1000;i++)
        {
            if (name.charAt(i)==mal)
            {
                zwischenSpeicher = i;  
                do
                {
                    --i;
                }
                while (name.charAt(i)!=minus || name.charAt(i)!=plus); 
                zahl1=name.substring(i,zwischenSpeicher);
                break;
            }
        }
        System.out.println(zahl1);
    }
}
 
Auf diesen Beitrag antworten »
eulerscheZahl

code:
1:
for (int i=0; i<1000;i++)

Grob überschlagen hat der Inhalt der Variablen name weniger als 1000 Zeichen. Da kriegst du ein OutOfBounds bezüglich der oberen Grenze.
Wenn du dann bei --i; abziehst und vor dem '*' nicht an der selben Stelle '+' und '-' hast - was ja gar nicht geht, du brächtest && statt || - willst du auf charAt(-1) zugreifen. Das ist die Exception, die du letztlich angezeigt bekommst.
Auf diesen Beitrag antworten »
Björn

Super, danke dir. Da liegt das Problem.

Eine weitere Frage hätte ich noch:

Wenn ich den String name nehme und möchte mit der Methode replaceAll etwas ersetzen, funktioniert es nicht, z.B.

String name = "15-16*6+24";
name.replaceAll ("16*6",576);

Allerdings kommt da immer wieder der Ausgangsstring heraus. Liegt das vielleicht an dem Malzeichen, da es ein Char ist?

Vielen Dank :-)
Auf diesen Beitrag antworten »
eulerscheZahl

Strings sind immutable, können also nicht verändert werden. Daher geben Stringoperationen immer einen neuen String zurück. Den musst du auch auswerten:
code:
1:
name = name.replaceAll ("16*6","576");

Das zweite Argument muss ein String sein.
Ich weise dich aber darauf hin, dass das Ergebnis der Multiplikation 96 ist.

Und das '*' macht Probleme, weil es in regulären Ausdrücken eine andere Bedeutung hat.
 
Auf diesen Beitrag antworten »
Björn

Mist, ich hatte bei 576 die Anführungszeichen vergessen.

code:
1:
name = name.replaceAll ("16*6","576");


So war es eigentlich gedacht, wird aber auch nichts ändern?
Auf diesen Beitrag antworten »
eulerscheZahl

Ist mir dann auch noch aufgefallen, siehe edit.
replaceAll erwartet einen regulären Ausdruck, da ist das * schon reserviert, muss also escaped werden.
Auf diesen Beitrag antworten »
Björn

Danke für die Antworten :-)
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »