Java String mit + in Int umwandeln

DaVian

Cadet 4th Year
Registriert
Dez. 2008
Beiträge
91
Mein Programm sollte die Nullstellen einer Polynomfunktion 2.Grades berechnen.
Das Problem is wenn ich die Gleichung splitte kommt als 2. Term +bx+c heraus.
Wenn ich den nun wieder splitte kommt +b und +c heraus...diese beiden dingens lassen sich aber net in einen string umwandeln
ich brauche aber b und c und die vorzeichen sollten natürlich auch dabeibleiben....sonst kommt ja ein falsches ergebnis raus.
wie kann ich diese in Integer umwandeln ohne die Vorzeichen zu verlieren??

hier mein Code:

Code:
int a = 0, b = 0, c = 0, p = 0, q = 0;
        double x1 = 0, x2 = 0, y1 = 0, y2 = 0;
        String gleichung, restgleichung = null;
        gleichung = jText_gleichung.getText();
        String[] temp;

        String delimeter = "x²";
        temp = gleichung.split(delimeter);
        for(int i = 0; i < temp.length; i++) {
            a = Integer.parseInt(temp[0]);
            restgleichung = temp[1];
        }

        System.out.println(restgleichung);

        String delimeter2 = "x";
        temp = restgleichung.split(delimeter2);
        for(int i = 0; i < temp.length; i++) {
            b = Integer.parseInt(temp[0]);
            c = Integer.parseInt(temp[1]);
        }

        if( a!=1) {
            p = b/a;
            q = c/a;
        }

        x1 = -p/2 + Math.sqrt(p*p/4-q);
        x2 = -p/2 - Math.sqrt(p*p/4-q);
        y1 = a*(x1*x1)+b*x1+c;
        y2 = a*(x2*x2)+b*x2+c;

        jLabel_berechnung1.setText("Nullstellen");
        jLabel_erg1.setText("N("+x1+"|"+y1+")");
        jLabel_erg2.setText("N("+x2+"|"+y2+")");

Thx im voraus fürs Helfen
mfg
 
1.) Ein Integer ist eine Zahl und da darf auch nichts anderes, als eine Zahl eingefüllt werden und bei einer Zahl (z.B. +3) ist es vollkommen egal, ob diese nun 3, +3 oder +3.000 ist. Der Wert ist immer der selbe. Intern sind das nur 32 Bit von -2 Milliarden bis +2 Milliarden und für jede Zahl gibt es eine Kombination.

2.) if( a!=1) {
p = b/a;
q = c/a;
}

Da kannst du das if rausnehmen

3.) Ich würde keinen Integer nehmen, sondern einen Double. Wenn du nämlich zwei Integer dividierst, dann wird der Rest abgeschnitten. Das kann bei Gleichungen sehr blöd sein, wenn du dann mit den Ergebnissen weiter rechnen willst und dich dann wunderst, warum 1 / 2 * 4 0 ist.
 
Meine Mathematik ist schon etwas länger her, aber wenn du es genau haben willst, und auch nach der 16. Stelle bzw schon früher, wenn man Folgefehler einbezieht, keine Rechenfehler haben willst, nimm BigDecimal.

Grund?

PHP:
double val = 0;
for(int i=0;i<10;i++) {
val+=0.1;
System.out.println(val);
}

Ausgabe ist:

Code:
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999


:)

nox
 
Mach doch einfach mit toCharArray() ein Char-Array aus dem Gleichungsstring und parse dieses selber zeichenweise. Dann bist du wesentlich flexibler. Ist halt nur ne Logikaufgabe ;) Hab mal was zusammengetippt, damit mein Java nicht einrostet. Im Gegensatz zu deinem Code ist das wesentlich robuster, da die Reihenfolge der Variablen in der vom User eingegebenen Gleichung egal ist.
Code:
String gleichung = "3 x - 5x² -12";
String newGleichung = gleichung.replaceAll(" ", "");	// den ganzen Whitespace entfernen!
newGleichung = newGleichung.replaceAll("\\+", " ");		// + Zeichen sind nur hinderlich. Leerzeichen dienen als Trennung
newGleichung = newGleichung.replaceAll("-", " -") + " ";	// Leerzeichen vor Minus und sicherstellen, dass letztes Zeichen ein Leerzeichen ist damit unsere Schleife richtig funktioniert
// Variablen deklarieren
char[] charArray = newGleichung.toCharArray();
int[] foundNumbers = new int[4];  // Array mit 4 Einträgen für die 3 Zahlen sowie einem Dummyeintrag mit 0 als Wert (wenn eine Variable nicht in Formel existiert)
foundNumbers[0] = 0;
int lastStart = 0, position = 0;
int a = 0, b = 0, c = 0;	// gibt die Position der Variablen im foundNumbers-Array an (damit die Gleichung vom User in beliebiger Reihenfolge geschrieben werden kann)
char tmp;
// Parsen
for(int i=0; i < charArray.length; ++i){
	tmp = charArray[i];		// cachen bringt minimal bessere Performance und ist übersichtlicher
	if(!Character.isDigit(tmp) && tmp != '-'){
		if (tmp == 'x'){
			if((i+1) < charArray.length){		// vorausschauen um x² zu finden
				if(charArray[i+1] == '²') a = position + 1;
				else b = position + 1;
			} else b = position + 1;
		}
		if(lastStart != i){
			++position;
			if(position > 3) break;  // zur Sicherheit wenn Gleichung vom User nicht stimmt und damit das Array überschritten würde
			foundNumbers[position] = Integer.parseInt(newGleichung.substring(lastStart, i));	// substring beinhaltet exakt die Zahl und falls vorhanden noch das -
		}
		lastStart = i+1;
	}
}
for(int i = 1; i < 4; ++i){		// übrig bleibender Wert ist c!
	if(i != a && i != b) {
		c = i;
		break;
	}
}
System.out.println("a:" + foundNumbers[a]);
System.out.println("b:" + foundNumbers[b]);
System.out.println("c:" + foundNumbers[c]);
 
Zuletzt bearbeitet:
Sry sry hab nur gesehen, dass drei Werte gesucht werden(a,b,c). Nicht weiter gedacht ;)

Aber warum System.out.println("c:" + foundNumbers[c]); ?
 
Zurück
Oben