Java 学习笔记—Java基本语法(三)
- 程序流程控制
- 顺序结构
- 分支结构
- if...else
- switch...case
- 循环结构
- for
- while
- do-while
- while(true)
- 嵌套循环
- break 和continue关键字的使用
程序流程控制
顺序结构
没有判断和跳转
分支结构
if…else
三种结构
第一种:
if(条件表达式){
执行代码块
}
第二种:二选一
if(条件表达式){
执行代码块1;
}
else{
执行代码块2;
}
第三种:多选一
if(条件表达式1){
执行代码块1;
}
else if(条件表达式2){
执行代码块2;
}
.....
else{
执行代码块n;
}
补充:使用Scanner类来从键盘获取不同类型的变量
具体实现步骤:
1.导包:import java.util.Scanner
2.Scanner的实例化
3.调用Scanner类的相关方法(next()/nextXxx())来获取制定类型的变量
注意:
需要按照相应的方法,输入制定类型的值。如果输入的数据类型与要求的不匹配时,会报异常:InputMisMatchException,导致程序终止。
import java.util.Scanner;
class ScannerTest{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = scan.next();
System.out.println(name);
System.out.println("请输入你的年龄:");
int age = scan.nextInt();
System.out.println(age);
System.out.println("请输入你的体重:");
double weight = scan.nextDouble();
System.out.println(weight);
System.out.println("你是否单身?(true/false)");
boolean isone = scan.nextBoolean();
System.out.println(isone);
//对于char型的获取,Scanner没有提供相关的方法。只能获取一个字符串。
System.out.println("请输入你的性别(男/女)");
String gender = scan.next();//"男"
char genderChar = gender.charAt(0);//获取索引为0上的字符
System.out.println(genderChar);
}
}
说明:
1.else结构是可选的。
2. 针对于条件表达式:
1)如果多个条件表达式之间是"互斥"关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。
2)如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
3)如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行。
3. if-else 可以相互嵌套
4. 如果 if - else 结构中的执行语句只有一行时,对应的一对{}可以省略,但是不建议省略。
5. 如果没有{},else会进行就近匹配
补充:使用Math.random 获取随机数
公式:[a,b] : (int)(Math.random() * ( b - a + 1 ) + a)
double value = Math.random();//[0.0,1.0)
switch…case
1、格式
switch(表达式){
case 常量1:
执行语句1;
break;
case 常量2:
执行语句2;
break;
...
default:
执行语句n;
//break;
}
2、说明
1)根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,则进行入相应case结构中,调用其执行语句。当调用完执行语句后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或switch-case结构末尾位置结束。
2) break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构。
3)switch结构中的表达式,只能是如下的六种数据类型之一:byte、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
4)case之后只能声明常量,不能声明范围。
5)break关键字是可选的。
6)default:相当于 if-else的else。 default也是可选的,而且位置是灵活的。
7)如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。
case 常量1:
case 常量2:
执行语句a;
break;
case 常量3:
case 常量4:
执行语句b;
break;
...
default:
执行语句n;
//break;
}
例题:计算某月某天是某年的第几天
import java.util.Scanner;
class SwitchCase1{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scan.nextInt();
System.out.println("请输入月份:");
int month = scan.nextInt();
System.out.println("请输入是当月第几天:");
int day = scan.nextInt();
int sumDays = 0;
switch(month){
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9:
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
//判断year是否闰年
if((year%4 == 0 && year % 100 !=0)|| year%400 == 0){
sumDays += 29;
}
else{
sumDays += 28;
}
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println("是当年的"+sumDays+"天");
}
}
说明:
1、凡是可以使用switch-case结构的,都可以转换为if-else。反之,就不成立。
2、写分支结构时,发现既可以使用switch-case,(同时,switch中表达式不太多),又可以使用if-else时,我们优先使用switch-case。原因:switch-case 执行效率高。
循环结构
循环结构的4个要素:
1)初始化条件
2)循环条件
3)循环体
4)迭代条件
for
for(1;2;4){
3
}
执行过程:1->2->3->4->2->3->4
break的使用
例题:求两数之间最大公约数,最小公倍数
import java.util.Scanner;
class ForTest{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个正整数:");
int m = scan.nextInt();
System.out.println("请输入第二个正整数:");
int n = scan.nextInt();
//获取两数较小值
int min = (m < n)? m : n;
for(int i = min ; i >= 1;i--){
if(m % i == 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 循环的结构
1;
while(2){
3;
4;
}
执行过程:1->2->3->4->2->3->4
说明:
1)写while循环不要忘记加迭代条件。一旦丢了,可能导致死循环。
2)写程序要避免出现死循环。
3)for循环和while循环是可以相互转换的。
区别:for循环和while循环的初始化条件的作用域不一样。
do-while
1;
do{
3;
4;
}
while(2)
执行过程:1->3->4->2->3->4->2
说明:
1)do-while 循环至少会执行一次循环体
2)开发中,使用for,while多一些,较少使用do-while
while(true)
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。
import java.util.Scanner;
class ForWhileTest{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int positiveNumber = 0;
int negativeNumber = 0;
while(true){
int number = scan.nextInt();
if(number>0){
positiveNumber++;
}else if(number<0){
negativeNumber++;
}else{
//一旦执行break,跳出循环
break;
}
}
}
}
说明:
1)不在循环条件部分限制次数的结构:for( ; ; ) 或 while(true)
2)结束循环的几种方式:
方式一:在循环条件部分返回false
方式二:在循环体中,执行break
嵌套循环
使用:
1、嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环。
2、
外层循环:循环结构B
内层循环:循环结构A
3、说明
1)内层循环结构遍历一遍,只相当于外层循环执行了一次。
2)假设外层循环需执行m次,内层循环需执行n次。此时内层循环的循环体共执行了m*n次。
4、技巧
外层循环控制行数
内层循环控制列数
break 和continue关键字的使用
关键字 | 使用范围 | 循环中使用的作用(不同点) | 相同点 |
break | switch-case,循环结构中 | 结束当前循环 | 关键字后面不能声明执行语句 |
continue | 循环结构中 | 结束当次循环 | 关键字后面不能声明执行语句 |
结束制定标识的一层循环
label: for(int i = 1;i <= 4; i++){
for(int j = 1;j <= 10;j++){
if(j % 4 == 0){
break label;//结束制定标识的一层循环
continue label;//结束制定标识的一层循环结构当次循环
}
}
}