For those who have just started learning programming including the Java language, and those who have already learned it, for review This time I am writing to learn about ** conditional branching **.
[Introduction to Java Table of Contents] -Variables and types ・ Type conversion -Variable Scope -String operation -Array operation ・ Operator ・ Conditional branch ← Now here ・ Repeat processing ・ About class (in preparation) ・ Abstract class (in preparation) ・ Interface (in preparation) ・ Encapsulation (in preparation) ・ About the module (in preparation) -Exception handling ・ About lambda expression ・ About Stream API
It is to divide the processing to be executed depending on whether the conditions in the source code are satisfied.
If 〇〇, process A, if △△, process B. It's like
.
It is used when you have a conditional expression and perform processing according to the result of that condition.
The result of the conditional expression is returned with boolean value (true, false)
, and when ** true, the processing in the if statement is executed. ** **
syntax
if(Conditional expression) {
processing
};
For example, ** if the conditional expression is true. ** **
Example if if is true
int num = 10;
if (num < 20) {
System.out.println("num value is less than 20");
}
System.out.println("Processing after if statement");
The execution result is as follows.
python
num value is less than 20
Processing after if statement
Since the conditional expression is judged and the result is true, the processing inside the if statement block is executed, and then the processing outside the if block is executed. It will be the flow.
** If the conditional expression is false. ** **
Example if if is false
int num = 10;
if (num < 5) {
System.out.println("num value is less than 5");
}
System.out.println("Processing after if statement");
The execution result is as follows.
Execution result
Processing after if statement
Since the conditional expression is false, the processing inside the if statement block is not executed, and only the subsequent processing is executed.
It is also possible to describe an if statement inside an if statement. It's called ** nesting **. However, be careful as it will be difficult to read if you write too many.
if nesting
int num = 10;
if (num > 0) {
System.out.println("num is a positive value");
if (num % 2 == 0) {
System.out.println("num is even");
}
}
To compare if the values are the same, write ==
. Note that if there is only one =
, it will be an assignment operator instead of a relational operator.
The following will result in a compilation error.
Invalid code
int a = 20;
int b = 50;
if (a = b) { //The conditional expression does not hold, just by substituting b for a of int type.
System.out.println("The values of a and b are the same");
}
Compare the values as follows.
Valid code
int a = 50;
int b = 50;
if (a == b) {
System.out.println("The values of a and b are the same");
}
Execution result
The values of a and b are the same
There are some patterns that do not cause a compile error even if you make an assignment at the conditional expression.
Example of assignment in conditional expression
boolean bool1 = false;
boolean bool2 = true;
if(bool1 = bool2) { //As a result of substitution, boolean value is returned, so there is no problem as a conditional expression.
System.out.println("bool1: " + bool1);
System.out.println("bool2: " + bool2);
}
As a result of substituting true bool2 for false bool1, the conditional expression becomes true. Therefore, the processing in the if statement block is executed.
Execution result
bool1: true
bool2: true
You can describe and execute the process you want to perform not only when the conditional expression is true but also when it is false.
syntax
if(Conditional expression) {
Process 1
} else {
Process 2
};
Process 1 is executed when the conditional expression is true, and process 2 is executed when the conditional expression is false.
For example, ** if the conditional expression is true. ** **
Example if if is true
String name1 = "Yanagita";
String name2 = "Yanagita";
if (name1 == name2) {
System.out.println("name1 and name2 are the same");
} else {
System.out.println("name1 and name2 are not the same");
}
System.out.println("if-Processing after the else statement");
The execution result is as follows.
Execution result
name1 and name2 are the same
if-Processing after the else statement
Since the conditional expression is true, the processing inside the if statement block is executed. Then, the inside of the else block is not executed, and the processing outside the if statement block is executed. It will be the flow.
** If the conditional expression is false. ** **
Example if if is false
String name1 = "Cristiano Ronaldo";
String name2 = "Lionel Messi";
if (name1 == name2) {
System.out.println("name1 and name2 are the same");
} else {
System.out.println("name1 and name2 are not the same");
}
System.out.println("if-Processing after the else statement");
The execution result is as follows.
Execution result
name1 and name2 are not the same
if-Processing after the else statement
Since the conditional expression is false, the processing inside the if statement block is not executed, and the processing of the else statement block is being executed. Then, the processing outside the if statement block is executed. It will be the flow.
Now you can implement the processing when the conditional expression is false.
Until now, there was only one conditional expression, but you can use multiple conditional expressions by using the else if statement.
syntax
if(Conditional expression 1) {
Process 1
} else if (Conditional expression 2) {
Process 2
} else {
Process 3
};
Process 1 is executed when conditional expression 1 is true, process 2 is executed when conditional expression 2 is true, and process 3 is executed when the first and second conditional expressions are false.
** The else if statement evaluates conditional expressions in order from the top, and if a certain condition is true, only the processing statement in that block is executed. ** **
For example, ** if the conditional expression if is true. ** **
Example if if is true
String color = "red";
if (color == "red") {
System.out.println("color is red");
} else if (color == "yellow") {
System.out.println("color is yellow");
} else {
System.out.println("color is neither red nor yellow");
System.out.println("color is" + color);
}
System.out.println("else if example");
The execution result is as follows.
Execution result
color is red
else if example
Since the first conditional expression is true, the processing inside the if statement block is executed. Then, the inside of the else if and else blocks is not executed, and the processing outside the if statement block is executed. It will be the flow.
Then ** if the conditional expression else if is true. ** **
else-Example if if is true
String color = "yellow";
if (color == "red") {
System.out.println("color is red");
} else if (color == "yellow") {
System.out.println("color is yellow");
} else {
System.out.println("color is neither red nor yellow");
System.out.println("color is" + color);
}
System.out.println("else if example");
The execution result is as follows.
Execution result
color is yellow
else if example
Since the first conditional expression is false, the processing inside the if statement block is not executed. And since the second conditional expression is true, the processing inside the else if statement block is executed. The inside of the else block is not executed, and the processing outside the if statement block is executed. It will be the flow.
** Finally, if all of the conditional expressions are false. ** **
Example where all conditional expressions are false
String color = "blue";
if (color == "red") {
System.out.println("color is red");
} else if (color == "yellow") {
System.out.println("color is yellow");
} else {
System.out.println("color is neither red nor yellow");
System.out.println("color is" + color);
}
System.out.println("else if example");
The execution result is as follows.
Execution result
color is neither red nor yellow
color is blue
else if example
Since the result of the first and second conditional expressions is false, the processing inside the else block is executed. Then, the processing outside the if statement block is executed. It will be the flow.
This makes it possible to divide the processing according to multiple condition judgments.
An operator that executes an expression according to the result of a conditional expression.
syntax
Conditional expression?Equation 1:Equation 2;
If the conditional expression returns true, then expression 1 is executed, and if false, expression 2 is executed.
For example, ** if the conditional expression is true. ** **
Example of ternary operator
String name = "yamada";
String str = "The length of the name is";
str += name.length() >= 4 ? "4 or more" : "3 or less";
System.out.println(str);
The execution result is as follows.
Execution result
Name length is 4 or more
The conditional expression is name.length ()> = 4
.
If true, 4 or more
, and if false, 3 or less
is combined with the string stored in str.
If the same process is described by an if-else statement, it will be as follows.
if-In the case of else
String name = "yamada";
String str = "The length of the name is";
if (name.length() >= 4) {
str += "4 or more";
} else {
str += "3 or less";
}
System.out.println(str);
The ternary operator is easier to write than the if-else statement.
The evaluation result of the expression is compared with the constant, and if they match, the process is executed. This is a method for performing multi-branch processing.
syntax
switch (formula) {
case constant 1:
Process 1;
break;
case constant 2:
Process 2;
break;
default:
Process 3;
}
If the result of the expression matches constant 1, process 1 is executed, and if it matches constant 2, process 2 is executed. If there is no match, the processing below default is executed. (The description of default is optional)
Switch statement example
String color = "blue";
switch (color) {
case "red":
System.out.println("color is red");
break;
case "yellow":
System.out.println("color is yellow");
break;
case "blue":
System.out.println("color is blue");
break;
default:
System.out.println("color is" + color);
break;
}
The execution result is as follows.
Execution result
color is blue
The result of the expression is the string "blue", which matches the third case. Therefore, the processing in it is executed.
The value that can be described in the expression of the switch statement must be a value of one of the data types ** char, byte, short, int, its wrapper class, enum, and String **.
If any other type is specified, a compile error will occur.
Switch statement expression error
double d = 2.0;
switch (d) { // Cannot switch on a value of type double. Only convertible int values, strings or enum variables are permitted
//abridgement
}
If the result of the expression is ** null **, assuming that the data type of the expression is adhered to, the compilation will succeed but an exception will be thrown at runtime.
Switch statement expression exception thrown
String ex = null;
switch (ex) {
case "a":
System.out.println("a");
break;
case "b":
System.out.println("b");
break;
default:
System.out.println("nothing");
break;
}
Execution result
Exception in thread "main" java.lang.NullPointerException
at Condition.main(Condition.java:102)
There is no problem even if you calculate in ().
Addition,
()Calculation example in
int a = 0;
switch (a + 1) {
case 0:
System.out.println("0");
break;
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
}
Execution result
1
Decrement etc.
()Calculation example 2
int a = 0;
switch (--a) {
case 0:
System.out.println("0");
break;
case 1:
System.out.println("1");
break;
default:
System.out.println("There is no corresponding number");
break;
}
Execution result
There is no corresponding number
However, declaring a variable in () will result in a compile error.
()Variable declaration with error
switch (int a = 0;) {
case 0:
System.out.println("0");
break;
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
}
(1) If the data type of the result of the expression and the data type specified in case do not match, a compile error will occur.
Error of the value specified in case
int num = 10;
switch (num) {
case "0": // Type mismatch: cannot convert from String to int
System.out.println("0");
break;
case "1": // Type mismatch: cannot convert from String to int
System.out.println("1");
break;
case "2": // Type mismatch: cannot convert from String to int
System.out.println("2");
break;
}
(2) If it is not a literal or a constant, a compile error will occur.
Error 2 of the value specified in case
int num = 10;
int a = 1;
int b = 2;
switch (num) {
case a: // case expressions must be constant expressions
System.out.println("1");
break;
case b: // case expressions must be constant expressions
System.out.println("2");
break;
default:
System.out.println("nothing");
break;
}
In this case, an error will occur because the variables a and b are specified in the case. Add the final qualifier to make it a constant, or specify a literal.
Error 2 correction ver of the value specified in case
int num = 10;
final int a = 1;
switch (num) {
case a:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
default:
System.out.println("nothing");
break;
}
(3) If null is specified, a compile error will occur.
Error 3 of the value specified in case
String name = "Tanaka";
switch (name) {
case "Yamada":
System.out.println("Yamada");
break;
case null: // case expressions must be constant expressions
System.out.println("null");
break;
}
④ Presence or absence of break statement
The word ** break; ** is missing from the switch statement after the `process has been executed. `` If you forget it, you will be comparing it with the next case for the first time, so be careful.
When you forget to break
int num = 10;
switch (num) {
case 0:
System.out.println("0");
break;
case 10:
System.out.println("10");
// break;Forgot to write
default:
System.out.println("nothing");
break;
}
After the process in case 10 is executed, the default process is also executed because there is no break statement.
Execution result
10
nothing
Be careful not to get an unintended execution result.
I learned how to branch the process according to the conditions as the process procedure of the program. Considering the readability of the source code, I would like to use it properly depending on the situation.
** Branch of processing ** ** Java switch statement **
Recommended Posts