🔁 לולאות ב-Java

📘 תוכן עניינים:

מהי לולאה?

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

1️⃣ לולאת for

לולאה קלאסית עם שליטה על התחלה, תנאי וסיום.

for (int i = 0; i < 5; i++) {
  System.out.println(i);
}

פלט: 0 עד 4

2️⃣ לולאת while

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

int i = 0;
while (i < 5) {
  System.out.println(i);
  i++;
}

פלט: 0 עד 4

3️⃣ לולאת do-while

לולאה שמתבצעת לפחות פעם אחת גם אם התנאי לא מתקיים.

int i = 0;
do {
  System.out.println(i);
  i++;
} while (i < 5);

פלט: 0 עד 4

4️⃣ לולאות מקוננות (Nested Loops)

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

for (int i = 0; i < 3; i++) {
  System.out.println("i: " + i);
  for (int j = 0; j < 3; j++) {
    System.out.println("  j: " + j);
  }
}

פלט: כל ערך של i עם כל ערך של j בפנים

🧠 שאלות לדוגמה:

🔍 שאלות על לולאות for

📘 שאלה 2: איזון סוגריים

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

לדוגמה:
"()()" - ביטוי מאוזן
"(()())" - מאוזן
")()" - לא מאוזן

✏️ סעיף א' - שאלות אמריקאיות

לפניכם מספר ביטויים. עברו על כל אחד מהם והחליטו האם הוא ביטוי מאוזן או לא:

  • ())( ← מאוזן ❌ / אינו מאוזן ✅
  • ()()() ← מאוזן ✅ / אינו מאוזן ❌
  • ((()) ← מאוזן ❌ / אינו מאוזן ✅
  • ((()())) ← מאוזן ✅ / אינו מאוזן ❌
  • )( ← מאוזן ❌ / אינו מאוזן ✅

🧠 סעיף ב' - כתיבת פונקציה

כתבו שיטה סטטית בשם isBalanced שמקבלת מחרוזת exp ומחזירה האם הביטוי מאוזן. השיטה תחזיר true אם מאוזן ו־false אחרת.

public static boolean isBalanced(String exp) {
  int count = 0; // סופר את כמות הסוגריים הפתוחים מול הסגורים

  for (int i = 0; i < exp.length(); i++) {
    char c = exp.charAt(i);

    if (c == '(') {
      count++; // סוגר פותח
    } else if (c == ')') {
      count--; // סוגר סוגר
    }

    if (count < 0) {
      return false; // יותר סוגרים מסגירות, לא תקין
    }
  }

  return count == 0; // תקין רק אם נסגרו כל הפתיחות
}

הקוד משתמש בלולאת for כדי לעבור על כל התווים במחרוזת ולבדוק האם הם סוגריים. אם יש יותר סוגרי סגירה מפתיחה – נחזיר false. רק אם כל הסוגריים מאוזנים – הפונקציה תחזיר true.

🔍 שאלות על לולאות for

📘 שאלה 2: איזון סוגריים

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

לדוגמה:
"()()" - ביטוי מאוזן
"(()())" - מאוזן
")()" - לא מאוזן

✏️ סעיף א' - שאלות אמריקאיות

לפניכם מספר ביטויים. עברו על כל אחד מהם והחליטו האם הוא ביטוי מאוזן או לא:

  • ())( ← מאוזן ❌ / אינו מאוזן ✅
  • ()()() ← מאוזן ✅ / אינו מאוזן ❌
  • ((()) ← מאוזן ❌ / אינו מאוזן ✅
  • ((()())) ← מאוזן ✅ / אינו מאוזן ❌
  • )( ← מאוזן ❌ / אינו מאוזן ✅

🧠 סעיף ב' - כתיבת פונקציה

כתבו שיטה סטטית בשם isBalanced שמקבלת מחרוזת exp ומחזירה האם הביטוי מאוזן. השיטה תחזיר true אם מאוזן ו־false אחרת.

public static boolean isBalanced(String exp) {
  int count = 0; // סופר את כמות הסוגריים הפתוחים מול הסגורים

  for (int i = 0; i < exp.length(); i++) {
    char c = exp.charAt(i);

    if (c == '(') {
      count++; // סוגר פותח
    } else if (c == ')') {
      count--; // סוגר סוגר
    }

    if (count < 0) {
      return false; // יותר סוגרים מסגירות, לא תקין
    }
  }

  return count == 0; // תקין רק אם נסגרו כל הפתיחות
}

הקוד משתמש בלולאת for כדי לעבור על כל התווים במחרוזת ולבדוק האם הם סוגריים. אם יש יותר סוגרי סגירה מפתיחה – נחזיר false. רק אם כל הסוגריים מאוזנים – הפונקציה תחזיר true.