Taschenrechner

javanick

Mitglied
Hallo an alle,
ich bin ein Java-ME Anfänger und würde gerne ein Taschenrechner auf meinem Handy haben, der (das ist das wichtigste), wenn man das Programm verlässt den aktuellen Wert lokal speichert und ihn bei Programmstart wieder einliest. Hat jemand so ein Programm?

Danke schon im vorraus.

javanick
 

U2nt

Bekanntes Mitglied
Du schreibst du bist Java ME Anfänger und fragst ob jemand soein Programm hat? Durch den Satz das du ein Afnänger bist, dacht ich eher du willst dir ein selber programmieren, oder willst du das, indem du dir das anguckst? :eek:
 

The_S

Top Contributor
Versuchs doch mal selbst, so schwer ist das nicht. Ist gleichzeitig ne gute Übung und wenn dabei Fragen auftreten helfen wir dir gerne.

Alternativ kann ich dir für einen dreistelligen Betrag auch einen kleinen Taschenrechner nach deinen Wünschen bauen ;) .
 

javanick

Mitglied
Hi Leute,
Sorry dass ich so lange nicht hier war, aber die Schule fordert viel Zeit.
Ich habe versucht einen Taschenrechner zu programmieren, aber es ist mir nicht gelungen.
Ich wäre euch sehr dankbar wenn ihr es mir abnehmen würdet.

LG javanick
 

XHelp

Top Contributor
Du kannst ja eher Fragen stellen, die man die beantwortet. Ansonsten wäre der Vorschlag eher in der Jobbörse besser aufgehoben.
 

dvid85

Aktives Mitglied
Also das hört sich ja so an, also wenn du gar nichts lernen willst, sondern einfach nur so einen Rechner brauchst. Wahrscheinlich für die Schule.. und wenn ein Lehrer kommt beendest du schnell das Programm, wenn er wieder weg ist, startest du es wieder beim aktuellen stand. Richtig? :D
 

Blakh

Bekanntes Mitglied
Dann zeig doch mal dein Programm, welches du erstellt hast.

Asnonsten: Dreist :noe: .... Programmierer sind leider nicht dumm genug, auf sowas reinzufallen. Es sei denn du bist weiblich. :applaus:
 

javanick

Mitglied
dvid85 hat gesagt.:
Also das hört sich ja so an, also wenn du gar nichts lernen willst, sondern einfach nur so einen Rechner brauchst. Wahrscheinlich für die Schule.. und wenn ein Lehrer kommt beendest du schnell das Programm, wenn er wieder weg ist, startest du es wieder beim aktuellen stand. Richtig?
Nein es ist nicht für die Schule, sondern ich möchte einfach nur einen Taschenrechner als Übung.
 

timbeau

Gesperrter Benutzer
Überlies die oberen Beiträge nicht. Entweder selber machen und bei einzelnen(!) Problemen hier anfragen oder es als Job anbieten. Angebot haste ja schon bekommen.
 

ARadauer

Top Contributor
Hi Leute,
Sorry dass ich so lange nicht hier war, aber die Schule fordert viel Zeit.
Ich habe versucht einen Taschenrechner zu programmieren, aber es ist mir nicht gelungen.
Ich wäre euch sehr dankbar wenn ihr es mir abnehmen würdet.

LG javanick

Nein es ist nicht für die Schule, sondern ich möchte einfach nur einen Taschenrechner als Übung.
Du willst das wir zur Übung für dich einen Taschenrechner schreiben? :lol:
 

javanick

