-
התחלתי להכין יישום ב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 הצלחתי לעשות את היישום
-
התחלתי להכין יישום ב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 = תו בודד).
-
@נ-נח אמר בעזרה | 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 = תו בודד).
-
@dovid תודה! זה עובד, וגם למדתי דברים חדשים.
לא הצלחתי עם העדכון של התוצאה (נראה לי שהקישור שהבאת זה לjava, לא לjava me)עריכה: הצלחתי עכשיו!
אשריך!!!!

@נ-נח אפשר בבקשה את הJAR? תודה
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות