Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Android - číselné zadání na výsledek

Ahoj.

Zkouším si kalkulačku na androidu.

Zadání je jednoduché. Do stringu nahraju například:

string s = "40/5";
float vysledek = Float.valueOf(s);  //  Tady to spadne



Chci se zeptat, proč to padá a jak to obejít ?
Ted to hlásí na tom řádku: Unfortunately kalkulacka has stopped.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Protože takhle to opravdu nepůjde. Buď si napiš vlastní evaluator matematických výrazů, nebo si vygo…
Wikan 24.09.2013 13:26
Wikan
Taky jsem k tomu dopěl po asi půlhodině googlování. Používám prostředí Eclipse. Jakým způsobem přid…
Flash_Gordon 24.09.2013 13:36
Flash_Gordon
Tak jestli ti nevadí, že by sis do aplikace přidal bezpečností díru jako vrata, tak i tohle by bylo…
Wikan 24.09.2013 15:27
Wikan
Ona by to možná ani tak velká díra nebyla, protože zpracovává jen číselné vstupy z aplikace. Nelze d…
Flash_Gordon 24.09.2013 15:53
Flash_Gordon
Už jsi někdy slyšel o regulárním výrazu? :) poslední
MaSo 25.09.2013 00:38
MaSo

Taky jsem k tomu dopěl po asi půlhodině googlování.

Používám prostředí Eclipse. Jakým způsobem přidám onen evaluator do mé aplikace?
A který nejlépe? :)

Zatraceně, kdyby ta Java pro android nebyla tak osekaná.
Stačilo by použít:

import javax.script.*;
....
engine.eval(formula)).intValue(); ]:(

Ona by to možná ani tak velká díra nebyla, protože zpracovává jen číselné vstupy z aplikace.
Nelze do ní vložit vlastní kódy.

Teďka to mám takto:

String st = display1.getText().toString();
		float result = 0;
		
		for(int i=0;i<st.length();i++)
		{
		  if(st.charAt(i)=='+')
		  {
		    result=Float.parseFloat(st.substring(0, i))+Float.parseFloat(st.substring(i+1, st.length()));
		   
		  }  
		  if(st.charAt(i)=='-')
		  {
		    result=Float.parseFloat(st.substring(0, i))-Float.parseFloat(st.substring(i+1, st.length()));
		   
		  }
		  if(st.charAt(i)=='*')
		  {
		    result=Float.parseFloat(st.substring(0, i))*Float.parseFloat(st.substring(i+1, st.length()));
		   
		  } 
		  if(st.charAt(i)=='/')
		  {
		    result=Float.parseFloat(st.substring(0, i))/Float.parseFloat(st.substring(i+1, st.length()));
		   
		  } 
		  
		}
		
		display1.setText(Float.toString(result));

Ale má to nevýhodu, že jak tam někdo napíše více, jak dva operandy - např. 2+3-6 tak to spadne :-(

Zpět do poradny Odpovědět na původní otázku Nahoru