פקודת If ב-Java - המשך

[10 בפברואר 2009] [9 תגובות]

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

נתחיל את השיעור בבחינת התנאי (השאלה שאותה שואלת פקודת ה-IF) באופן יותר יסודי.

ניזכר בשיעור משתנים ב-Java ובסוג המשתנה הבוליאני. משתנה זה יכול להכיל שני ערכים בלבד: אמת (TRUE) או שקר (FALSE). שימו לב כי התנאי של פקודת ה-IF הוא משתנה בוליאני. כלומר, שני קטעי הקוד הבאים זהים:

if (x==5){
        System.out.println("X is 5");
}
boolean tnai = (x == 5);
if (tnai){
        System.out.println("X is 5");
}

לאחר השורה הראשונה, המשתנה tnai יכיל True או False בהתאם לערך של המשתנה x. אם x שווה ל-5 אז tnai יהיה true, אחרת, אם x שונה מ-5 הוא יהיה false. לאחר מכן, ניתן להשתמש בו בתור התנאי של פקודת ה-if.

שאלות מורכבות יותר

נוכל לבדוק האם שני תנאים מתקיימים בשאלה אחת על ידי האופרטור "וגם" (AND) שסימנו & (Shift+7). הנה דוגמה לכך:

if (x==50 & y>40){
        System.out.println("This is True");
}

המשפט This is True יודפס אך ורק אם שני התנאים הבאים מתקיימים: X שווה ל-50 ו-Y גדול מ-40. אם אחד משני התנאים האלו לא יתקיים, התוצאה הסופית תהיה False והמשפט לא יודפס.

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

if (x==50 & y>40 & z<30 & x<y){
        System.out.println("This is True");
}

בדרך כלל נשתמש באופרטור && במקום &. האופרטור && עובד בצורה דומה ל-& עם הבדל קטן:

  • האופרטור &: אם התנאי הראשון אינו נכון(X אינו 50), כבר אין טעם להמשיך ולבדוק את התנאים הבאים מכיוון שהתנאי יהיה false בכל מקרה. עם האופרטור הזה (&) בכל זאת נבדוק את ערכם.
  • האופרטור &&: אם התנאי הראשון אינו נכון, לא נמשיך לבדוק את התנאים הבאים.

אופרטור מעניין נוסף הוא האופרטור "או" (OR) וסימנו | (Shift+\). כאן יבדקו מספר תנאים, ומספיק שאחד מהתנאים יתקיים על מנת שתוצאת השאלה תהיה True. נביט בדוגמה הבאה:

if (x==50 | y==40 | z==30){
        System.out.println("This is True");
}
  • אם X שווה ל-50 זה מספיק על מנת שהמשפט יודפס. זה כבר לא משנה מה ערכם של Y ו-Z.
  • אם Y שווה ל-40 המשפט יודפס בלי קשר לערכם של X ו-Z.
  • וכמו שכבר הבנתם, מספיק ש-Z שווה ל-30 והמשפט יודפס בלי קשר לערכם של X ו-Y.
  • הדרך היחידה שהמשפט לא יודפס למסך היא שכל שלושת התנאים יהיו False. כלומר גם X לא יהיה שווה ל-50 וגם Y לא יהיה שווה ל-40 וגם Z לא יהיה שווה ל-30.

גם כאן ישנו אופרטור || בנוסף לאופרטור |. אם התנאי הראשון הוא נכון (X שווה ל-50) כבר אין צורך לבדוק את הבאים מכיוון שהתנאי יהיה true בכל מקרה. האופרטור | יבדוק אותם בכל זאת, אך האופרטור || יפסיק את הבדיקה וישר ידפיס את המשפט למסך.

פקודת ELSE-IF

בפקודה זאת מתבצעת קודם כל פקודת IF רגילה, אך ה-ELSE שלה מיוחד מכיוון שהוא גם כן שואל שאלה. הכי קל להבין זאת באמצעות הדוגמה הבאה:

