Java的控制结构
控制台的输出与输入
控制台输出
System.out.println(内容);
控制台输入
//1、导入输入工具
import java.util.Scanner;
//2、创建工具对象
Scanner input = new Scanner(System.in);
//3、控制台获取指定类型的变量值
int age = input.nextInt();
//4、在控制台输出输入数据
System.out.println(age);
//5、释放资源
input.close();
特殊:输入一个char类型字符
char gender;
Scanner input = new Scanner(System.in);
gender=input.next().charAt(0);
块作用域
- 块,是指由若干条Java语句组成的语句,并用一对大括号括起来。块决定了变量的作用域。一块块可以嵌套在另一个块中。
public static void main(String[] args){
int n;
...
{
int k;
...
}//k is only defined up to here
}
注意:不能在嵌套的两个块中声明相同的变量
//例如:
public static void main(String[] args){
int n;
...
{
int k;
int n;//Error:Variable 'n' is already defined in the scope
...
}
}
分支结构分类
if
单分支
- 条件:关系表达式,由逻辑运算符连接的多个关系表达式,其最终结果必须是一个明确的布尔值
格式:
//语句只有一条
if(条件) 语句;
//多条语句
if(条件){
语句块;//两行以上 >=2行
}
双分支
//双分支
if(条件){
//代码块1
}else{
//代码块2
}
多分支
- 用于一段连续的数据区间。
if(条件){
//代码块1
}else if(条件){
//代码块2
}else if(条件){
//代码块3
}
...
else{
//代码块n
}
分支的嵌套
- 在分支中还有分支叫作分支的嵌套
if(条件){
if(条件){
//代码块1
}else{
//代码块2
}
}else if(条件){
if(条件){
//代码块3
}else if{
//代码块4
}else{
//代码块5
}
}else if(条件){
//代码块6
}
//...
else{
//代码块n
}
例题:
public class MonthDay {
public static void main(String[] args) {
//根据年和月判定,该年该月有多少天。
//大月 31天:1,3,5,7 8,10,12
//小月 30天:4,6 9,11
//二月 平年28天,闰年29天
//闰年规则:能被4整除但不能被100整除,或者能被400整除
int year = 2000,mouth = 7,days = 0;
//2月
if(mouth==2){
if(year%4==0 && year%100!=0 || year%400==0){
days = 29;
}else {
days = 28;
}
}else if(mouth<8){//<8奇数月为大月,偶数为小月
if(mouth%2==0){
days = 30;
}else {
days = 31;
}
}else{//>=8,奇数为小月,偶数为大月
if(mouth%2==0){
days = 31;
}else {
days = 30;
}
}
System.out.println(year+"年,"+mouth+"月有"+days+"天");
}
}
switch…case
格式:
switch(WHAT?)
- String (jdk>=1.8)
- 数值
2.1、char
2.2、非long整数
2.3、枚举
/*
以算术表达式的结果值,从上到下,依次和常量n做等值比较。
常量值不能重复
算术表达式 == 常量
*/
/*
break功能:结束分支
如果break缺失会导致贯穿现象
贯穿:从第一个匹配项开始执行,直到第一个break才结束。
合理的运用贯穿现象可以高效的解决特定的问题
*/
/*
整个switch(){}中只存在一个作用域,不可以存在同名变量
*/
switch(算术表达式){
case 常量1: //算术表达式 == 常量1
//代码块
break; //结束switch...case结构
case 常量2: //算术表达式 == 常量2
//代码块
break;
case 常量3:
//代码块
break;
default:
//代码块
break;
}
例题:
与上题相同,用switch编写并运用贯穿和三元运算符
public static void main(String[] args){
//输入年月,计算该月天数,使用switch...case,并利用贯穿
int year = 2000,month = 4,days = 31;
switch(month){
case 4:case 6: case 9: case 11://贯穿
days = 30;
break;
case 2:
days = year%4==0 && year%100!=0 || year%400==0 ? 29 : 28;//三元运算
break;
default:
System.out.println("请输入正确月份!");
break;
}
System.out.println(year+"年"+month+"月有:"+days+"天");
}
循环
概念
-
什么是循环?
定义:重复性的操作
注意:不是必须完全一样,但必须符合特定的规律 -
循环四要素:
1、条件(循环控制)变量的声明和【初始化】
2、循环条件的构建
3、循环体(在循环内部的语句块)
4、条件变量的变化 -
循环流程结构
循环类别
while循环
- 特点:先判断后执行。
格式:
//条件(循环控制)变量的声明和【初始化】
while(条件){
//循环体
//条件变量的渐变
}
用while循环计算1+2+3+……+99+100的值
public static void main(String[] args){
int sum = 0,num = 1;
while(num<=100){
sum += num;
num++;
}
System.out.println(sum);
}
do…while循环
- 特点:先执行后判断。
格式:
do{
//循环体
}while(条件);
用do…while循环计算1+2+3+……+99+100的值
public static void main(String[] args){
int sum = 0,num = 1;
do{
sum += num;
num++;
}while(num<=100);
System.out.println(sum);
}
for循环
- 特点:先判断后执行。
格式:
for(声明初始化;条件;变化){
//循环体
}
用for循环计算1+2+3+……+99+100的值
public static void main(String[] args){
int sum = 0;
for(int num=1;num<=100;num++){
sum += num;
}
System.out.println(sum);
}
循环嵌套
在循环内部还有循环叫作循环的嵌套。
for(变量1; 判断条件1; 变化控制1){
语句块1
for(变量2; 判断条件2; 变化控制2){
语句块2
}
while(条件){
//循环体
//条件变量的渐变
}
do{
//循环体
}while(条件);
语句块3
}
- 二重循环结构:
计算 1!+2!+3!+……+99!+100! 的和
public static void mian(String[] args){
int sum = 0,k;
//外层循环控制100个数
for(int i=1;i<100;i++){
//阶乘为从1开始乘到自身。用k变量来计算乘积,每一个数都要从1开始乘。
k = 1;
//内部循环控制(1-i)个数
for(int j=1;j<=i;j++){
k *= j;
}
//累加
sum += k;
}
System.out.println("sum:"+sum);
}
循环跳转语句
//【循环跳转语句】
break;//直接终止循环,在循环内部且在break后的语句都不做了
continue;//结束本次循环,在continue后的语句都不做了直接进入下一次循环
-
break流程
-
continue流程