1.流程控制语句
- 顺序结构:从上到下 从左至右
- 选择结构:根据条件的选择,控制一些代码执行
- 循环结构:重复执行一些代码
1.1if语句
1.1.1单选择|单分支
满足条件要求,就执行一些代码,不满足不执行
if (条件表达式) {
语句体;
}
当语句体只有一句时,{}可以省略。
1.1.2双选择|双分支
if (条件表达式) {
语句体1;
}else {
语句体2;
}
1.1.3多选择|多分支
if (条件表达式1) {
语句体1;
}else if (条件表达式2) {
语句体2;
}…else{
语句体n;
}
import java.util.Random;//导入Random类
public class IfDemo {//IfDemo类的开始
public static void main(String[] args) {//主方法开始
Random ran = new Random();//新建一个Random类对象
int a = ran.nextInt(131-50+1)+50;//在[50,131]区间随机取一个整数
int b = ran.nextInt(131-50+1)+50;//在[50,131]区间随机取一个整数
int c = ran.nextInt(131-50+1)+50;//在[50,131]区间随机取一个整数
System.out.println(a + "\n" + b + "\n" + c);//输出三个随机整数
/*
通过If多分枝结构判断三个数大小,并判断奇偶
*/
if(a>b && a>c){//条件判断
System.out.println("最大值是:" + a);
if (a%2 == 0){
System.out.println("a是偶数");
}else{
System.out.println("a是奇数");
}
}else if(a>b && a<c){
System.out.println("最大值是:" + c);
if (c%2 == 0){
System.out.println("c是偶数");
}else{
System.out.println("c是奇数");
}
}else{
System.out.println("最大值是:" + b);
if (b%2 == 0){
System.out.println("b是偶数");
}else{
System.out.println("b是奇数");
}
}
}
}
1.2switch语句
switch (表达式) {
case 值1:
语句体1;
case 值2:
语句体2;
.
default:
语句体n;
break;
}
/*
根据月份,输出对应的季节
3~5 春天
6~8 夏天
9~11 秋天
12~2 冬天
*/
import java.util.Scanner;
public class Swi2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num= sc.nextInt();
switch(num){
case 12:
case 1:
case 2:
System.out.println("冬天");//当不存在break时,会发生穿透,即从满足条件的case语句开始执行,下面的case不判断直接执行语句体,知道遇到break才会停止。
break;
case 3:
case 4:
case 5:
System.out.println("春天");
break;
case 6:
case 7:
case 8:
System.out.println("夏天");
break;
case 9:
case 10:
case 11:
System.out.println("秋天");
default:
System.out.println("请输入正确月份");
}
}
}
1.3循环结构
- for 循环
- while循环
- do…while循环
1.3.1for 循环
当明确循环次数时首先选择使用for循环语句。
for循环语句格式:
for(条件初始化;条件判断;条件变化){
重复执行的循环体语句;
}
执行流程:
1.条件初始化;
2.条件判断,满足条件,执行循环体语句,不满足条件直接结束循环;
3.条件变化;
重复执行2,3步骤。
注意: for循环的条件i是属于当前这个循环的,可以在循环的(),{}中使用循环体中语句只有一句,前后的{}可以省略。
/*
for (条件初始化;条件判断;条件变化){
重复执行的语句体;
}
*/
public class ForDemo {
public static void main(String[] args){
int sum = 0;
for(int i = 1;i <= 10;i++){
sum +=i;
System.out.println("aaa+" + i);
}
//System.out.println(i);i未被定义,for循环中的i只属于循环体
System.out.println("一共有" + sum + "个aaa");
}
}
1.3.2while 循环
当不明确循环次数,但是是否结束循环根据一个条件决定。
while循环格式:
条件初始化;
while(条件判断){
循环体语句;
条件变化;
}
注意: 在while循环中条件初始化不属于当前 while循环,注意变量作用域的问题,for循环的条件i属于当前循环,循环体语句只有一句,前后的{}可以省略。
/*
* While循环练习
*/
public class WhilePrac {
public static void main(String[] args) {
//求1-100的和,求1-100的偶数和,求1-100的奇数和
int i = 1;
int sum= 0;
while (i <= 100){//条件判断
sum += i;//重复执行的语句体
i++;//条件变化
}
System.out.println(sum);
1.3.3do…while
使用do…while循环时,先执行在判断,且无论是都满足条件判断,都至少会执行一次。
do…while循环格式:
do{
循环体;
}while(条件判断);
当{}中的语句只有一句,前后的{}可以省略。
public class DoWhileDemo04{
public static void main(String[] args){
//1.打印1~100之间的整数
int i = 1;
/*
while(i<=100){
System.out.println(i);
i++;
}
*/
do{
System.out.println(i);
i++;
}while(i<=100);
//变量i的作用域是当前main方法,不属于do..while循环
System.out.println("不满足条件的i="+i); //101
/*
while(false){
System.out.println("不满足while循环");
}
*/
do
System.out.println("不满足while循环");
while(false);
}
}
1.4break、continue、return
break:
作用 : 结束 终止
应用场景: switch 循环
continue:
作用 : 结束本次循环,直接进入到下一次循环
应用场景 : 循环中使用
return:
作用 : 结束本次循环,直接进入到下一次循环
应用场景 : 循环中使用
1.5带标签的break和continue
当存在循环嵌套的时候,我们在内层循环中使用break与continue,执行内存还是外层???
默认针对离break与continue关键字最近的内层循环
如果想要实现结束,调出针对的多层循环嵌套中的某一层,需要使用带标签的break或continue
带标签的break与continue:
1)需要某一层循环开始的位置设置标签 ->标签名:
2)在使用break或者continue,执行针对跳出|结束哪一个标签代表的循环–>break 标签名; | continue 标签名;
public class Demo09{
public static void main(String[] args){
//为外层循环添加标签
one:for(int i=1;i<=5;i++){
//内层循环添加标签
two:for(int j=100;j<=110;j++){
System.out.print(i+"--->"+j+" ");
if(j==105){
//带有标签的break
break one;
}
}
System.out.println();
}
}
}
1.6不可达语句
在一定条件下,某些语句是永远也执行不到的:
- return后的语句
- while(false)中的代码
- 死循环后的代码
for(;😉{}
while(true){}
- break与continue后面的代码
2.方法
方法是解决事情的办法,在java中代表功能,实现功能的代码段,也可以简化代码。需要注意的是:方法不能嵌套,且方法不调用不执行。
2.1有返回值类型:
//修饰符代表访问权限 返回值类型是方法执行完毕之后是否需要返回一个结果 方法名表示方法的名字,调用方法的时候需要根据方法名 (参数列表)可以定义参数,可以没有参数 return在一个有返回值类型的方法中,return关键字必须存在
修饰符 返回值类型 方法名(参数列表){
实现功能的代码段;
return返回值;
}
有返回值类型的方法调用:
-
输出调用
-
赋值调用
-
直接调用
public class MethodDemo03 { public static void main(String[] args) { //输出调用 1)执行方法中的代码 2)打印返回值 System.out.println(getPi());; //赋值调用 double d = getPi(); System.out.println(d);; System.out.println(getSum(3,5));; } //功能:定义一个功能: 返回pi的值 //返回值:需要 double //参数: 不需要 //方法名: getPi() public static double getPi(){ System.out.println("返回pi的值"); return 3.1415926; } }
2.2没有返回值类型
修饰符 void 方法名(参数列表){
实现功能的代码段;
}
public class MethodPrac {
public static void main(String[] args) {
print(20);//普通调用 方法名 (实参)
}
//print方法是打印m行乘法表
public static void print(int m) {
for(int i=1;i<=m;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"X"+i+"="+j*i+"\t");
if (i==j){
System.out.println();
}
}
}
}
}
无返回值类型的方法调用: 方法名 (实参);
2.3方法的兼容类型问题
方法兼容类型问题也称为类型转换问题:
1.参数类型
形参的类型>=实参的类型
2.返回值类型
接收返回值的变量的类型>=方法的返回值类型>=return后面数据的类型
注意:
以后的功能代码都定义在某个方法中,封装方法。
public class MethodDemo12{
public static void main(String[] args){
long b = 1;
test((int)b);
int b2 = test(1);
System.out.println(test2());
}
public static int test(int i){
return 'a'; //char可以转换成为int类型
}
public static char test2(){
return 97; //char类型的表现形式之一: 可以使用0~65535之间的整数来表示一个字符
}
}