执行结构
概述
1996 年,计算机科学家 Bohm 和 Jacopini 证明了:任何简单或复杂的算法都可以由 顺序结构、 分支结构和 循环结构这三种基本结构组合而成。
它们的共同点是都包含一个入口和一个出口,它们的每个代码都有机会被执行,不会出现死循环。
一、顺序结构
顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作
二、分支结构
分支结构又被称为选择结构,根据条件成立与否来执行操作,
1、if 条件语句
if 条件结构是根据条件判断之后再做处理
if(条件语句){…}
if (条件语句){…}else{…}
if (条件语句){…}else if(条件语句){…}
if (条件语句){…}else if(条件语句){…}else{…}
例子:用户输入学生成绩,判断成绩是否及格,判断条件为 优良: > 90、良好:81-90、中:60-80、不及格:<60
1、if 条件语句
import java.util.Scanner;
public static void main(String[] args) {
//创建Scanner对象input
Scanner input = new Scanner(System.in);//扫描用户在控制台的输入内容
System.out.println("请输入成绩:");
int i = input.nextInt();//接收用户输入的int数据
if(i >= 91) {
System.out.println("优");
}
else if (i >= 81 && i <91){
System.out.println("良");
}
else if (i >= 60 && i<= 80) {
System.out.println("中");
}
else {
System.out.println("不及格");
}
}
2、switch 语句
switch(表达式){
case 取值 1: 语句块 1;break;
case 取值 n: 语句块 n;break;
default: 语句块 n+1;break;
}
switch 语句有关规则
表达式的返回值必须是下述几种类型之一:int, byte, char, short,String;
case 子句中的取值必须是常量,且所有 case 子句中的取值应是不同的;
default 子句是可选的;
break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果 case 后面没有写 break 则直接往下面执行!
Case 后面的执行体可写{ }也可以不写{ }
例题:多分支月份输出天数(充分利用语句特性)
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入月份:");
int mouth = input.nextInt();
switch (mouth) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(mouth+"月有31天!");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(mouth+"月有30天!");
break;
case 2:
System.out.println(mouth+"月有28天!");
break;
default:
System.out.println("请输入正常月份哦!");
break;
}
}
三、循环结构
循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止。
1、简介
- 循环语句功能
在循环条件满足的情况下,反复执行特定代码 - 循环语句分类
for 循环
while 循环
Do/while 循环
2、while 循环
符合条件,循环继续执行;否则,循环退出
特点:先判断,再执行
语法:
while(条件表达式){
//语句块;
}
使用 while 循环的步骤
1、分析循环条件和循环操作
2、套用 while 语法写出代码
3、检查循环是否能够退出
实现示例:
录入 班级人数 和 学员成绩 ,计算班级 学员 的 平均成绩
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入班级人数:");
//使用变量classnums记录班级总人数
int classnums = input.nextInt();
//用于记录循环的次数,控制循环何时结束
int num = 0;
//用来记录班级总成绩
int sum = 0;
//当num的值小于班级总人数classnums时循环进行
while(num<classnums)
{
//记录到第几个班级人数
num++;
System.out.println("请输入"+num+"位学员的成绩:");
int score = input.nextInt();//获取学员成绩
sum += score;
}
System.out.println("平均成绩为:"+sum/classnums);
}
3、do-while 循环
先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出
特点:先执行,再判断
语法:
do {
循环操作
}while ( 条件表达式 );
- while 循环和 do-while 循环的区别?
while:先判断条件,如果条件满足,再执行循环操作
do while:先执行一遍循环操作,然后再判读条件,如果条件满足,继续执行循环操作
public static void main(String[] args) {
int i = 0;
do {
i++;
System.out.println(i);
}while(i<5);
}
4、for 循环
语法:
for(初始化参数;判断条件 ;更新循环变量){
循环体;
}
1.
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
结果 0 1 2 3 4 5 6 7 8 9
for (;; ) {
System.out.println(i);
}
}
相当于死循环 默认条件为true
for (System.out.println(1);true;System.out.println(2) ) {
System.out.println(3);
}
}
结果: 1 2 3 2 3 2 3
相当于先执行println(1)再执行默认true然后println(2)再println(3)最后一直循环2 3
5、嵌套for 循环图形打印
- 外层循环控制的输行数
- 内层循环控制的是列数
public static void main(String[] args) {
//外层循环控制的输行数
for (int i = 0; i < 5; i++) {
//内层循环控制的是列数
for (int j = 0; j < 5; j++)
{
System.out.print("* ");
}
System.out.println();
}
}
结果:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
例题2 打印
*
***
*****
*******
*****
***
*
public static void main(String[] args) {
//第一个外循环先打印菱形前4行
for (int i = 0; i < 4; i++) {
//i = 0 1 2 3
//内层循环1,控制的是每行空格数 : 第一行3个空格, 第二行2个空格,第三行1个空格,第四行0空格
for (int j = i+1; j < 4 ; j++)
{
System.out.print(" ");
}
//内层循环2。控制的是每行*数 : 第一行1个*,第二行3个*…
for (int j = 0; j < i*2+1 ; j++)
{
System.out.print("*");
}
System.out.println();
}
//第二个外循环打印下面3行 i1 3 2 1
for (int i1 = 3; i1 > 0 ; i1--)
{
//打印下面3行每行空格的数量
for (int i = 0; i < 4-i1; i++)
{
System.out.print(" ");
}
//打印下面3行每行*的数量
for (int j = 0; j < i1*2-1 ; j++)
{
System.out.print("*");
}
System.out.println();
}
}
例题3:空心菱形
*
* *
* *
* *
* *
* *
*
public static void main(String[] args) {
//外层循环控制的输行数 4 行
for (int i = 0; i < 4; i++)
{
//i = 0 1 2 3
//内层循环1,控制的是空格列数 空格数跟原本的还是不变
for (int j = i+1; j < 4 ; j++)
{
System.out.print(" ");
}
for (int j = 0; j < i*2+1 ; j++)
{
//原本实心的现在只打印这一行的第一个和最后一个 用if语句来判断
if(j == 0 || j == i*2)
{
System.out.print("*");
}
//这一行其余的地方来打空格
else
{
System.out.print(" ");
}
}
//换行
System.out.println();
}
//打印下三行i1 3 2 1
for (int i1 = 3; i1 > 0 ; i1--) {
//空格数和原来不变
for (int i = 0; i < 4-i1; i++)
{
System.out.print(" ");
}
for (int j = 0; j < i1*2-1 ; j++)
{
//原本实心的现在只打印这一行的第一个和最后一个 用if语句来判断
if(j == 0||j == i1*2-2)
{
System.out.print("*");
}
//这一行其余的地方来打空格
else
{
System.out.print(" ");
}
}
System.out.println();
}
}
6、Break与continue
/**
* break与continue语句
* break是用于终止本轮所有次循环。即不执行本次循环中break后面的语句,直接跳出循环。
* continue是用于终止本轮本次循环。即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。
*
* @param args
*/
public static void main(String[] args) {
for(int i=0;i<10;i++) {
if(i==5) {
continue;
}
System.out.println(i);//只是跳过i=5的打印结果
}
}
}
7、 如何退出多重循环
7、 如何退出多重循环
/**
* 如何退出多重循环
* @param args
*/
public static void main(String[] args) {
haha:for(int i=0;i<10;i++) {
for(int j=0;j<10;j++) {
System.out.println("i="+i+" , j="+j);
if(i==5 && j==5) {
break haha;
}
}
}
}
在主循环前加:号和变量名haha: 在break后+变量名即可退出循环
8、判断用户输入类型
input.hasNextInt()//判断用户是否输入为Int类型
If(input.hasNextInt){
System.out.println("int");
}
Else{
System.out.println("数据类型错误");
}