if (i==1){
        System.out.println("I is ONE");
}
else if(i==2){
        System.out.println("I is TWO");
}

קודם כל בודקים אם ערכו של i שווה ל-1, אם כן מדפיסים I is ONE למסך וזוהי סוף התוכנית. אחרת, (אם i אינו שווה ל-1), מבצעים פקודת IF נוספת השואלת האם i שווה ל-2, אם כן מדפיסים I is TWO למסך והתוכנית מסתיימת. אחרת (אם i אינו שווה ל-2) לא עושים דבר.

שאלת הבנה: מבלי להריץ את שתי התוכניות הבאות, נסו לנחש מה יהיה הפלט של כל תוכנית. שימו לב, השינוי הוא בין פקודת ELSE-IF לפקודת IF רגילה.

int i =5;
if (i>3){
        System.out.println("GOOD");
}
else if(i==5){
        System.out.println("LIFE");
}
int i =5;
if (i>3){
        System.out.println("GOOD");
}
if(i==5){
        System.out.println("LIFE");
}

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

IF מקונן

If-מקונן היא פקודת if רגילה שנמצאת בתוך פקודת if אחרת. הביטו בקטע הקוד הבא:

if (x==5){
        if (y==4){
                System.out.println("Inside If+If");
        }
        else{
                System.out.println("Inside if+else");
        }
}

נשים לב כי יש לנו פקודת IF חיצונית (השואלת האם X==5) ללא ELSE לאחריה. במידה ו-X שווה ל-5 מתבצעת פקודת ה-IF המקוננת (הפנימית) ונשאלת השאלה "האם Y שווה ל-4?". נשים לב כי לפקודת ה-IF הפנימית יש ELSE.

נוכל להרחיב דוגמה זאת לכלול יותר מפקודת IF מקוננת אחת. למשל:

int x = 3;
if (x>0){
        System.out.println("x is bigger than 0");
        if (x>1){
                System.out.println("x is also bigger than 1");
                if (x>2){
                        System.out.println("x is also bigger than 2");
                        if (x>3){
                                System.out.println("x is also bigger than 3");
                        }
                }
        }
}
else{
        System.out.println("x is smaller than 0");
}

בתחילת התוכנית X מקבל את הערך 3. מה יהיו כל ההדפסות למסך? הנה:

x is bigger than 0
x is also bigger than 1
x is also bigger than 2

אם X היה שווה למינוס 5 (-5) מה היה נכתב למסך? שנו את הערך, הריצו את התוכנית ובדקו זאת.

סיכום

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

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

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

