目录
顺序控制
从上到下的逐步执行,中间没有任何判断和跳转
前向引用
先定义,后使用
分支控制(if-else)
单分支
import java.util.Scanner;
public class If{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄");
int age = myScanner.nextInt();
if(age > 18){
System.out.println("你的年龄大于18");
}
}
}
双分支
import java.util.Scanner;
public class If02{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄");
int age = myScanner.nextInt();
if(age > 18){
System.out.println("你的年龄超过18");
}else{
System.out.println("你的年龄不大");
}
}
}
多分支
import java.util.Scanner;
public class If03{
public static void main (String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄");
int age = myScanner.nextInt();
if(age < 18){
System.out.println("年龄小于18");
}else if(age < 30){
System.out.println("年龄小于30");
}else{
System.out.println("年龄大于30");
}
}
}
else可以不写,表示不符合条件的情况下,什么也不做。
switch
import java.util.Scanner;
public class Switch{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄");
int age = myScanner.nextInt();
switch(age){
case 18 :
System.out.println("年龄18");
break;
case 30 :
System.out.println("年龄30");
break;
case 50 :
System.out.println("年龄50");
break;
default:
System.out.println("你老了");
break;
}
}
}
细节讨论
- 表达式的数据类型应当与case的常量自动转换可比较
- 返回值必须是( byte \ short \ int \ char \ enum【枚举】\ String ) 类型
- case 语句里必须时常量,不可以时变量
- default 语句时可选的,没有case匹配时,执行 default
- break语句,用于执行case 分支后跳出switch ,若没有写break ,程序会顺序执行到switch 结尾
switch 和 if 的选择
- 判断的数值不多,符合( byte \ short \ int \ char \ enum【枚举】\ String ) 类型,用switch语句
- 对区间的判断、对Boolean类型的判断,使用if
- if的适用范围更广
循环控制
for循环
for(变量初始;条件;迭代){
代码块;
}
- 变量初始(迭代)可以初始化(迭代)多个条件,要求类型一样,并且用逗号隔开
- 循环条件是一个返回布尔值的一个表达式
while循环
while(循环条件){
循环体;
循环变量迭代;
}
do-while循环
do{
循环体;
循环变量迭代;
}while(循环条件);
- do while 也是关键字
- 有循环四要素,只是位置不一样
- 先执行,后判断
- 最后有分号
多重循环(嵌套循环)
for(变量初始;条件;迭代){
for(变量初始;条件;迭代){
代码块;
}
}
共循环m*n次
练习
金字塔
import java.util.Scanner;
public class For01{
public static void main (String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入金字塔的行数");
int n = myScanner.nextInt();
for (int i = 1 ; i <= n ; i++) {//i 表示层数
//打印空格
for (int k = 1 ; k <= n - i ; k++) {
System.out.print(" ");
}
//打印星星
for (int j = 1 ; j <= 2*i-1 ; j++ ) {
System.out.print("*");
}
//换行
System.out.print("\n");
}
}
}
空心金字塔
import java.util.Scanner;
public class For01{
public static void main (String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入金字塔的行数");
int n = myScanner.nextInt();
for (int i = 1; i <= n; i++) {//i 表示层数
//打印空格
for (int k = 1; k <= n - i; k++) {
System.out.print(" ");
}
//打印星星
if(i == 1){
System.out.print("*");
}else if(i == n){
for (int j = 1; j <= 2*i-1; j++ ) {
System.out.print("*");
}
}else{
System.out.print("*");
for(int j = 0;j < 2*i-3;j++){
System.out.print(" ");
}
System.out.print("*");
}
//换行
System.out.print("\n");
}
}
}
跳转控制语句
break
提前结束循环。
//import java.util.Scanner;
public class Break{
public static void main (String[] args){
//Scanner myScanner = new Scanner(System.in);
int i = 0;
for(;i < 10;i++){
if(i == 3)break;
}
System.out.println("i = " + i);
}
}
标签
- 在多层嵌套里,可以通过标签指明要终止哪一层语句。
- 语法:break 标签名。标签名字由程序员决定。
- 标签写在for的上一句,与for 对齐
- 在实际开发环境中,一般不使用
continue
- 结束本次循环,继续下次循环
- 也可使用标签,指定跳转该层循环
return
- 使用在方法中,表示跳出结束所在方法。
- 如果在main中,表示跳出程序