# Variables, Conditionals and Exercises

#### Java 101 - Class 1

What we want to achieve

* Exercises
* Debugging
* תנאי מקוצר -  *ternary* conditional *operator*&#x20;
* MyConsole and Scanner
* *compilation* and *runtime errors*
* compiling and running via cmd/terminal
* טבלת מעקב (מצגות)

What we learnt in class

* חשבון ומודלו
* if and if-else
* printing to screen `System.out.println`
* while
* Interger.MAX\_VALUE
* המרת מספרים מממשי לבינראי ולהיפך

## Exercises

### I0 - קלט ופלט

**פלט** נעשה ע"י הפקודה

```java
System.out.println("hello 👋")
```

ברוב הide נוכל לכתוב `syso` או `sout` כדי שהide ישלים אותנו אוטומטית

בקלט יש לנו 2 דרכים

* Scanner
* MyConsole (מה שלמדים בהתחלה בשיעור)

#### MyConsole

```java
public class Main {
    public static void main(String[] args) {
        int myInt = MyConsole.readInt("enter int: ");
        double myDouble = MyConsole.readDouble("enter double: ");
        String myString = MyConsole.readString("enter word: ");

        System.out.println("\nint is: " + myInt);
        System.out.println("double is: " + myDouble);
    }
}
```

```
enter int:  4.5
Not an integer. Please try again!
enter int:  7
enter double:  10.51

int is: 7
double is: 10.51
string is: hello
```

#### Scanner

```java
Scanner scanner = new Scanner(System.in);
String myString = scanner.next();
int myInt = scanner.nextInt();
scanner.close();

System.out.println("myString is: " + myString);
System.out.println("myInt is: " + myInt);
```

input:

```
Hi 5
```

output:

```
myString is: Hi
myInt is: 5
```

#### Variables

משתנים פרימיטיבים

![](https://vertex-academy.com/tutorials/wp-content/uploads/2016/08/800x459xvariables-Java-vertex-academy.png.pagespeed.ic.CKRV4A1dpK.webp)

[Image Source](https://vertex-academy.com/tutorials/en/types-variables-java-create-variable/)

```java
public class Main {
    public static void main(String[] args) {
        byte tinyNum  =  100;
        short smallNum = 20_000;
        int num = 1<<20;
        long largeNum = (long) 1<<50;
        float decimal = 10.5050f;
        double largeDecimal = 3.141592653589;
        boolean trueOrFalse = true;

        System.out.println(num);
        System.out.println(largeNum);
        System.out.println(decimal);

        if (trueOrFalse)
            System.out.println("true");
        else
            System.out.println("false");
    }
}
```

```
1048576
1125899906842624
10.505
true
```

#### if and if else

![Wikipedia if-else flow chart](https://s3.amazonaws.com/hr-challenge-images/13689/1446563087-4ec019a919-332px-If-Then-Else-diagram.svg.png)

#### תרגיל: תנאים

Given an integer *n* , perform the following conditional actions:

* If *n* is odd, print `Strange`
* If *n* is even and in the inclusive range of 2 to 5 , print `Not Strange`
* If *n* is even and in the inclusive range of 6 to 20, print `Strange`
* If *n* is even and greater than 20, print `Not Strange`

**Solution**

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.print("Enter an integer: ");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        if (n%2==1)
            System.out.println("Strange");
        else if (n%2==0 && n>=2 && n<=5)
            System.out.println("Not Strange");
        else if (n%2==0 && n>=6 && n<=20)
            System.out.println("Strange");
        else if (n%2==0 && n>20)
            System.out.println("Not Strange");
    }
}
```

```
Enter an integer: 20
Strange
```

#### תרגיל: האם זה שנה מעוברת

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

To determine whether a year is a leap year, follow these steps:

1. If the year is evenly divisible by **4**, go to step 2. Otherwise, go to step 5.
2. If the year is evenly divisible by **100**, go to step 3. Otherwise, go to step 4.
3. If the year is evenly divisible by **400**, go to step 4. Otherwise, go to step 5.
4. The year is a leap year (it has 366 days).
5. The year is not a leap year (it has 365 days).

examples:

* 1600 ✔️ leap year
* 1700 ❌ not leap year
* 1800 ❌ not leap year
* 1900 ❌ not leap year
* 2000 ✔️ leap year
* 2001 ❌ not leap year
* 2004 ✔️ leap year

```java
package com.company;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("enter year: ");
        int year = sc.nextInt();

        boolean four = ((year % 4) == 0);
        boolean hundred = ((year % 100) == 0);
        boolean fourhundred = ((year % 400) == 0);
        boolean isleapyear = fourhundred || (four && !hundred);
        System.out.println(year + " is a leap year? " + isleapyear);
        sc.close();
    }
}
```

```
enter year: 2021
2021 is a leap year? false
```

בא עכשיו לגרום לתוכנית לא להפסק

```java
package com.company;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int year=-1;
        while (year!=0) {
            System.out.print("enter year: ");
            year = sc.nextInt();
            boolean four = ((year % 4) == 0);
            boolean hundred = ((year % 100) == 0);
            boolean fourhundred = ((year % 400) == 0);
            boolean isleapyear = fourhundred || (four && !hundred);
            System.out.println(year + " is a leap year? " + isleapyear);
        }
        sc.close();
    }
}
```

```
enter year: 2020
2020 is a leap year? true
enter year: 2021
2021 is a leap year? false
enter year: 0
0 is a leap year? true
```

כמו שניתן לשים לב, עטפנו את התוכנית שלנו עם `while`

```java
while (year!=0) {
    ...
}
```

> שים לב שמנו את Scanner בחוץ ככה לא נצטרך פעם לייצר משתנה חדש כל פעם. בנוסף גם הסגירה שלו בחוץ

**תרגילים: המרות**

מה יהיה הפלט?

```java
public class Main {
    public static void main(String[] args) {
        int x = 8, y = 13;
        double d = y/x;
        System.out.println("y/x = "+d);
        d = (double)y/x;
        System.out.println("y/x = "+d);
        double a = 5, b = 18;
        int c = (int)(a/b);
        System.out.println("a/b = "+c);
    }
}
```

```
y/x = 1.0
y/x = 1.625
a/b = 0
```

שאלו את עצמכם למה ההדפסה הראשונה יוצא 1.0 🤔

**מה יהיה הפלט?**

```java
public class Main {
    public static void main(String[] args) {
        double num = 123.45687;
        System.out.println((int)(num * 100) / 100.0);
    }
}
```

```
123.45
```

**מה יהיה הפלט?**

```java
public class Main {
    public static void main(String[] args) {
        float x = (float)1.0, y = 3.0f, z=99;
        System.out.println(x/y);
        System.out.println(z);
    }
}
```

```
0.33333334
99.0
```

כאן הכזרנו על 3 משתני float

לולי היינו עושים ככה הקוד לא מתקפל

```java
float x = (float)1.0, y = 3.0, z=99;
```

לא היה מתקפל כי ה y היה double. לזה קוראים ***compilation error***

### Runtime Error

```java
public class Main {
    public static void main(String[] args) {
        System.out.println("Integer.MAX_VALUE = "+Integer.MAX_VALUE);
        System.out.println("Integer.MIN_VALUE = "+Integer.MIN_VALUE);
        System.out.println("Integer.SIZE = "+Integer.SIZE);
        int x = Integer.MAX_VALUE + 1;
        System.out.println("Integer.MAX_VALUE + 1 = "+x);
        int a = 0, b=10, z;
        z = b/a;
        System.out.println("b/a = "+z);
    }
}
```

```
Integer.MAX_VALUE = 2147483647
Integer.MIN_VALUE = -2147483648
Integer.SIZE = 32
Integer.MAX_VALUE + 1 = -2147483648
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at com.company.Main.main(Main.java:11)
```

> מאוחר יותר נלמד על try וcatch שיעזרו לנו להתמודד עם שגיאות

#### תרגיל

כתבו אם מספר הוא int, short or long

![](https://www.codingeek.com/wp-content/uploads/2017/07/Integer-Sizes.png)

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.print("Enter an integer: ");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        if (Short.MAX_VALUE>=n && Short.MIN_VALUE<=n)
            System.out.println("n is a: short");
        else if (Integer.MAX_VALUE>=n && Integer.MIN_VALUE<=n)
            System.out.println("n is an: int");
        else if (Long.MAX_VALUE>=n && Long.MIN_VALUE<=n)
            System.out.println("n is a: long");
    }
}
```

