פורסם 2013 בדצמבר 811 שנים אהלן, עשיתי לפני שנתיים 5 יחידות בבגרות c#, והחלטתי עכשיו ללמוד קצת java , בקיצור יש לי בעיה קצת מוזרה,import java.util.Scanner;public class hfghfgh { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Please enter num of your brothers:"); int x= in.nextInt(); System.out.println(" please enter the name of the first brother"); String name1 = in.nextLine(); System.out.println(" please enter the name of the second brother"); String name2 = in.nextLine(); System.out.println(name1 +name2); }}כשאני מריץ את התכנית - בהתחלה היא מבקשת מהמשתמש להכניס את מספר האחים שיש לו(כמו שצריך)אבל אחרי שאני עושה את זה התכנית כותבת please enter the name of the first brother, ואז בלי לחכות שאני אכניס שם היא ישר מדלגת לפקודה הבאה(please enter the name of the second brother).שיחקתי עם זה קצת וראיתי שכשאני מוחק מהתכנית את השורות שמבקשות מהמשתמש להכניס את מספר האחים שיש לו, אין את הבעיה הזאת.ממה נובעת הבעיה הזאת? ואיך אפשר לפתור אותה?תודה מראש!
פורסם 2013 בדצמבר 811 שנים try System.out.println("Please enter num of your brothers:"); int x= in.nextInt(); in.nextLine();
פורסם 2013 בדצמבר 811 שנים String str; str= in.nextLine(); int x=Integer.parseInt(str);nextint מחזיר את המספר אבל נישאר "n\" (when u click ENTER it adds "end of line" or "\n" and thats the problem)ב buffer ו nextline אחרי אמור לסדר את זהבאפשרות השניה פשוט מקבל מחרוזת וממיר אותה למספר ( כדי לבדוק שזה מספר כדי שלא יתן exception) נערך 2013 בדצמבר 811 שנים על-ידי erone
פורסם 2013 בדצמבר 1211 שנים מחבר לא הבנתי, מאיפה הגיע ה- "n". גם לא הבנתי איך בדיוק אני צריך לשנות את התכנית, ככה? public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Please enter num of your brothers:"); int x= in.nextInt(); System.out.println(" please enter the name of the first brother"); String name1; name1= in.nextLine(); System.out.println(" please enter the name of the second brother"); String name2 = in.nextLine(); System.out.println(name1 +name2); }ומה זה buffer?
פורסם 2013 בדצמבר 1211 שנים זו לא פקודה אלא תו מיוחד.כשאתה משתמש בפונקציה nextInt, אתה קורא את המספר מהבאפר (המקום בזיכרון אליו מגיעים מחרוזות שהקשתי למשל). כשהמשתמש מזין מספר, הוא מסיים עם enter מה שמתרגם לתו המיוחד n\ ואותו nextInt לא קורא (כי הוא אינו מספר) והוא נשארבבאפר ומחכה להיקרא ע"י התוכנית. בפעם הבאה שתשתמש ב-nextLine, מה שיקרא זה אותו n\ לפני המחרוזת הבאהשהמשתמש הזין.מה עושים? או שמוסיפים nextLine ריק לפני שאתה קורא את המחרוזת הראשונה, או שתקרא את המספר גם עם nextLineואז תמיר אותו בצורה בטוחה למספר, עם הפונקציה Integer.parseInt.
פורסם 2013 בדצמבר 1511 שנים מחבר הבנתי, תודה רבה.שתי שאלות קטנות: 1)" הבאפר זה המקום בזכרון אליו מגיעים המחרוזות " האם הכוונה היא למחרוזות שכתובות בתוך התכנית לדוגמא Please enter num of your brothers:" או שהכוונה למחרוזות שהמשתמש מכניס כשהוא מריץ את התכנית? או לשניהם?2)מה הקטע של הבעיה המטומטמת הזאת, בC# בחיים לא נתקלתי בכזאת בעיה...
פורסם 2013 בדצמבר 1511 שנים 1. הכוונה היא למחרוזות שהמשתמש מכניס.2. ב-#C יש בדיוק אותה בעיה. אני מניח ששם השתמשת ב-Console.ReadLine ולכן נפתרה לך הבעיה בדיוק כמו שהציעו לפתור אותה כאן.
פורסם 2013 בדצמבר 1511 שנים מחבר אני באמת מכיר רק את האפשרות של Console.WriteLine, מה האפשרות המקורית לקרוא קלט שהיה בה את הבעיה הזאת? נערך 2013 בדצמבר 1511 שנים על-ידי raiman1
פורסם 2013 בדצמבר 1511 שנים אין דרך כזו. #C לא מאפשרת לקרוא int ישירות מ-Stream - אפשר לקרוא תו בודד, מערך של תווים או שורה שלמה.אתה יכול לקרוא תו אחר תו עד שמגיעים לרווח, ואז להכניס את התווים שנקראו למחרוזת ולהמיר ל-int בעצמך, או לחילפין אתה יכול לקרוא את כל השורה ואז לנתח את המחרוזת בעצמך (לדוגמה לחלק אותה ל"מילים" באמצעות String.Split ואז להמיר כל "מילה" ל-int).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.