Wert eines Strings berechnen

Status
Nicht offen für weitere Antworten.
S

shigoro

Gast
Hallo Zusammen

Wenn ich z.B. folgenden String habe "3+5"

Kann ich den dann irgendwie in einen double mit dem entsprechenden Wert, in diesem Fall 8 umwandeln?

Zuerst dachte ich es funktioniert einfach mit
Code:
double result = Double.parseDouble("3+5");
Das geht jedoch nicht...

Gruss shigoro
 

DesertFox

Bekanntes Mitglied
schau dir mal StringTokenizer an. Die einzelnen Tokens kannst du dann in Doubles Parsen und dann berechnen
 

thE_29

Top Contributor
weil du einen String addieren willst???

Gib mal das Bsp aus deinem Programm, weil so ein Bsp braucht keiner, da schreibt jeder Double.parseDouble("8") hin!


Nachtrag: versteh jetzt was du meinst, du willst das sich die Zahlen zusammen zählen :)

Könntest via Tokenizer, oder Split machen, nur gibts da halt immer nur 1 Zeichen!
 
G

Guest

Gast
Ja die Grundidee mit dem StringTokenizer ist schon mal gut... Jedoch benötige ich das Ganze für einen Taschenrechner.

Und da kann beispielsweise auch mal so ein String "3+5-2*6" vorkommen. Und dann lässt sich das ganze ja nicht mehr mit StringTokenizer lösen, oder besser gesagt ich weiss nicht wie :roll:

Gruss Shigoro
 

Bleiglanz

Gesperrter Benutzer
dieses Problem hat sooooooooooooo einen Bart

String s = " 3+(4*17)-36/6 ";

gesucht ist eine Funktion
Code:
public double eval(String s){

}
ist in diversen Skriptsprachen eingebaut (Perl, PHP); in Java musst du das wohl selbst machen

// editiert, rückgabetyp müsste natürlich double sein :)
 

thE_29

Top Contributor
public static eval(String s){

}


ERRRR:::

Die Funktion würde net gehen, außer sie isn Konstruktor :D

Aber, tjo musst selbst implementieren!

Ich würds rekursiv machen!

Nur bin ich zz zu faul, bzw hab keine Zeit um mir das genauer anzusehen!
 

meez

Top Contributor
Hier eine ziemlich primitive Implementierung einer Rechnerklasse...(Unterstützt aber keine Klammern)
Aber du kannst z.B. sowas Rechnen: 3+4*25+3/7+4^27
Code:
double result = new SimpleCalculator().calculate("3+4*25+3/7+4^27");

Code:
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class SimpleCalculator {

	public SimpleCalculator() {}

	/**
	 *  + = addition 
         *   - = subtraction * = multiplication
         *  / = division ^ = power (pow) 
         *  % = square-root e.g 2%4 = 2
	 *  
	 */
	public double calculate(String expression) {
		if (expression == null) return Double.MIN_VALUE;
		expression = expression.trim();
		if (expression.equals("")) return Double.MIN_VALUE;		
		StringTokenizer str = new StringTokenizer(expression, "+-*/^%", true);
		List tokens = new ArrayList(str.countTokens());
		w : while (str.hasMoreTokens())
			tokens.add(str.nextToken().trim());
		w : while (tokens.indexOf("%") > -1) {
			f : for (int n = 0; n < tokens.size(); n++)
				calculate("%", tokens, n);
		}
		w : while (tokens.indexOf("^") > -1) {
			f : for (int n = 0; n < tokens.size(); n++)
				calculate("^", tokens, n);
		}
		w : while (tokens.indexOf("*") > -1) {
			f : for (int n = 0; n < tokens.size(); n++)
				calculate("*", tokens, n);
		}
		w : while (tokens.indexOf("/") > -1) {
			f : for (int n = 0; n < tokens.size(); n++)
				calculate("/", tokens, n);
		}
		w : while (tokens.indexOf("-") > -1) {
			f : for (int n = 0; n < tokens.size(); n++)
				calculate("-", tokens, n);
		}
		w : while (tokens.indexOf("+") > -1) {
			f : for (int n = 0; n < tokens.size(); n++)
				calculate("+", tokens, n);
		}
		if (tokens.size() != 1) return Double.MIN_VALUE;
		return toDouble((String) tokens.get(0),  Double.MIN_VALUE);
		
	}

	private void calculate(String calcType, List tokens, int n) {
		String token = (String) tokens.get(n);
		if (!token.equals(calcType)) return;
		double l, r, res;
		int s, e;
		if (n - 1 == -1) {
			s = 0;
			l = 1;
		} else {
			s = n - 1;
			l = toDouble((String) tokens.get(n - 1), 1);
		}
		if (n + 1 == tokens.size()) {
			e = tokens.size() - 1;
			r = 1;
		} else {
			e = n + 1;
			r = toDouble((String) tokens.get(n + 1), 1);
		}
		if (calcType.equals("%"))
			res = Math.sqrt(r);
		else if (calcType.equals("^"))
			res = Math.pow(l, r);
		else if (calcType.equals("*"))
			res = l * r;
		else if (calcType.equals("/"))
			res = l / r;
		else if (calcType.equals("-"))
			res = l - r;
		else if (calcType.equals("+"))
			res = l + r;
		else
			res = 0;
		tokens.add(e + 1, String.valueOf(res));
		f : for (int i = e; i >= s; i--)
			tokens.remove(i);
		n = n + (e - s);

	}

	private double toDouble(String number, double defaultNumber) {
		try {
			return Double.parseDouble(number);
		} catch (NumberFormatException e) {}
		return defaultNumber;
	}	
}
 

meez

Top Contributor
foobar hat gesagt.:
Juhu endlich gibts in Java auch Spagetti-Code
:?:
Das ist keine Sprungmarke sondern, wie gesagt, der Schleifenbezeichner...
(Sieht dort halt etwas seltsam aus, weils gleich soviele sind)...

So zu gebrauchen:
Code:
f1 : for (...) {
   f2 : for (...) {
      if (...) continue f1;
   }
}
 

thE_29

Top Contributor
die braucht man aber überhaupt nie oder??

Gehts ohne dem auch, wenn ja gewöhn dir das ab, sieht ja schrecklich aus!

Wie labls und gotos, paa
 

Illuvatar

Top Contributor
Na hin und wieder finde ich es auch äußerst sinnvoll, eine weiter äußere Schleife abzubrechen/fortzufahren, oder in großen Schleifen diese einfach nur der Verständlichkeit halber zu benennen. Allerdings finde ich, dass es so, wie meez es macht, schon eher unleserlicher wird ;)
 

meez

Top Contributor
Das Beispiel ist auch ohne die Bezeichner unleserlich, da es 7 while Schleifen mit je einer for Schleife hat...
Ich habe mir halt angewöhnt, den Bezeichner immer gleich am Anfang zu schreiben....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Erste Schritte Wert eines Strings übergeben Java Basics - Anfänger-Themen 8
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
S Wert innerhalb eines anderen Wertes Java Basics - Anfänger-Themen 3
I bestimmten Wert eines Arrays Java Basics - Anfänger-Themen 23
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
J Wert eines Arrays einer Variable zuweisen, sobald der Wert eines anderen Arrays eintritt Java Basics - Anfänger-Themen 2
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
J Erste Schritte Zweithöchster Wert eines Arrays herausfinden - warum klappt mein Code nicht? Java Basics - Anfänger-Themen 3
S Name eines boolean ausgeben (nicht den Wert) Java Basics - Anfänger-Themen 43
P Wert eines JButtons Java Basics - Anfänger-Themen 6
Semox Ersten Wert eines Intervalls bei Berechnung einschließen Java Basics - Anfänger-Themen 8
M Sha256-Wert eines Files bestimmen Java Basics - Anfänger-Themen 13
E Verständnis frage zum return wert eines Arrays Java Basics - Anfänger-Themen 7
C Überprüfung eines Arrays auf einen speziellen Wert Java Basics - Anfänger-Themen 5
R Eine Variable soll den Wert von t_leer (eines JLabel)annehm Java Basics - Anfänger-Themen 3
R Probleme beim umwandeln eines String zu einem Int Wert Java Basics - Anfänger-Themen 3
J Wie kann ich den höchsten Wert eines Arrays ermitteln? Java Basics - Anfänger-Themen 17
U wert eines nicht übergebenen parameters festlegen Java Basics - Anfänger-Themen 5
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
J Wert in Dropdown Menü kursiv schrieben Java Basics - Anfänger-Themen 19
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
G Input/Output getText() gibt keinen Wert! Java Basics - Anfänger-Themen 13
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
B Map<String, FilterMeta, wie Wert bekommen? Java Basics - Anfänger-Themen 4
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
1 Array nimmt falschen Wert auf! Java Basics - Anfänger-Themen 2
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
J Umwandlung String zu ASCII-Wert und anders Java Basics - Anfänger-Themen 17
P Verzweigungen Wert zurück geben Java Basics - Anfänger-Themen 2
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
F Boolean Methode Wert ausgeben. Java Basics - Anfänger-Themen 2
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
L Wert einer Webeseiteauslesen Java Basics - Anfänger-Themen 6
D Erste Schritte Wert im Array suchen Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
O Wert in einer Schleife unterschiedlich erhöhen Java Basics - Anfänger-Themen 2
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
F Java int-Wert wird resetet Java Basics - Anfänger-Themen 21
J Erste Schritte Wert aus JTextField zurückgeben Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben