==day4==
流程控制
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑块
-
三种基本流程结构:
- **顺序结构 **
- 程序从上到下逐行执行,中间没有判断和跳转
- 分支结构
根据条件选择性的执行某行某段代码
有
if-else
和switch-case
两种分支语句
- 循环结构
- 根据循环条件,重复性的执行某段代码
- 有
while
do-while
for
三种循环语句 - Jdk1.5 提供了
foreach
循环,方便的遍历集合。数组元素
if-else
结构
//第一种:
if(条件表达式){
执行表达式
}
//第二种:二选一
if(条件表达式){
执行表达式1
}else{
执行表达式2
}
//第三种:n选一
if(条件表达式){
执行表达式1
}else if(条件表达式){
执行表达式2
}else if(条件表达式){
执行表达式3
}……
else{
执行表达式n
}
使用Scanner
从键盘获取int
型数据
- 导包:
import java.util.Scanner
- Scanner 的实例化:
Scanner scan = new Scanner(System.in);
- 调用 Scanner 类的相关方法,来获取指定类型的变量
//1.导包
import java.until.Scanner;
class ScannerTest{
public static void(String[] args){
//2.Scanner的实例化
Scanner scan = new Scanner(System.in);
//3.调用Scanner类的相关方法
System.out.println("请输入你的姓名");
string name = scan.next();
System.out.println(age);
System.out.println("请输入你的年龄");
int age = scan.nextInt();
System.out.println(age);
}
}
公式:[a,b]: (int)(math.random() * (b - a + 1) + a)
switch-case
结构
switch(表达式){
case 常量1:
执行语句1;
break;
case 常量2:
执行语句2;
break;
...
default;
执行语句n;
// break;
}
- 根据
switch
表达式中的值一次匹配各个case
中的常量,一旦匹配成功,则进入相应case
结构中,调用其执行语句 -
break
可以使用在switch-case
结构中,表示一旦执行到此关键字,就跳除switch-case
结构 -
switch
结构中的表达式只能是如下 6 种类型之一:==byte
、short
、char
、int
、枚举类型(JDK5.0新增)、String
类型(JDK7.0新增)== -
case
之后只能声明常量,不能声明范围 -
break
关键字是可选的 -
default
相当于if-else
结构中的`else`` -
default
结构是可选的,位置是灵活的
class SwitchCaseTest{
public static void(main[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入2019年的月份:");
int month = scan.nextIn();
System.out.println("请输入2019年的日期:");
int day = scan.nextIn();
int sumDays = 0;
switch(month){
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sunDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5;
sumDays += 30;
case 4:
sumDays += 31;
case 3:
sumDays += 29;
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println("2019年"+ month + "月" + day + "日是第" + sumDays + "天");
}
}
循环结构
在某些条件满足的情况下,反复执行特定代码的功能,循环结构有4个要素:
- 初始化条件
- 循环条件(boolean类型)
- 循环体
- 迭代条件
for
循环的结构
for(初始化条件;循环条件(boolean型);循环体){
迭代条件
}
class ForTest{
public static void main(String[] args){
//输出100以内的偶数
for(int i = 1;i <=100;i++){
if( i % 2 == 0){
System.out.println(i);
}
}
//获取两个数的最大公约数
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个正整数");
int m = scan.nextIN();
System.out.println("请输入第二个正整数");
int n = scan.nextIN();
//获取两个数中的最大值
int min = (m <= n)? m : n;
//遍历
for(int i = min;i >= 1;i--){
if(m % 1 == 0 && n % i == 0){
System.out.println(i);
break;
}
}
//获取两个数中的最大公倍数
int max = (m >= n)? m : n;
for(int i =max; i <= m * n;i++){
if(i % m ==0 && i % n == 0){
System.out.println(i);
break;
}
}
}
}
while
循环结构
初始化条件
while(循环条件){
循环体;
迭代条件;
}
-
while
循环注意不要丢了循环条件,避免死循环 -
for
循环和while
循环可以相互转换,但初始化条件的作用范围不同
class WhileTest{
public void main(String[] args){
//遍历100以内所有偶数
int i = 1;
while(i <= 100){
if(i % 2== 0){
System.out.println(i);
}
i++;
}
}
}
do-while
循环结构
初始化条件
do{
循环体;
迭代条件;
}while(循环条件);
-
do-while
至少会执行一次循环体 - 开发中较少使用
class DoWhileTest{
public void main(String[] args){
//遍历100以内的偶数,并计算总和及其个数
int num = 1;
int sum = 0;
int count = 0;
do{
if(num % 2 == 0){
System.out.println(num);
sum += num;
count++;
}
num++;
}while(num <= 100);
System.out.println(sum);
System.out.println(count);
}
}
嵌套循环
- 将一个循环结构A声明在另一个循环结构B的循环体中
- 外层循环:循环结构B
- 内层循环:循环结构A
- 内层循环结构遍历一遍只相当于外层循环体执行了一次
- 外层循环控制行数,内层循环控制列数
/*
******
******
******
******
*/
class ForForTest{
public static void main(String[] args){
for(int j = 1;j<= 4;j++){
for(int i = 1;i <= 6;i++){
System.out.print('*');
}
System.out.println();
}
}
/*
九九乘法表
*/
class NineTNine{
public static void main(String[] args){
for(int i = 1;i <= 9;i++){
for(int j = 1;j<=i;j++){
System.out.print(i + "*" + j + "=" + (i * j) + "/t");
}
System.out.println();
}
}
}
特殊关键字的使用
关键字 | 适用范围 | 作用 |
---|---|---|
break |
switch-case 循环结构 |
结束当前循环 |
continue |
循环结构 | 结束当次循环 |
class BreakContinueTest{
public static void main(String[] args){
for(int i= 1;i<= 10;i++){
if(i % 4 == 0){
//break;//结束当前循环
continue;//结束当此循环
}
System.out.println(i);
}
}
}
==lable
标签==
class LableTest{
public static void main(String[] args){
lable:for(int i = 1;i <= 4;i++){
for(int j =1;j<= 10;j++){
if(j % 4 == 0){
continue label;
}
System.out.print(j);
}
}
}
}
衡量一个功能代码的优劣
- 正确性
- 可读性
- 健壮性
- 高效率与低存储:时间复杂度、空间复杂度