משתנים ב-Java

[3 בינואר 2008] [45 תגובות]

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

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

אילו נתונים נרצה לשמור ?

  1. מספרים (4, 250, 2.53)
  2. מילים(שלום, Hello, Tel Aviv)
  3. תאריכים(01/01/2008)
  4. ועוד...

כל משתנה הוא מ-טיפוס (type) מסויים, לפי הערכים אותם הוא צריך לזכור. ישנם טיפוסים שיכולים לזכור רק מספרים שלמים וישנם טיפוסים המסוגלים לשמור רק מילים ומשפטים. 

לפני שנוכל להשתמש במשתנה מסויים, עלינו להכריז עליו, כך המהדר ידע כיצד להשתמש בו. עלינו להכריז על שני דברים: טיפוס המשתנה ושם המשתנה.

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

class tirgul{
	public static void main(String[] args){	

	}
}

מספרים שלמים

int x;

בשורה זאת הכרזנו על:

  • int - מגדיר משתנה מטיפוס Integer - כלומר, מספר שלם. המספר יכול להיות חיובי או שלילי.
  • x - זהו השם של המשתנה, לאחר שורה זאת, נוכל להשתמש במשתנה x על פי שמו.

על מנת שהמשתנה x יזכור ערך מסויימם, עלינו לבצע פעולת השמה. השמה מתבצעת בעזרת הסימן = (שווה) כך:

x = 5;

בשורה זו הצבנו את הערך 5 למשתנה x. ובמילים פשוטות: לאחר שורה זאת x שווה ל-5. נוכל לבצע הכרזה ו-השמה של משתנה בשורה אחת כך:

int x = 5;

נוכל להדפיס למסך את ערכו של x ע"י שימוש ב-println מהשיעור הקודם:

System.out.println(x);

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

System.out.println("x");

נוכל להגדיר שני משתנים, x ו-y, לחבר בינהם ולהדפיס את התוצאה למסך:

int x = 2;
int y = 110;
System.out.println(x+y);

על המסך יודפס המספר 112. המחשב התבקש להדפיס את הערך x+y, כלומר התבקש לבצע את הפעולה 2+110 ולאחר החישוב, הדפיס את התוצאה למסך.

מספרים ממשיים (עשרוניים)

מספרים בעלי נקודה עשרונים(2.5, 3.6, 150.1) ישמרו במשתנה מסוג double ויוגדרו באופן הבא:

double z = 3.5;

הגדרנו משתנה מסוג double בשם z והצגנו בו את הערך 3.5 - נוכל להציגו באופן דומה להצגת מספרים שלמים:

System.out.println(z);

על המסך יודפס המספר 3.5

תווים

תו (אות אחת, או סימן אחד) ישמר בתוך משתנה מסוג char:

char letter = 'X';

הכרזנו על משתנה מטיפוס char ושם המשתנה הוא letter. ביצענו פעולת השמה למשתנה letter והצבנו בו את הערך A. שימו לב כי הערך מוקף בגרשיים בודדות. נוכל להדפיס את ערכו של תו כך:

System.out.println(letter);

מחרוזות

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

String text = "This is a good lesson!";

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

נוכל לשרשר מחרוזות (חיבור מחרוזת ראשונה לשנייה) באמצעות פעולת החיבור, ולאחר מכן נוכל להדפיסה:

String start = "This is";
String end = "very simple";
String all = start + " " + end;
System.out.println(all);

התוכנית תדפיס את המשפט: This is very simple - שימו לב כי חיברנו את המחרוזת start למחרוזת רווח(" ") ואז למחרוזת end. מכאן ניתן להסיק כי אפשר לשרשר מחרוזת שנשמרה במשתנה למחרוזת הנכתבת באופן מפורש בין גרשיים.

משתנים בוליאנים

בהרבה מקרים נרצה לשמור ערך מסוג: כן/לא, אמת/שקר, נכון/לא נכון. לשם כך שיים משתנה מטיפוס boolean (בוליאני) היכול להכיל שני ערכים: true או false. כך נגדיר אותו:

boolean isThisNice = true;

הגדרנו משתנה בוליאני, בעל השם isThisNice והצבנו בו את הערך true. המחשב מכיר את המילים true ו-false ורק בהם יש להשתמש בעבודה עם משתנים בוליאנים.

