שאלה בJAVA

שאלה בJAVA

קיבלנו את השאלה הבאה כשיעורי בית וניסיתי לפתור אבל אני לא מצליחה להריץ ואני מקבלת הודעות שגיאה.
אשמח לתגובות מה עשיתי לא נכון.


שאלה:
יש לכתוב תוכנית בשם sumDivisionCheck (זה יהיה שם הclass), המקבלת מן המשתמש כקלט שני מספרים שלמים, בודקת האם סכומם מתחלק ב7 עם שארית מדויקת של 3 או לא, ומדפיסה את תוצאת הבדיקה.
לדוגמה: אם התכנית מקבלת כקלט את המספרים 31 ו7 היא תדפיס: "38 has a remainder of 3 when divided by 7" .
ואם היא תקבל כקלט את המספרים 6 ו17 היא תדפיס:
"23 doesn't have a remainder of 3 when divided by 7".
 

Guy Yafe

New member
מאיפה להתחיל?

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

בJAVA הביטוי sum2=3 הוא ביטוי שלא מחזיר אמת או שקר אלא פשוט שם את הערך 3 למשתנה sum2, ולכן את לא יכולה להכניס את הביטוי הזה לתוך if. ביטויים בתוך if חייבים להיות עם הסימן == (פעמיים =) והביטוי הנכון הוא:

if(sum2 == 3)

בנוסף שמת נקודה פסיק אחרי התנאי, מה שסגר אותו. כלומר גם אם התנאי היה נכון וגם אם לא השורה שמתחתיו הייתה מתבצעת. זה מה שגרם לשגיאה ב - else, מפני שה-if כבר סגור וה-else לא מתייחס אליו.
הדרך הנכונה לכתוב את זה היא:

if(sum2 == 3)
System.out...
else
System.out....

מכאן לכמה כללי אצבע בתכנות:

ביטויים בתנאי if..else.. נהוג לשים בתוך סוגריים מסולסלים גם אם יש בהם רק שורה אחת (זה כדי שבהמשך תוכלי להוסיף עוד שורות בלי הצורך לזכור להוסיף את הסוגריים)

בJAVA נהוג לרשום שמות של מחלקות כך שיתחילו באות גדולה: SumDivisionCheck בניגוד ל - sumDivisionCheck

כדאי לשים רווח בין אופרטורים ולא להוסיף סוגריים מיותרים כדי להגביר את הקריאות:
במקום:

sum1=(num1+num2);

רשמי:

sum1 = num1 + num2;


ודבר אחרון: הכוכבית ליד שם הקובץ אומרת שהקובץ בכלל לא שמור. אין לי מושג איזה קוד קימפלת שם, אבל בטח לא את הקוד שצירפת בתמונה.

לקריאה נוספת על תנאים בJAVA:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html
 
גזרתי ושמרתי! תודה רבה!

זה יעזור לי מאוד בהמשך הקורס.
ככה זה שהמרצה והמתרגל גרועים.
 

BravoMan

Active member
רק הערה קטנה:

כשמדובר בשיעורי בית, מה שחשוב יותר מכל הוא להיצמד להוראות התרגיל.
אם בתרגיל כתוב במפורש ששם המחלקה צריך להיות sumDivisionCheck כלומר להתחיל באות קטנה, אז יש להתחיל אותו באות קטנה, גם אם זה לא מקובל.

הסיבה לכך, היא שבדיקת תרגילים מתבצעת לא פעם דרך כלי אוטומטי, ואם הוא ייכשל בגלל ששם המחלקה שונה ממה שהוא מצפה (וגודל אות משנה לחלוטין שם מחלקה ב-Java) תקבל ציון 0.

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