This chapter will discuss conditional statements in the Java language. Depending on the condition, a program may have different behavior. First will be explained the syntax of conditional operators if
and if-else
with appropriate examples. Then we will see in what range (scope) a variable lives. Finally, we will look through debugging techniques to track the step-by-step execution of our programs.
In programming, we can compare values using the following operators:
- Operator
<
(less than) - Operator
>
(greater than) - Operator
<=
(less than or equals) - Operator
>=
(greater than or equals) - Operator
==
(equas) - Operator
!=
(not equals)
When comparing values, the result is of boolean type with a value true
or false
, depending on whether the result of the comparison is true or false.
In Java, we can use the following comparison operators when comparing numbers:
Operator description | Notation |
---|---|
Equals to | == |
Not Equals to | != |
Greater than | > |
Greater than or equals | >= |
Less than | < |
Less than or equals | <= |
The following example demonstrates how to use comparison operators in expressions:
In programming, we often check given conditions and perform different actions depending on the result. This is done by if
conditional statement, which has the following structure:
if (condition) {
// body of if conditional statement
// single command or block of code to be executed if the condition is true
}
Read the grade from the console and check if it is excellent (≥ 5.50
).
Test the code (from the example) locally. Test with different grades, like 4.75, 5.49, 5.50, and 6.00. If the grade is less than 5.50, the program will not output any result, otherwise (if the grade is greater than or equals 5.50), the program will output "Excellent!".
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#0.
Simple if
conditions could be extended with an else
conditional statement, which specifies a block of code to be executed if the boolean expression (defined at the beginning if(condition)) returns false
. The resulting conditional statement is called if-else
construction and have the following behavior: if the condition returns a positive (true
) result – the code described in the curly brackets right after the if
clause will be executed, otherwise if the condition returns a negative (false
) result – the code described in the curly brackets after the else
clause will be executed. The format of the construction is:
if (condition) {
// body of if construction
// single command or block of code to be executed if the condition is true
} else {
// body of else construction
// single command or block of code to be executed if the condition is false
}
Like the example above, read the grade from the console and check if it is excellent, but we should return the output in both cases.
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#1.
When we have only one command in the body of the if
statement, we can skip the curly brackets. When we want to execute a block of code (group of commands), curly brackets are required, because if we skip them, only the first line after the if
clause will be executed.
It is a good practice to always put curly brackets because it makes our code more readable and cleaner. |
Here is an example that skipping curly brackets leads to confusion:
Executing the above code will output the following result on the console:
Here is the same example, but using curly brackets:
Executing the code with curly brackets will output the following result on the console:
Both use cases are correct and could be used depending on the situation and/or the specific requirements, but you always must be careful and check the expected results. |
Write a program that checks whether an integer is even or odd.
We can solve the problem with one if-else
statement and the operator %
, which returns the remainder of dividing two numbers.
Executing the above code will output the following result:
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#2.
Write a program that reads two integer numbers, from the console, and returns the greater one. Print the output in the following format: “Greater number: x”, where the x is the returned number.
Our first problem is to read both integer numbers from the console. Then we must perform the check using one if-else
statement in combination with the operator for greater than (>
). Part of the code is consciously blurred to test what you have learned so far.
Executing the above code will output the following result for numbers 3 and 5:
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#3.
Each variable has a scope in which it exists, called variable scope. This scope determines where the variable lives, in other words, the scope where you can use it. In Java, a variable scope begins from the line in which we defined it and ends with the first closing curly bracket }
(of the method, of the if
statement, etc.). Thus, it is important to know that any variable defined inside the body of an if
statement will not be available outside of it unless we have defined it above in the code.
In the example below we will get an error because on the last line we are trying to print the variable salary
that is defined inside the if
statement, and we do not have access to it outside the block (in this case we will receive notification from the IDE about variable scope).
Sometimes we need to do a sequence of conditions before we decide what actions our program will execute. In such cases, we can apply the construction if-else if… -else
. For this purpose, we use the following format:
if (condition) {
// body of if statement
} else if (condition2) {
// body of if statement
} else if (condition3) {
// body of if statement
} … else {
// body of else statement
}
Print a given digit, in the range from 1 to 9, in English (the digit is read from the console).
First, we read the digit from the console. Then using a sequence of conditions we determine the corresponding English word and finally print it to the console:
Scanner scanner = new Scanner(System.in);
int num = Integer.parseInt(scanner.nextLine());
if (num == 1) {
System.out.println("one");
} else if (num == 2) {
System.out.println("two");
} else if (…) {
…
} else if (num == 9) {
System.out.println("nine");
} else {
System.out.println("number too big");
}
The program logic from the above example sequentially compares the input digit from the console with the numbers from 1 to 9. Each following comparison is being performed only in case the preceding comparison is false. If none of the if
statements return true, then the last else
clause is executed.
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#4.
To consolidate our knowledge of the conditional statements if
and if-else
, let's solve several practical problems.
An integer is read from the console - the number of points. A bonus score adds to it according to the rules described below. Write a program that calculates the bonus score for this integer and the total number of points with the bonuses.
- If the integer is up to 100 inclusive, the bonus score is 5.
- If the integer is greater than 100, the bonus score is 20% from the integer.
- If the integer is greater than 1000, the bonus score is 10% from the integer.
- Additional bonus score (added separately from previous)
- If the integer is even -> +1 bonus score
- If the integer is odd, with the last digit equals 5 -> +2 bonus score
Input | Output |
---|---|
20 | 6 26 |
175 | 37 212 |
2703 | 270.3 2973.3 |
15875 | 1589.5 17464.5 |
We can calculate the main and additional bonus score with a sequence of if-else-if-else
statements. For the main bonus score, we have 3 cases (when the input integer is up to 100, between 100 and 1000, and greater than 1000). For the additional bonus score – 2 more cases (when the integer is even and odd, ended with 5).
Executing the above code will output the following result:
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#5.
Three athletes finish in a particular number of seconds (between 1 and 50). Write a program that reads the time of each athlete from the console and calculates their total time in "minutes:seconds" format. Seconds need to be formatted with a zero at the front if they're less than 10 (2 -> "02", 7 -> "07", 35 -> "35").
Input | Output |
---|---|
35 45 44 |
2:04 |
22 7 34 |
1:03 |
50 50 49 |
2:29 |
14 12 10 |
0:36 |
The problem has several solutions, but in the context of this chapter, we can do the following: First, sum up the three numbers to get the total result in seconds. Since 1 minute = 60 seconds, we will have to calculate the number of minutes and seconds in the range from 0 to 59:
- If the result is between 0 and 59, print 0 minutes + calculated seconds.
- If the result is between 60 and 119, print 1 minute + calculate seconds minus 60.
- If the result is between 120 and 179, print 2 minutes + calculate seconds minus 120.
- If the seconds are less than 10, print the number with zero in front.
A different solution that does not use the if-else
statement is more appropriate because you can use it for greater time values:
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#6.
Write a program that converts the distance between the following units: m
, mm
, cm
, mi
, in
, km
, ft
, yd
. Use the conversion table below to convert a value from one unit to another:
Input Unit | Output Unit |
---|---|
1 meter (m) | 1000 millimeters (mm) |
1 meter (m) | 100 centimeters (cm) |
1 meter (m) | 0.000621371192 miles (mi) |
1 meter (m) | 39.3700787 inches (in) |
1 meter (m) | 0.001 kilometers (km) |
1 meter (m) | 3.2808399 feet (ft) |
1 meter (m) | 1.0936133 yards (yd) |
The program will receive three input lines:
- First line: a number for converting.
- Second line: input unit.
- Third line: output unit (for the result).
Input | Output |
---|---|
12 km ft |
39370.0788 |
150 mi in |
9503999.99393599 |
450 yd km |
0.41147999937455 |
Read the input data. We can use the toLowerCase()
function, which will make all letters lowercase. As we can see from the table in the problem, we can easily convert values if we use meters as our base unit. Afterward calculate the result from the conversion of the input number in meters, performing a set of checks to define the input unit. Then calculate directly the output unit.
Keep in mind that in Java, you cannot use operator == for string comparison. For this purpose, you may use the built-in functions. |
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#7.
There were probably errors in the code you wrote so far. There is an easier way to find errors, use a tool. In the following section, we will look at one.
Debugging lets you find and resolve errors, called bugs, a lot faster. Debugging is the process that lets you track step by step the execution of a program This tracking is possible by pausing the execution of the program and analyzing its state by thorough examination, line by line. Of the logic that follows, the defined variables and how they are changed, and so on.
By pressing a combination of buttons [Shift + F9] you run the current program in debug mode. To move to the next line in the code, use the [F7] button.
By pressing a combination of buttons [CTRL + F8] you create special markers called breakpoints that suspend program execution at a specific point.
To get a better understanding of what we have learned, let's solve a few practical exercises.
Create a new project with the name Java in IntelliJ Idea and leave all other options at their default state. To better organize the solutions to the problems from the exercises - each solution will be in a separate class and all classes will be in the src directory of the project.
Run IntelliJ Idea. Create a new Java project: [File] → [New] → [Project].
Choose Java from the left panel and leave anything else at its default state, press [Next]. In the next dialog box, we have an option to create a project from a template. Usually, we will do this, but now we can skip it and just press [Next]. In the last dialog box, enter the project's name and storage location, and then click [Finish].
We now have an empty Java project:
The next problem is to write a program that reads input data from the console. As input data, enter a password (a single line with random text) and check if the input data is the same as the phrase "s3cr3t!P@ssw0rd". Output "Welcome" if the result is true and "Wrong password!" otherwise.
Input | Output |
---|---|
qwerty | Wrong password! |
s3cr3t!P@ssw0rd | Welcome |
s3cr3t!p@ss | Wrong password! |
To solve the problem it is necessary to use one if-else
statement.
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#8.
The next problem is to write a program that reads input data from the console. As input data, enter an integer and check if the input data is below 100, between 100 and 200, or above 200. Output the corresponding message as shown in the table below.
Input | Output |
---|---|
95 | Less than 100 |
120 | Between 100 and 200 |
210 | Greater than 200 |
Test your solution here:: https://judge.softuni.org/Contests/Practice/Index/651#9.
The next problem is to write a program that reads input data from the console. As input data, enter two words and check if they are the same. Do not distinguish between uppercase and lowercase letters. Output "yes" or "no".
Input | Output |
---|---|
Hello Hello |
yes |
SoftUni softuni |
yes |
Soft Uni |
no |
beer vodka |
no |
HeLlO hELLo |
yes |
Before comparing words, transform them to lowercase so that the size of the letters (uppercase/lowercase) doesn't affect the comparison: String wordFirst = scanner.next().toLowerCase().
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#10.
The next problem is to write a program that reads input data from the console. As input data, enter speed(a decimal number). Output information about the speed.
- At speed up to 10 (inclusive), print "slowly".
- At speed above 10 and up to 50, print "average".
- At speed above 50 and up to 150, print "fast".
- At speed above 150 and up to 1000, print "ultra fast".
- At greater speed, print "extremely fast".
Input | Output |
---|---|
8 | slow |
49.5 | average |
126 | fast |
160 | ultra fast |
3500 | extremely fast |
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#11.
The next problem is to write a program that reads input data from the console. As input data, enter the dimensions of a geometric figure and calculate its area. The figures are of four types: square, rectangle, circle, and triangle.
On the first line of input data, read the type of figure (square
, rectangle
, circle
, triangle
).
- If the figure is a square, on the next line read one number - the length of its side.
- If the figure is a rectangle, on the next two lines read two numbers - the lengths of its sides.
- If the figure is a circle, on the next line read one number - the radius of the circle.
- If the figure is a triangle, on the next two lines read two numbers - the length of its side and the length of the adjacent height.
Format the output to 3 digits after the decimal point.
Input | Output |
---|---|
square 5 |
25 |
rectangle 7 2.5 |
17.5 |
circle 6 |
113.097 |
triangle 4.5 20 |
45 |
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#12.
The next problem is to write a program that reads input data from the console. As input data, enter the hour and minutes (each on a separate line) of a 24-hour day and calculate what is going to be the time in 15 minutes. Print the output in hh: mm
format. The hours are always between 0 and 23, and the minutes are always between 0 and 59. Output the hours either using one or two digits. Minutes are always displayed with two digits and a leading zero when necessary.
Input | Output |
---|---|
1 46 |
2:01 |
0 01 |
0:16 |
23 59 |
0:14 |
11 08 |
11:23 |
12 49 |
13:04 |
To solve the problem, add 15 minutes and perform a few checks. If the minutes exceed 59, increase the hours by 1 and decrease the minutes by 60. Similarly, consider the case when the hours exceed 23. When printing the minutes, check for leading zero.
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#13.
The next problem is to write a program that reads input data from the console. As input data, enter 3 integers. Output if they are equal (yes/no).
Input | Output |
---|---|
5 5 5 |
yes |
5 4 5 |
no |
1 2 3 |
no |
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#14.
The next problem is to write a program that reads input data from the console. As input data, enter a number in the range [0 … 100] and convert the number into a text. Output the text in English.
Input | Output |
---|---|
25 | twenty five |
42 | forty two |
6 | six |
To solve the problem, first, check for one-digit numbers, and if the number has only one digit, print the appropriate text for it. Then check for two-digit numbers. Print them in two parts: left part (tens = number / 10
) and right part (units = number % 10
). If the number has three digits, it must be 100 and considered a special case.
Test your solution here: https://judge.softuni.org/Contests/Practice/Index/651#15.