כמו כן, המחשב מסוגל לבצע השוואות ואת התוצאה להציב במשתנה בוליאני. בדוגמה הבאה x שווה ל-1 ולאחר מכן אנו שואלים האם הוא שווה ל-0 (בעזרת הסימן == עליו נללמד בשיעור הבא). מכיוון שהדבר הוא שיקרי, b יהיה שווה ל-false:

int x = 1;
boolean b = (x == 0);

קבועים (final)

ניתן להגדיר משתנה קבוע על ידי הוספת המילה final לפני הכרזתו. הערך של קבוע מוגדר בתחילת התוכנית ואינו יכול להשתנות במהלך התוכנית. נהוג לתת למשתנה זה שם המורכב רק מאותיות גדולות:

final int DAYS_IN_WEEK = 7;

scope (טווח הכרה)

כאשר אנו מכריזים על משתנה בתוכנית שלנו, ניתן להשתמש בו רק בבלוק בו הוא הוגדר. בלוק הוא הקטע המצוי בין הסוגרים המסולסלים {}. טווח זה נקרא scope. המהדר אינו מכיר את המשתנה מחוץ לטווח זה. נראה דוגמה לכך בשיעור העוסק ב-לולאות בהמשך הדרך.

המרה (casting)

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

double f = 3.5;
System.out.println( f );
System.out.println( (int) f );

הפלט יהיה:

3.5
3

בפעם הראשונה המהדר רואה את f כאילו הוא מספר ממשי ולכן מדפיס אותו כ-3.5 ובפעם השניה המהדר רואה את f כאילו היה מספר שלם ולכן מתעלם מכל מה שאחרי הנקודה העשרונית ואנו מקבלים את המספר 3.

סיכום

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

בשיעור הבא נלמד כיצד לבצע פעולות על משתנים על ידי אופרטורים.

אם אהבת את הפוסט, אני שולח מדי פעם למייל עוד פוסטים מעניינים שלא תמיד מגיעים להתפרסם באתר. אתה מוזמן להצטרף לרשימה:
(אני שונא ספאם. אני מבטיח לעולם לא לשלוח משהו לא מעניין)

