[4 בינואר 2009] [26 תגובות]
בשיעור פקודת if ב-Java התבקשתם לשלב את הידע שצברתם עד נקודה זו ולפתור את התרגיל הבא:
"כתבו תוכנית המבצעת חידון חשבון פשוט. התוכנית תגריל שני מספרים(תוכלו לשמור אותם במשתנים x ו-y), תציג אותם למשתמש ותשאל אותו מהו הערך של חיבור שני המספרים(מהו x+y).
המשתמש יכניס את התשובה שלו והתוכנית תבדוק אם הוא צדק או טעה. אם צדק - תודפס המילה Right למסך, ואם לא - תודפס המילה Wrong."
הפתרון
נחלק את התרגיל ל-5 חלקים קטנים, ונפתור כל אחד בנפרד. בדרך זו נגיע לפיתרון בצורה נכונה וטובה. אלו הם השלבים:
- בניית המעטפת
- בחירת שני המספרים
- הצגת השאלה וקליטת תשובת המשתמש
- חישוב התשובה הנכונה
- השוואת התשובות
1. בניית המעטפת
כפי שכבר למדנו, ישנה מעטפת בה יש לכתוב את הקוד שלנו. כרגע אין עדיין צורך בהסברים על המעטפת, לכן ניקח אותה מכאן כמו שהיא:
class add { public static void main(String args[]) { } }
2. בחירת שני המספרים
למדנו בשיעור פקודת IF ב-Java כיצד להגריל מספר אקראי. נבצע זאת פעמיים: בפעם הראשונה נגריל מספר ונשמור אותו במשתנה x ובפעם השניה נגריל מספר נוסף ונשמור אותו במשתנה y.
class add { public static void main(String args[]) { int x = (int) (Math.random()*10)+1; int y = (int) (Math.random()*10)+1; } }
3. הצגת השאלה וקליטת תשובת המשתמש
נציג את השאלה למשתמש כפי שלמדנו בשיעור קלט ופלט ב-Java. נשמור את תשובתו למשתנה userAnswer.
import java.util.Scanner; class add { public static void main(String args[]) { int x = (int) (Math.random()*10)+1; int y = (int) (Math.random()*10)+1; System.out.println("What is the sum of " + x + " + " + y + " ? "); Scanner console = new Scanner(System.in); int userAnswer = console.nextInt(); console.close(); } }
שימו לב כיצד ניסחנו את השאלה: שירשרנו (חיברנו) את המילים What is the sum of ל-ערך של x ולאחר מכן שירשרנו את הסימון + (סימן החיבור), לאחריו שירשרנו את ה-ערך של y ובסוף את סימן השאלה (?).
נקודה שכדאי לשים אליה לב היא שכל מה שנכתב בין גרשיים ("") - יופיע למסך המחשב כפי שהוא, ואילו הערכים x ו-y נכתבו ללא גרשיים ולכן הערך שלהם יופיע למסך והאותיות x ו-y לא יופיע.
4. חישוב התשובה הנכונה
על מנת לדעת האם המשתמש צדק בתשובתו, עלינו קודם כל לדעת מהי התשובה הנכונה. נבצע את החישוב ונשמור את התוצאה למשתנה correctAnswer.
import java.util.Scanner; class add { public static void main(String args[]) { int x = (int) (Math.random()*10)+1; int y = (int) (Math.random()*10)+1; System.out.println("What is the sum of " + x + " + " + y + " ? "); Scanner console = new Scanner(System.in); int userAnswer = console.nextInt(); console.close(); int correctAnswer = x + y; } }
5. השוואת התשובות
כעת נשתמש בפקודת IF על מנת לדעת אם תשובת המשתמש השמורה ב-userAnswer זהה לתשובה הנכונה השמורה במשתנה correctAnswer. כמו כן נגיב בהתאם ונציד למשתמש האם צדק או טעה.
import java.util.Scanner; class add { public static void main(String args[]) { int x = (int) (Math.random()*10)+1; int y = (int) (Math.random()*10)+1; System.out.println("What is the sum of " + x + " + " + y + " ? "); Scanner console = new Scanner(System.in); int userAnswer = console.nextInt(); console.close(); int correctAnswer = x + y; if (userAnswer == correctAnswer) { System.out.println("Right!"); } else { System.out.println("Wrong!"); } } }
זהו גם הפיתרון המלא של התרגיל.
סיכום
זהו תרגיל מאוד פשוט שמטרתו לתרגל קליטת משתנים מהמשתמש, ביצוע פעולות חשבוניות ושימוש במשפטי IF.
מי שהצליח לפתור את התרגיל לבדו - כל הכבוד! מי שהתקשה בפתירת התרגיל - לא נורא, תיכנות זהו עניין של נסיון ומתוכנית לתוכנית לומדים דברים חדשים.
לא יותר פשוט !?
Scanner in = new Scanner();
int x = in.nextInt();
אכן, אני חושב שבמקרה הזה - השימוש במחלקה Scanner יהיה יותר פשוט, אבל זו גם אפשרות.
@אלי, לקחתי את ההצעה שלך ושיניתי. תודה.
אם אני כותב את זה בפנקס רשימות זה אמור להעלות לי את התוכנית על המסך?
לא... אתה אמור גם להדר (לקמפל) את זה. מומלץ שתקרא את הפוסט תוכנית ראשונה ב-Java לעוד מידע.
אחי זה לא עובד העתקתי אפילו את הפיתרון הסופי עשיתי הכל הידור וזה וזה לא עובד....
זה רושם לי ב-command line ככה:
add.java:12: cannot find symbol
symbol : method readlnt()
location: class java.util.scanner
int userAnswer = consle.readlnt();
^(זה מסמן את הנקודה)
@נדב, אתה צודק. תוקן.
מה שקרה הוא שבעקבות ההצעה של אלי (הצעה טובה) הקוד שהוצג טיפה השתבש. כעת זה עובד, בדוק.
אחלה מדריך ואחלה אתר
טל אתה ענקקקקקקקקקקקקק !!
טל עבדתי עד עכשיו על פי כל המדריכים ועכשיו הצלחתי לפתור גם את התרגיל האחרון כמובן שבלי להסתכל בפיתרון אתה חייב לראות את הפתרון שלי אני יביא אותו בתגובות לפוסט שלך של הפיתרון, מה שלבנתיים רציתי לומר שאתה פשוט ענק, באמת שניסיתי כמה מדריכים אחרים ופשוט לא הלך למרות שישבתי עליהם בלי להתעצל ותמיד זה נתקע לי בסוף, סוף סוף יש פה איזה מדריכים נורמליים.
מהיום אני פשוט רק ממתין לשיעורים הבאים אז בבקשה תמשיך לרמות יותר גבוהות, פליז, אני מחכה לאיזה פרויקט רציני שתתן לכתוב משהו אבל באמת שנוכל להשביץ איתו
ביייייייייי ותודה ענקית
הנה הפיתרון נראה יותר פשוט ממה שאת כתבת לא ???
Scanner console = new Scanner(System.in);
int x = (int) (Math.random()*10)+1;
int y = (int) (Math.random()*10)+1;
System.out.println(" היי חמודי בא נראה אותך מפעיל קצת ת'מח שלך");
System.out.println("כמה זה " + x + " פלוס " + y);
System.out.println("Please enter the number:");
int z = console.nextInt();
if (x + y==z)
{
System.out.println("יפה חמודי צדקת !");
}
else
{
System.out.println("לא נכון! פעם הבאה לחשוב יותר טוב");
}
טל שמע שנייה אני מבסוט רצח מהתרגיל האחרון שהצלחתי לפתור אולי תסביר איך אפשר לקמפל את הקוד לקובץ exe רגיל ולשלוח אותו לחברים להראות להם כי ככה אין לי מצב לשלוח להם ושייראו את זה ???
מישהו יכול אולי לעזור לי בחידה?!?1
נתונים המספרים:2,3,4,5 אפששר לעשות כל פעולה אפשרית ולהשתמש פעם אחתת בכל מספר ושהתוצאה תיצא 28
4 לחלק ל-2 זה 2.
5 בחזקת 2 זה 25.
25 ועוד 3 זה 28.
לבראל גוזלן:
5 כפול 4 = 20
2 בחזקת 3 = 8
מה שאומר שהתרגיל הוא כזה(** מסמן חזקה):
28 = 2 ** 3 + 5 * 4
בסדר אם רשמתי ככה:
import java.util.Scanner;
class ff1
{
static Scanner reader=new Scanner(System.in);
public static void main(String[]args)
{
System.out.println("what is the answer");
int x = (int) (Math.random()*10)+1;
int y = (int) (Math.random()*10)+1;
int z;
System.out.print("how much it "+x+"+");
System.out.println(y+"?");
z=reader.nextInt();
if (x+y==z)
{
System.out.println("Right!");
}
else
{
System.out.println("Wrong!");
}
}
}
לפי דעתי... כן!
ד"א, אם אתה עובד ב eclipse אתה יכול לכתוב: "מה התוצאת של..." במקום
"How Much Is..." בכל מקרה- טוב
שלום, טל, או מישהו אחר-
איך אני עושה בדיוק את אותו הדבר, רק עם מילים?
לדוג'- בקשה מהמשתמש להזין מילה מסויימת ובהתאם לשלוח פלט?
ניסיתי פשוט להחליף את ה int ב String אבל זה לא עובד......
28=4* 7=3- 10=2*5
ניסיתי את התרגיל הזה וזה היה מאוד קל.
די הופתעתי כשראיתי ששמרת את התוצאה במשתנה בהדגמה שלך.
לא יותר קל וגם חוסך זכרון פשוט לעשות את תרגיל החיבור בתוך הif?
דוגמא:
int x,y,rezult;
Scanner c = new Scanner(System.in);
x = (int) (Math.random()*100)+1;
y = (int) (Math.random()*100)+1;
System.out.println("what she is the sum of " + x + " + " + y + "?");
rezult = c.nextInt();
if (rezult == x + y)
System.out.println("Right");
else
System.out.println("Wrong");
דרך אגב:
כשאמרתי "לא יותר קל וגם חוסך זכרון פשוט לעשות את תרגיל החיבור בתוך הif?" התכוונתי לשאול אם לא קל יותר לעשות:
if (rezult = x + y);
במקום לכתוב משהו בסגנון:
int rezult_check = x + y;
if (rezult = x + y);
סליחהת טעיתי בכתיבת התגובה הקודמת, הנה מה שרציתי לכתוב:
דרך אגב:
כשאמרתי "לא יותר קל וגם חוסך זכרון פשוט לעשות את תרגיל החיבור בתוך הif?" התכוונתי לשאול אם לא קל יותר לעשות:
if (rezult = x + y);
במקום לכתוב משהו בסגנון:
int rezult_check = x + y;
if (rezult = rezult_check);
אחלה תרגיל ואחלה אתר והסברים. תודה רבה!
אני משתמש בeclipse וזה לא נותן לי לכתוב else. למה?
טל אתה יכול להסביר לי את השורה הזאת? לא כל כך הבנתי אותה
console.nextInt();טל דבר ראשון מדריך מצויין!!!
דבר שני יש לי בעיה: ניסיתי לבנות את הקוד לבד אבל לצערי נתקלתי במבוי סתום ולעתקתי את מה שהיה לי חסר מהקוד המלא, ניסיתי והאו רשם לי כמה טעויות. לאחר מכן ניסיתי להעתיק את הקוד לכשהדרתי הוא רשם לי Microsoft Windows [Version 6.0.6002]
C:\Users\יובל שרצר\JavaProg>javac add2.java
add2.java:9: error: cannot access Math
int x = (int) (Math.random()*10)+1;
^
bad source file: .\Math.java
file does not contain class Math
Please remove or make sure it appears in the correct subdirectory of the sou
rcepath.
1 error
C:\Users\יובל שרצר\JavaProg>
נ.ב. אחד מהקבצים הקיימים באותה תיקייה שעשיתי מהשיעורים הקודמים נקרא Math.java.