Mitglied
Nein ich programmiere ihn selber.
Hab schon mal angefangen:
Java:
package projekte.taschenrechner;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class Taschenrechner extends MIDlet implements CommandListener {

	Display display;
	Form form;
	Command rechnen;
	Command exit;
	Command loeschen;
	TextField tf;

	public Taschenrechner() {
		// TODO Auto-generated constructor stub
		rechnen = new Command("Text ausrechnen", Command.SCREEN, 1);
		loeschen = new Command("Löschen", Command.SCREEN, 1);
		exit = new Command("Beenden", Command.EXIT, 1);
		tf = new TextField("Hier Text Eingeben:", "", 100, TextField.ANY);
		form = new Form("Taschenrechner");
		display = Display.getDisplay(this);
		form.addCommand(exit);
		form.addCommand(rechnen);
		form.addCommand(loeschen);
		form.append(tf);
		form.setCommandListener(this);
	}

	protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {
	}

	protected void pauseApp() {
	}

	protected void startApp() throws MIDletStateChangeException {
		// TODO Auto-generated method stub
		display.setCurrent(form);
	}

	public static String berechneAusdruck(String in) {
		String ausdruck = "";
		char operator;
		int indexOperator;
		int indexOperandLinksAnfang;
		int indexOperandRechtsEnde;
		String stringOperandLinks;
		String stringOperandRechts;
		String stringAusdruckLinks;
		String stringAusdruckRechts;

		for (int i = 0; i < in.length(); i++) {
			if (in.charAt(i) == ',') {
				ausdruck += ".";
			} else {
				if (in.charAt(i) == '-') {
					ausdruck += "+-";
				} else {
					ausdruck += in.charAt(i);
				}
			}
		}
		while ((indexOperator = ausdruck
				.indexOf(operator = naesterOperator(ausdruck))) > 0) {
			indexOperandLinksAnfang = indexOperandLinksAnfang(ausdruck,
					indexOperator);
			indexOperandRechtsEnde = indexOperandRechtsEnde(ausdruck,
					indexOperator);
			stringOperandLinks = ausdruck.substring(indexOperandLinksAnfang,
					indexOperator);
			stringOperandRechts = ausdruck.substring(indexOperator + 1,
					indexOperandRechtsEnde);
			stringAusdruckLinks = ausdruck
					.substring(0, indexOperandLinksAnfang);
			stringAusdruckRechts = ausdruck.substring(indexOperandRechtsEnde);
			ausdruck = stringAusdruckLinks
					+ rechne(stringOperandLinks, operator, stringOperandRechts)
					+ stringAusdruckRechts;
		}
		return ausdruck;
	}

	private static int indexOperandLinksAnfang(String ausdruck,
			int indexOperator) {
		int ret = indexOperator - 1;

		while (ret > 0
				&& (Character.isDigit(ausdruck.charAt(ret - 1)) || ausdruck
						.charAt(ret - 1) == '.')) {
			ret--;
		}
		if (ret > 0 && ausdruck.charAt(ret - 1) == '-') {
			ret--;
		}
		return ret;
	}

	private static int indexOperandRechtsEnde(String ausdruck, int indexOperator) {
		int ret = indexOperator + 1;

		if (ret < ausdruck.length() && ausdruck.charAt(ret) == '-') {
			ret++;
		}
		while (ret < ausdruck.length()
				&& Character.isDigit(ausdruck.charAt(ret))) {
			ret++;
		}
		return ret;
	}

	private static String rechne(String operandLinks, char operator,
			String operandRechts) {
		switch (operator) {
		case '+':
			return Double.toString(Double.parseDouble(operandLinks)
					+ Double.parseDouble(operandRechts));
		case '-':
			return Double.toString(Double.parseDouble(operandLinks)
					- Double.parseDouble(operandRechts));
		case '*':
			return Double.toString(Double.parseDouble(operandLinks)
					* Double.parseDouble(operandRechts));
		case '/':
			return Double.toString(Double.parseDouble(operandLinks)
					/ Double.parseDouble(operandRechts));
		default:
			return null;
		}
	}

	private static char naesterOperator(String a) {
		int div = a.indexOf('/');
		int mul = a.indexOf('*');
		if (div > 0 && mul > 0) { // wenn es beide Operanten gibt
			if (div < mul) {
				return '/';
			} else {
				return '*';
			}
		} else {
			if (div > 0)
				return '/';
			if (mul > 0)
				return '*';
		}
		// es gibt keinen '/' oder '*' Operanten mehr
		if (a.indexOf('+') > 0) {
			return '+';
		} else {
			return '-';
		}
	}

	public void commandAction(Command c, Displayable d) {
		if (c == rechnen) {
			String in = tf.getString();
			String out = berechneAusdruck(in);
			form.append(out + "\n");
		}
		if (c == loeschen) {
			form.deleteAll();
			form.append(tf + "\n");
		}
		if (c == exit) {
			try {
				destroyApp(true);
			} catch (MIDletStateChangeException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}
Funzt soweit, aber wieso funktioniert das mit destroyApp nicht?
 

javanick

Mitglied
OK.
Funktioniert, aber ich würde gern ein icon für den rechner haben.
Wie geht das?

P.S.: ich benutze eclipse pulsar.

LG und Danke
javanick
 

javanick

Mitglied
habs wie hier beschrieben gemacht, funktioniert aber nicht.
Wie muss ich den Pfad komplett(C:\...) angeben oder nur so(.\res\Rechner.ico)?
Oder muss das icon eine bestimmte Größe haben(ich habs mit 32*32 und 16*16 versucht)?
 
Zuletzt bearbeitet:

The_S

Top Contributor
Das Icon muss natürlich mit im JAR liegen und dann musst du den Pfad angeben, wo das Icon im Pfad liegt. Je nach Handy wird eine andere Auflösung benötigt. Je nach Handy gibt man das Icon auch manchmal mit dem Icon-Tag im JAD an, manchmal aber auch als Parameter im MIDlet-1-Tag. Am Besten an beiden Stellen angeben. Handys können am Besten mit PNG umgehen, von daher würde ich dieses Format wählen - ist aber auch keine Garantie, dass es dann überall funktioniert.
 

javanick

Mitglied
Hab´s als PNG mit 16*16 und 32*32 Pixel versucht, ging aber nicht.
Hab´ den Pfad ./res/Rechner.png angegeben, liegt es daran?

Nutze übrigens ein Sony Ericsson F305.
 

javanick

Mitglied
Ich glaube Eclipse legt automatisch einen "res" Ordner an.

Habe es ohne Punkt und ohne Ordner mit 16*16 Pixeln Versucht, geht aber nicht.
Mach ich was falsch???
 

javanick

Mitglied
Danke!
Habe die JAR entpackt, es gibt in der JAR keinen RES Ordner. Eclipse tut den Inhalt des RES Ordners in den Root der JAR.
Funktioniert jetzt einwandfrei.
 

Ähnliche Java Themen


Oben