-
התחלתי להכין יישום בj2me (גימטריאון), אבל יש מניעות...
דבר ראשון - זה לא נותן לעשות switch לסטרינג, אלא רק לint
דבר שני - עשיתי בif else ונותן שגיאה בזמן ריצה
לפי השגיאות אני חושב שהטעות נמצאת בשורות האלה:for (int i = 0; i <= str.length(); i++) { String sub = str.substring(i, i + 1);
הקוד המלא:
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.StringItem; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.MIDlet; public class gematrionMIDlet extends MIDlet implements CommandListener { private Display display; private Form form = new Form("גימטריאון"); private Command submit = new Command("חישוב", Command.SCREEN, 1); private Command exit = new Command("יציאה", Command.EXIT, 1); private TextField textfield = new TextField("כתוב כאן מילים לחישוב", null, 1000, TextField.ANY); private StringItem stringitem = new StringItem(null, "0"); public gematrionMIDlet() { display = Display.getDisplay(this); form.addCommand(exit); form.addCommand(submit); form.append(textfield); form.append(stringitem); form.setCommandListener(this); } public void startApp() { display.setCurrent(form); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public void commandAction(Command command, Displayable displayable) { if (command == submit) { String str = textfield.getString(); int num = 0; for (int i = 0; i <= str.length(); i++) { String sub = str.substring(i, i + 1); if (sub == "א") num += 1; else if (sub == "ב") num += 2; else if (sub == "ג") num += 3; else if (sub == "ד") num += 4; else if (sub == "ה") num += 5; else if (sub == "ו") num += 6; else if (sub == "ז") num += 7; else if (sub == "ח") num += 8; else if (sub == "ט") num += 9; else if (sub == "י") num += 10; else if (sub == "כ" || sub == "ך") num += 20; else if (sub == "ל") num += 30; else if (sub == "מ" || sub == "ם") num += 40; else if (sub == "נ" || sub == "ן") num += 50; else if (sub == "ס") num += 60; else if (sub == "ע") num += 70; else if (sub == "פ" || sub == "ף") num += 80; else if (sub == "צ" || sub == "ץ") num += 90; else if (sub == "ק") num += 100; else if (sub == "ר") num += 200; else if (sub == "ש") num += 300; else if (sub == "ת") num += 400; } this.stringitem.setText(Integer.toString(num)); } else if (command == exit) { destroyApp(false); notifyDestroyed(); } } }
השגיאה:
דבר שלישי - איך אפשר לעשות שהחישוב יהיה אוטומטית, ולא בלחיצה על 'חישוב' (כמו oninput)?
בjavascript וactionscript הצלחתי לעשות את היישום
-
@נ-נח אמר בעזרה | java me:
תראה את הקוד שהבאת:for (int i = 0; i <= str.length(); i++) {
זה אומר ב"סיבוב" הראשון i יהיה שווה 0. כמה הוא יהיה בסיבוב האחרון? str.length() שהרי תנאי היציאה הינו רק כאשר i יהיה גדול מהאורך. כלומר אם מדובר במילה אבא, הlength הוא 3, אז יהיה 0, 1, 2, 3 וזה מיותר כי הרי יש לנו רק שלוש אותיות.
אז ראשית תוריד את השווה, שיהיה רק i < str.length() ואז כשיהיה 3 ה"סיבוב" לא יתבצע, ויהיה לנו רק 0, 1, 2.בקשר לקוד
String sub = str.substring(i, i + 1);
יש מתודה פשוטה יותר לקחת אות בודדת:
char sub = str.charAt(i);
אבל אז תצטרך לעדכן קצת את הקוד שלך, להחליף בכל מקום את אותיות ההשוואה ממרכאות כפולות (שזה סטרינג) למרכאה בודדת (שזה char = תו בודד).
-