```
Enter an integer: 100000
n is an: int
```

מספר שלם עובד לנו, אבל מה קורה במספר ממשי

```
Enter an integer: 10.5
Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at com.company.Main.main(Main.java:8)
```

קיבלנו Runtime error

על הדרך בא נוסיף גם while ככה שכל עוד הקלט אינו 0 הוא ימשיך לבקש

```java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.print("Enter a number: ");
        Scanner scanner = new Scanner(System.in);
        double n = scanner.nextDouble();

        while (n!=0.) {
            if (Short.MAX_VALUE >= n && Short.MIN_VALUE <= n && n % 1 == 0.) {
                System.out.println(n + " can fit in a: ");
                System.out.println("* short\n* int\n* long\n");
            } else if (Integer.MAX_VALUE >= n && Integer.MIN_VALUE <= n && n % 1 == 0.) {
                System.out.println(n + " can fit in a: ");
                System.out.println("* int\n* long\n");
            } else if (Long.MAX_VALUE >= n && Long.MIN_VALUE <= n && n % 1 == 0.)
                System.out.println(n + " can fit in a: \n* long\n");
            else if ((Float.MAX_VALUE >= n && Float.MIN_VALUE <= n) || (Double.MAX_VALUE >= n && Double.MIN_VALUE <= n))
                System.out.println("n is either a: float, double\n");

            //receive next input
            System.out.print("Enter a number: ");
            n = scanner.nextDouble();
        }

        scanner.close();
    }
}
```

```
Enter a number: 10.5
n is either a: float, double

Enter a number: 1000000
1000000.0 can fit in a: 
* int
* long

Enter a number: 0
```

> גם היינו יכול לעשות `&& ((short) n) == n` ו `((int) n) == n` בתנאי
>
> יש לזה ביצועים יותר גבוההים


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://nissan-goldberg.gitbook.io/java101/lesson-1/lesson-1-conditionals.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
