anmerkungen zum adk oder nachlese projektwoche 2014 worgtsone.scienceontheweb.com - mailto: worgtsone @ hush.com 2014-07-24 – 24. Juli 2014 Inhaltsverzeichnis 1 onclick 1.1 Bemerkungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 Rekursive prirorisierende Parserei 2 Disclaimer Wissen ist zum Teilen da. Ich teile mein Wissen mit Ihnen, lieber Kollege. Ich bin aber nicht perfekt. Unter [email protected] nehme ich dankbar Ihre Verbesserungsvorschläge entgegen. * Legal Blurb: Alle Informationen in diesem Dokument sind falsch, unvolständig, irreführend, irrelevant und / oder funktionieren einfach nicht. Wenn Sie es trotzdem benutzen, und es geht dabei etwas kaputt, ist das Ihr Problem, nicht meins. * Bitte teilen Sie meine Web-Adresse nicht Ihren Schülern mit. 1 onclick wir haben einen taschenrechner geschrieben. nun – wir haben es versucht. im adk wurde zunächst ein neues projekt bestellt; sodann im grafischen layout mit edittexts und knöpfen (buttons) verziert. irgendwann kommt der tag, wo man aktionen (aka: funktionen) an die knöpfe binden muß. (einen listener scheinen sie schon mit sich rumzuschleppen, sonst könnten sie beim drüberwischen nicht so schön flackern.) dazu braucht es zwei schritte: 1. im eigenschaften-fenster als onclick-eigenschaft den funktionsnamen (zB verdopple) eintragen. 2. in MainActivity.java eine Funktion verdopple schreiben: public void verdopple (View view) { EditText et1 = (EditText) findViewById(R.id.editText1); int i=Integer.parseInt(et1.getText().toString()); i+=i; et1.setText(String.valueOf(i)); } 1 2 REKURSIVE PRIRORISIERENDE PARSEREI 1.1 2 Bemerkungen • wer et1 mehr als einmal verwenden will (zB in Funktionen namens mal, geteilt, wurzel...) sollte es vielleicht global für MainActivity.java machen und einmalig in @Override protected void onCreate (... ) setzen. • der view findet sich • R.id.editText1 ist eine variable (oder so) innerhalb der ressourcen der app, irgendwo tief im projektbaum versteckt. editText ist dabei der default-name; wer den in den ressourcen ändert oder gar die variable duch einen festwert ersetzt, muß das hier auch tun. • die beschriftungen sind in den resourcen, damit man die variablen bei sprachwechsel ganz schnell mit anderen werten / worten überschreiben kann. • das gecaste zu int, text, String, text und value geht mir auch tierisch auf den geist, muß aber sein. • doubles und Strings untested – ist aber bestimmt ähnlich 2 Rekursive prirorisierende Parserei 1+2*3**4 (** bedeutet hoch) muß man priorisiert ausrechnen: die klammern zuerst. parsen ist eigentlich falsch gesagt; er soll vereinfachen; und das heißt: 1. klammern nachzählen; 2. sofern s mit - anfängt: eine 0 davorsetzen; 3. alle klammern vereinfachen, d.h. wegmachen, indem deren inhalt ausgerechnet wird; 4. alle potenzen vereinfachen, d.h. wegmachen, indem deren inhalt ausgerechnet wird; 5. alle mal und geteilt wegmachen, indem deren inhalt ausgerechnet wird; achtung, 1/2*3 ungleich 1/(2*3) ! 6. alle plus und minus wegmachen, indem deren inhalt ausgerechnet wird; die parser-routine hätte ich gerne rekursiv; die lösung ist mir soeben beim schlafen eingefallen: double parse(String s) { // s ist der math. ausdruck if ( numberOfKlammerAuf != numberOfKlammerZu ) return "klammern misshaped."; if ( s.hasKlammer ) s=s.substringBisKlammer + parse(s.substringInKlammer) + substringNachKlammer; while ( s.hasPotenz ) findeUndBerechneNaechstePotenz(); while ( s.hasPunktRechnung ) findeUndBerechneNaechstePunktRechnung(); while ( s.hasPunktRechnung ) findeUndBerechneNaechstePunktRechnung(); while ( s.hasStrichRechnung ) findeUndBerechneNaechsteStrichRechnung(); return s; // nanu, kompiliert nicht... } probleme bleiben bei der darstellung negativer zahlen und negativer exponenten. und so bleibt etwas für die näxte projektwoche.