9 תגובות

  1. עדי | 1/26/2010 6:20:12 AM

    וואי אחי תודה רבה

    עזר לי מאוד!

  2. chabi | 6/27/2010 3:01:16 AM

    תודה רבה!

    אחלה גבר הטל הזה...

  3. בית"רי | 2/28/2011 8:43:35 AM

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

    הייתי רק ממליץ לך אולי לסדר את השיעורים בצורה טובה יותר ומסודרת, וזה מושלם.

     

  4. בוריס | 7/26/2011 10:38:02 PM

    תעתיקו ותדביקו את הקוד הזה .. איזה משחק שכתבתי :

     

    /**

     * @(#)game.java

     *

     *

     * @author

     * @version 1.00 2011/7/27

     */

    import java.util.Scanner;

     

    class game {

     

        public static void main(String[] args) {

        Scanner console = new Scanner(System.in);

     

        int x = (int) (Math.random()*10)+1;

        System.out.println("Welcome to my game!");

        System.out.println("Try to guess the number 1 to 10.");

        System.out.println("You have 5 guesses");

     

        System.out.println("type your guess:");

         int y = console.nextInt();

     

          if (y==x)

          {

          System.out.println("***YOU WIN***");

          }

          else {

     

          if (y<x+4 & y>x-4)

          {

     

          if (y<x+2 & y>x-2)

          {

              System.out.println("hot");

          }

          else if (y<x+3 & y>x-3)

          {

          System.out.println("very warm");

          }

     

                     else if (y<x+4 & y>x-4)

                    {

          System.out.println("warm");

                    }

     

          }

          else

            {

          System.out.println("cold");

          }

     

    System.out.println("You have got 4 more guesses");

    System.out.println("type your other guess:");

     

                    int z = console.nextInt();

     

          if (z==x)

          {

          System.out.println("***YOU WIN***");

          }

            else {

            if (z<x+4 & z>x-4)

          {

          if (z<x+2 & z>x-2)

          {

              System.out.println("hot");

          }

          else if (z<x+3 & z>x-3)

          {

          System.out.println("very warm");

          }

     

                     else if (z<x+4 & z>x-4)

                    {

          System.out.println("warm");

                    }

     

          }

          else

            {

          System.out.println("cold");

          }

     

    System.out.println("You have got 3 more guesses");

    System.out.println("type your other guess:");

     

                     int c = console.nextInt();

     

          if (c==x)

          {

          System.out.println("***YOU WIN***");

          }

          else{

     

          if (c<x+4 & c>x-4)

          {

          if (c<x+2 & c>x-2)

          {

              System.out.println("hot");

          }

          else if (c<x+3 & c>x-3)

          {

          System.out.println("very warm");

          }

     

                     else if (c<x+4 & c>x-4)

                    {

          System.out.println("warm");

                    }

          }

          else

            {

          System.out.println("cold");

          }

    System.out.println("You have got 2 more guesses");

    System.out.println("type your other guess:");

     

        int f = console.nextInt();

     

          if (f==x)

          {

          System.out.println("***YOU WIN***");

          }

          else {

           if (f<x+4 & f>x-4)

          {

          if (f<x+2 & f>x-2)

          {

              System.out.println("hot");

          }

          else if (f<x+3 & f>x-3)

          {

          System.out.println("very warm");

          }

     

                     else if (f<x+4 & f>x-4)

                    {

          System.out.println("warm");

                    }

     

          }

          else

            {

          System.out.println("cold");

          }

     

     

    System.out.println("type your other last guess:");

    int d = console.nextInt();

     

          if (d==x)

          {

          System.out.println("***YOU WIN***");

          }

     

          else

            {

          System.out.println("     ***YOU LOSE , TRY ANOTHER TIME.****       ");

          }

          }

          }

             }

          }

        }

     

         

  5. *** | 8/31/2011 12:21:42 PM

    בעיקרון זהו משחק נחמד,

     לא יותר מזה. 

    אהבתי את הקטע של החם קר. 

  6. עמית | 12/26/2011 2:26:04 AM

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

    אצלי המחשב זורק מספר מאחד ועד 100.

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

    הנה מה שהכנתי:

    import java.util.Scanner;  
    class quiz
    {
    public static void main(String args[])
    {
    System.out.println("chouse namber from 1 to 100?");
    System.out.println("write namber:");
    Scanner console = new Scanner(System.in);
    int y = (int) (Math.random()*100)+1;
    int x = console.nextInt();
    if (x==y)
    {
    System.out.print("yes! the namber is");
    System.out.print(y);
    }
    if (x<y)
    {
    System.out.print("no! the namber is");
    System.out.print(y);
    }
    if (x>y)
    {
    System.out.print("no! the namber is");
    System.out.print(y);
    }
    }
    }

  7. יוחנן | 5/26/2013 5:26:14 AM
    תודה, זה עזר לי
  8. עידן | 7/23/2013 4:59:21 PM

    אני לא מצליח להריץ את הקוד יש לי בעיה עם הelse

     public class bollean {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            // boolean and if practice
            int i =5;
            if (i>3){
                System.out.println("Good");
            }
            eles if(i == 5){
                System.out.println("Life");
            }

        }

    }
  9. גל | 9/26/2013 1:27:46 PM

     כתבת בקוד eles ולא else תשנה את זה וזה אמור לעבוד

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