anmerkungen zum adk oder nachlese projektwoche 2014

Werbung
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.
Herunterladen