Java基础语法02——流程控制
Java基础语法02——流程控制
流程控制:顺序结构、分支结构(if-else、switch-case)、循环结构(for、while、do-while)
-
实现从键盘获取不同类型的变量——Scanner类
步骤:
-
导包:
import java.util.Scanner;
-
Scanner实例化:
Scanner scan = new Scanner(System.in);
-
调用Scanner的相关方法,来获取指定类型的变量:格式:
Scanner.方法
String类型——next()
int类型——nextInt()
double类型——nextDouble()
-
分支结构1——if-else结构
三种形式:
-
/* if(条件表达式){ 执行语句; } */
-
/* if(条件表达式){ 执行语句1; }else{ 执行语句2; } */
-
/* if(条件表达式1){ 执行语句1; }else if(条件表达式2){ 执行语句2; }else if (条件表达式3){ 执行语句3; } ```````` else{ 执行语句n; } */
if-else结构可以相互嵌套
【一旦满足,就会退出结构】
只有一个执行语句时,{}可以省略,但不建议省,容易出错
——>拓展:如何获取一个随机数?[a,b]
使用Math类下的random方法,产生的是double类型的数据,且范围为[0.0,1.0)
公式:int m = (int)Math.random()*(a-b+1)+a;
分支结构2——switch-case结构
switch-case结构格式:
/*
switch(表达式)//不是条件表达式
case 常量1:
执行语句1;
break;//非必须
case 常量2:
执行语句2;
break;//非必须
······
default:
执行语句;
*/
- 过程:将switch表达式的值与case常量的值匹配,匹配成功,执行相应case下的语句;执行后继续向下执行case其他执行语句,直至遇到break关键字或结构末尾结束。
- break关键字:可用在switch-case结构中,(可选的)遇到此关键字,跳出结构
- switch后表达式只能是如下六种类型:byte、short、int、char、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
- default:可选的,位置灵活的
循环结构1——for循环
-
循环结构的四个部分:初始部分、循环条件部分、循环体部分、迭代条件部分
-
for循环的结构:
/* for(初始;循环条件;迭代){ 循环体 } //()里每一部分可以有多条语句 //执行过程:初始——循环条件(结果为boolean类型)——(true)循环体——迭代——循环条件判断——循环体——迭代——······ */
//举例:输出5条HelloWorld语句 public class Demo{ public static void main(String[] args){ for(int i=1;i<=5;i++){ System.out.println("HelloWorld"); } } }
-
break关键字的使用:遇到break,循环结束;跳出循环结构
循环结构2——while循环
while循环的结构
/*
初始
while(循环条件){
循环体;
迭代条件;//小心不要忘记,否则容易死循环
}
//执行过程:初始——循环条件(结果为boolean类型)——(true)循环体——迭代——循环条件判断——循环体——迭代——······
*/
循环结构3——do-while循环
do-while循环结构:
/*
初始
do{
循环体;
迭代条件;
}while(循环条件)
//执行过程略有不同:初始——循环体——迭代——循环条件——循环体——迭代——循环条件——······
//注意:do-while循环的循环体至少执行一次
*/
开发中使用前两种循环的情况比较多
——>拓展:最简单“无限循环格式”:while(true)
或for(;;)
——不知道循环次数是多少——可以通过break结束循环。
例题:从键盘输入多个不确定的整数,并输出正数和负数的个数,输入0时结束循环##
import java.util.Scanner;
public class Test1{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int postivenumber = 0;
int negtivenumber = 0;
while(true){
int num = scan.nextInt();
if(num>0){
postivenumber++;
}else if(num<0){
negtivenumber++;
}else{
break;
}
}
System.out.println(postivenumber);
System.out.println(negtivenumber);
}
}
嵌套循环
-
层数不会太多,一般不会超过三层
-
将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
-
外层循环:B;内层循环:A
-
说明:
- 内层循环执行一遍,相当于外层循环执行一次
- 假设外层循环需要执行m次,内层循环需要执行n次。此时,内层循环的循环体一共执行了m*n次
- 技巧:外层循环控制行数,内层控制列数
//应用1:九九乘法表
public class Test1{
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+" ");
}
System.out.println();
}
}
}
/*应用2:输出100以内的质数(常见笔试题)
质数:(素数)只能被1和它本身整除的自然数【最小的质数2】
——2~这个数-1 都不能被这个数整除
*/
public class Test2{
public static void main(String[] args){
boolean b = true;//标识i是否被j除尽,一旦除尽,立刻更改其值
for(int i=2;i<=100;i++){
for(int j=2;j<=Math.sqrt(i);j++){//优化二:将j<i-1改成小于根号i
if(i%j==0){
b=false;
break;//优化一:对本身是非质数的自然数的处理,只要有除尽的 就不是质数了
}
}
if(b==true){
System.out.println(i);
}
b=true;//重置b变量
}
}
}
break、continue关键字的使用
使用范围 | 循环中使用的作用 | 相同点 | |
---|---|---|---|
break | 循环结构 | 结束当前循环 | 关键字后面不能声明执行语句 |
continue | 循环结构 | 结束当次循环 | 关键字后面不能声明执行语句 |
//说明1
public class Test3{
public static void main(String[] args){
for(int i=1;i<=10;i++){
if(i%4==0){
//break;//输出:1 2 3
continue;//输出:1 2 3 5 6 7 9 10
}
System.out.print(i+" ");
}
}
}
//说明2:在嵌套循环中,break(continue)作用于离关键字最近的一层循环;
//如果想要指定对某一层循环起作用,可以使用标签,例子如下:
public class Test1{
public static void main(String[] args){
label:for(int i=1;i<=4;i++){
for(int j=1;j<=10;j++){
if(j%4==0){
break label;
//continue;
}
System.out.print(j+" ");
}
System.out.println();
}
}
}//输出结果:1 2 3