45 תגובות

  1. כנרת | 8/19/2008 12:27:34 PM

    האם תוכל בבקשה להראות דוגמה עם חישוב של מספרים כמו שהייתה למעלה אבל בצורה מפורטת?

    כי אני לא מבינה איפה להכניס את השורות של ה - int x

     

  2. טל | 8/22/2008 10:24:09 AM

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

    הכנתי את הקובץ http://www.ketacode.com/code/nums.java שמכיל את הקוד עבור הדוגמה (שתשובתה 112) - יש להדר אותה ולהריץ אותה.

    אם תביטי בקוד, תוכלי לראות את שתי השורות שיש להוסיף בהתחלה.

  3. כנרת | 8/24/2008 5:16:46 AM

    תודה רבה לך!! עזרת לי מאוד:)

     

  4. nils | 9/9/2008 7:58:47 AM
    thanks
  5. אוהד | 12/20/2008 6:44:13 AM

    אתה יכול בבקשה ליכתוב קוד + מעטפת שאפשר להריץ?

     

  6. טל | 12/20/2008 9:41:16 AM

    לא... אני בכוונה לא כולל את הקוד המלא עם המעטפת.

    המטרה היא שבשיעור זה כבר תדעו כיצד לכתוב את המעטפת ותדעו כיצד להריץ אותה.

    הדרך הטובה ביותר בהתחלה היא עבודה על בסיס דוגמת ה-Hello World. ניתן לערוך את דוגמה זאת בעזרת הקוד שיש בפוסט הזה.

  7. אוהד | 12/21/2008 1:51:10 AM
    מה צריך לרשום בSystem.out.println אם אני מריץ משתנים בוליאנים?
  8. טל | 12/21/2008 2:38:45 PM

    אם תוסיף לדוגמה של המשתנה הבוליאני את השורה הבאה:

    System.out.println(isThisNice);

    תודפס למסך המילה True. תנסה בעצמך :)

  9. בני | 12/25/2008 11:37:38 AM
    תשים דוגמא של חיבור מספרים בתוך מעטפת הקישור לא עובד
  10. טל | 12/27/2008 3:10:03 AM

    הנה (העתק והדבק את הקוד הבא...):

    class hello
    {
            public static void main(String args[])
            {
                    int x = 2;   
                    int y = 110;   
                    System.out.println(x+y);
            }
    }

  11. בני | 12/27/2008 4:47:30 AM
    אפשר דוגמא של המחרוזת כולה עטופה?
  12. בני | 12/27/2008 5:04:02 AM
    לא משנה
  13. גיא | 4/12/2009 1:03:30 AM
    רשמתי את הכול ומתי שרשמתי
    1. int x = 5;

    ובסוגרים x ואז f5 וזה רשם לי x (יש לי את התוכנה  jcreator זה משנה)

  14. האקר בעיניינים | 5/25/2009 6:57:39 AM

     

    ממש תו דה מי שכתב את הדף הזה ממש עזר לי ליזכור את המשתנים :)

  15. דניאל | 7/28/2009 10:28:16 AM

    אפשר דוגמא של איך מדפיסים מחרוזת בודדה

    הנה לגביי זה

    String text = "This is a good lesson!";  

    איך מדפיסים את זה?

  16. טל | 7/28/2009 10:57:08 AM

    פשוט תוסיף בשורה שאחרי מה שכתבת את זה:

    System.out.println(text);

    וזה ידפיס את הטקסט למסך.

  17. איליה | 8/29/2009 3:19:30 AM

    שלום טל יש לי בעייה

     

    רשמתי את כל התרגיל אם המספרים השלים(INT) נכון הוא הידר לי הכל

     

    ואז הפעלתי את התוכנית והוא במקום לרשום 112

     

    הוא רושם לי X+Y

     

    למה.... מה עושים?

  18. טל | 8/29/2009 5:08:43 AM

    כנראה שמה שעשית הוא לשים את X+Y בתוך גרשיים כך:

    System.out.println("x+y"); // NO GOOD

    מה שאתה צריך לעשות זה בלי גרשיים כך:

    System.out.println(x+y); // GOOD

  19. איליה | 8/29/2009 5:28:06 AM

    כן צודק תיקנתי תודה בכל מיקרה 

     

    המדריכים שלך כל כך טובים שפשוט אני מבין הכל תודה רבה=) מגיעה לך הוקרע 

     

    כי הסתקלתי במדריכים אחרים וראיתי ששמה יותר קשה להבין מעצלך=)

     

    תודהה!!

  20. איליה | 8/29/2009 5:29:37 AM

    אהה יש לך גם טעות

     

    רשמתה

    תווים

    תו (אות אחת, או סימן אחד) ישמר בתוך משתנה מסוג char:


    1. char letter = 'X';  

    הכרזנו על משתנה מטיפוס char ושם המשתנה הוא letter. ביצענו פעולת השמה למשתנה letter והצבנו בו את הערך A.אבל שם רשום X איך זה הגיוני(רשום איפה ש יש LETTER=X) נראה יצתאה לך טעות לא?

     

     

     

  21. איליה | 8/29/2009 12:02:57 PM

    תגדי טל נכון לקובץ שהכנו קראנו לו TIRGUL

    אז למה כשה אני שמהנ לא שם הוא רושם שהוא לא מצליך לזהות את הקובץ?

  22. אלעד | 12/1/2009 10:47:37 AM

    לדעתי לשורה בשם:

    הכרזה ו-השמה

    כדאי לקרוא אתחול משתנה.

    מתחבר יותר טוב אח"כ למערכים שרוצים לאתחל את התאים בהם בלידתם...

  23. טל | 12/11/2009 7:50:24 AM

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

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

  24. דן | 1/12/2010 7:07:42 AM

    צריך לרשום את המשתנים בפינקס רשימות או אפשר גם בJCreator לכתוב את המשתנים

     

  25. טל | 1/12/2010 10:14:19 AM
    אפשר כך או כך, איך שנוח לך לעבוד.
  26. עדי | 1/26/2010 5:56:09 AM
    תודה רבה זה מובן להבנה :)
  27. בני אחר | 1/3/2011 10:59:14 AM

    ממש תודה. כיף שאפשר להבין ושזה ממש ברור

    ושגם צריך לחשוב כי אתה לא נותן את כל הקוד ישר

    לקח לי זמן להבין שצריך לכתוב java trigul בשביל להפעיל את זה

    כנראה פיספסתי משהו בשיעור הקודם 

  28. עילי | 3/12/2011 12:28:49 AM

    הי טל,

    יש לך טעות, כתבת טעיתם במקום תהיתם:

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

    תודה בכל מקרה :) בלוג נהדר!

  29. לא צריך | 3/29/2011 11:42:08 AM

    המדריך שלך מושלם!!

    תודה אתה מלךך !!!

  30. elyasaf | 4/30/2011 11:30:57 AM
    אני לא מבין איך אפשר לעשות שיהיה מספר *מספר *מספר
  31. *** | 8/31/2011 10:07:10 AM

    אפשר עוד פרטים?

    למשל ציטוט? 

  32. אחד שהתחיל | 9/21/2011 5:05:53 AM

    הי,

    ניסיתי לעשות את מה שכתוב פה על ה- string,

    זה לא עושה לי compile,

    אני משתמש ב- bluej

    זה לא אמור להיות משנה נכון? 

  33. האקר ההאקרים | 8/14/2012 5:22:19 AM

    הי,

    עשיתי משתנה בוליאן ואני לא יודע איך לשים לו ערך של מספר

  34. טכנו | 8/15/2012 2:57:19 AM
    כתבתי את זה ובקימפול זה רושם לי שיש שגיאה: 
     
    class class1
    {
    public static void main(String args[])
    {
    int x = 5;
    System.out.println("x = " + x);
    }
    }
     
    מה הבעיה? 
  35. טל ר. | 9/24/2012 10:58:06 AM

    היי,תודה על הבלוג הזה הוא ממש עוזר,גם אני בתחילת דרכי.

     רציתי לשאול,

     מה לא נכון בקוד הבאה ?

    class hello

    {

            public static void main(String args[])

            {

     

            boolean isThisNice = true;

            system.out.printin("isthisnice");

            }

    }

     

     

  36. טל ר. | 9/24/2012 11:35:37 AM

    ועוד משו טל ברשותך :)

     במשתנה בוליאני כמו שהראת לנו פה 

    1. int x = 1;  
    2. boolean b = (x == 0);
    איך אני מכניס את זה למעטפת? 
     
    אני משער שצריך אחרי זה בשביל שיהיה לי פלט לרשום System.out.println אבל מה ?
    תודה רבה. 

     

  37. ולדי | 4/13/2013 9:36:12 AM

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

    למי שהגיב שתי תגובות מעליי, מצאתי שתי בעיות בקוד שלך. 

    1. system אמור להיות באות גדולה.

    2.println ולא print in

    אבל בתכלס הכל סבבה.

     

  38. מתחיל | 7/25/2013 1:29:50 PM
    טל אני לא הבנתי איפו להוסיך את ה-int אתה יכול לשלןך את איך שהקובץ צריך להיראות אחרי שומוסיפים int
  39. Ido | 3/31/2014 5:24:44 AM

    מה

    final int x=7

    בעצם אומר? 

  40. יוני | 5/9/2014 7:33:22 AM

    טל, ראשית כל הכבוד לך על האתר המצויין הזה! 
    שנית רציתי לשאול אותך מדוע בתכונה של JCreator הוא מסמן לי את השווה (=) בצבע אדום ולא את המספרים?
    כשאני מריץ את התוכנה אז היא לא רושמת לי את המספרים או את התוצאות,היא רושמת לי את ה-X או X+Y.

    האם סימון הצבעמשפיע בצורה כלשהי? 

  41. sus | 11/17/2014 1:05:21 PM
    למה אתה לא משתמש ב" new string" לפני יציקת הערך?
  42. סססלל | 12/27/2016 5:13:57 AM
    תשתמשו בתוכנה אפוקליפסה
  43. hvub | 2/15/2017 1:15:13 AM
    תודה
  44. יהונתן | 2/15/2017 1:15:43 AM
    תודה רבה 
  45. יהונתן | 2/15/2017 1:16:09 AM
    תודה רבה רבה 

התגובות נעולות