עבור לתוכן

java- התכנית לא מחכה לקלט מהמשתמש

Featured Replies

פורסם

אהלן, עשיתי לפני שנתיים 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).

שיחקתי עם זה קצת וראיתי שכשאני מוחק מהתכנית את השורות שמבקשות מהמשתמש להכניס את מספר האחים שיש לו, אין את הבעיה הזאת.

ממה נובעת הבעיה הזאת? ואיך אפשר לפתור אותה?

תודה מראש!

פורסם

try

 System.out.println("Please enter num of your brothers:");
int x= in.nextInt();
in.nextLine();

פורסם
  • מחבר

זה לא עוזר...

פורסם

       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)

נערך על-ידי erone

פורסם
  • מחבר

לא הבנתי, מאיפה הגיע ה- "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?

פורסם
  • מחבר

זה פקודה שגורמת לתכנית לרדת שורה

פורסם

זו לא פקודה אלא תו מיוחד.

כשאתה משתמש בפונקציה nextInt, אתה קורא את המספר מהבאפר (המקום בזיכרון אליו מגיעים מחרוזות שהקשתי למשל).

כשהמשתמש מזין מספר, הוא מסיים עם enter מה שמתרגם לתו המיוחד n\ ואותו nextInt לא קורא (כי הוא אינו מספר) והוא נשאר

בבאפר ומחכה להיקרא ע"י התוכנית. בפעם הבאה שתשתמש ב-nextLine, מה שיקרא זה אותו n\ לפני המחרוזת הבאה

שהמשתמש הזין.

מה עושים? או שמוסיפים nextLine ריק לפני שאתה קורא את המחרוזת הראשונה, או שתקרא את המספר גם עם nextLine

ואז תמיר אותו בצורה בטוחה למספר, עם הפונקציה Integer.parseInt.

פורסם
  • מחבר

הבנתי, תודה רבה.

שתי שאלות קטנות: 1)" הבאפר זה המקום בזכרון אליו מגיעים המחרוזות " האם הכוונה היא למחרוזות שכתובות בתוך התכנית לדוגמא

Please enter num of your brothers:" או שהכוונה למחרוזות שהמשתמש מכניס כשהוא מריץ את התכנית? או לשניהם?

2)מה הקטע של הבעיה המטומטמת הזאת, בC# בחיים לא נתקלתי בכזאת בעיה...

פורסם

1. הכוונה היא למחרוזות שהמשתמש מכניס.

2. ב-#C יש בדיוק אותה בעיה. אני מניח ששם השתמשת ב-Console.ReadLine ולכן נפתרה לך הבעיה בדיוק כמו שהציעו לפתור אותה כאן.

פורסם
  • מחבר

אני באמת מכיר רק את האפשרות של Console.WriteLine, מה האפשרות המקורית לקרוא קלט שהיה בה את הבעיה הזאת?

נערך על-ידי raiman1

פורסם

אין דרך כזו. #C לא מאפשרת לקרוא int ישירות מ-Stream - אפשר לקרוא תו בודד, מערך של תווים או שורה שלמה.

אתה יכול לקרוא תו אחר תו עד שמגיעים לרווח, ואז להכניס את התווים שנקראו למחרוזת ולהמיר ל-int בעצמך, או לחילפין אתה יכול לקרוא את כל השורה ואז לנתח את המחרוזת בעצמך (לדוגמה לחלק אותה ל"מילים" באמצעות String.Split ואז להמיר כל "מילה" ל-int).

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים