目录
1.4.循环控制--break关键字--continue关键字
1.4.1break:它能终端当前的循环,不管后面有什么代码;
1.4.2.continue关键字:它能跳过后面的代码,直接执行下一次的循环
前言:
做任何事情都要遵循一定的原则。例如,到图书馆去借书,就必须要有借书证,并且借书证不能过期,这两个条件缺一不可。程序设计也是如此,需要有流程控制语句实现与用户的交流,并根据用户的输入决定程序要“做什么”“怎么做”等。
流程控制对任何一门编程语言来说都是至关重要的,它提供了控制程序步骤的基本手段。如果没有流程控制语句,整个程序将按照线性的顺序来执行,不能根据用户的输入决定执行的序列。
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组 合成能完成一定功能的小逻辑模块
其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
-
顺序结构 :程序从上到下逐行地执行,中间没有任何判断和跳转
1.1复合语句
在定义一个类或者方法时,类体就是以“{”与“}”作为开始与结束的标记,方法体也是以“{”与“}”作为标记。复合语句中的每个语句都是从上到下被执行。复合语句以整个块为单位,能够用在任何一个单独语句可以使用的地方,并且在复合语句中还可以嵌套复合语句。
例如:下面这段代码,在主方法中定义了复合语句块,复合语句块中还可以包含另一复合语句块
public class Compound{
public static void main(String[] args);
int x = 20;
{
int y = 40;
System.out.println(y);
int z = 245;
boolean b;
{
b = y > z;
System.out.println(b);
}
}
String word = "hello java";
System.out.println(word);
}
}
在使用复合语句时要注意,复合语句为局部变量创建了一个作用域,该作用域为程序的一部分,在该作用域中某个变量被创建并能够被使用。如果在某个变量的作用域外使用该变量,则会发生错误。例如,在上述代码中,如果在复合语句外使用变量y、z、b将会出现错误,而变量x可在整个方法体中使用。
1.2 条件语句
1.2.1 if条件语句
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“不二表达式”。如果该表达式返回的结果为true,则执行其后的语句;如果为false,则不执行if条件之后的语句。if条件语句可分为简单的if条件语句、if...else语句和if...else if多分支语句。
1.简单的if条件语句
语法如下:
if(布尔表达式){
语句序列
}
- 布尔表达式:必要参数,表示最后返回的结果必须是一个布尔值。它可以是一个单纯的布尔变量或常量,也可以是使用关系或布尔运算符的表达式。
- 语句序列:可选参数。可以是一条或多条语句,当表达式的值为true时执行这些语句。若语句序列中仅有一条语句,则可以省略条件语句中的“{}”。
如果语句序列中只有一条语句,则可以采用以下写法:
int a = 100;
if(a == 100)
System.out.print("a的值是100");
误区警示:
- 虽然if条件语句中的语句序列只有一条语句时,省略“{ }”并无语法错误,但为了增强程序的可读性,最好不要省略。
- 条件语句最后的语句序列省略时,可以保留外面的大括号。也可以省略大括号,然后再末尾添加“;”。如下所示两种情况都是正确的:
boolean b = false;
if(b);
boolean b = false;
if(b){}
//if实例:判断手机号码是否存在
public class TakePhone{
public static void main(String[] args) {
int phoneNumber = 123456789; //创建变量,保存电话号码
if(phoneNumber != 84973366){ //如果此电话号码不是84973366
System.out.println("对不起,您拨打的号码不存在!"); //提示号码不存在
}
}
}
//编译结果
对不起,您拨打的号码不存在!
1.2.2. if...else语句
分支结构:根据条件,选择性地执行某段代码。有if…else和switch-case两种分支语句。
分支结构:if-else使用说明
-
条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
-
语句块只有一条执行语句时,一对0可以省略,但建议保留
-
if-else语句结构,根据需要可以嵌套使用
-
当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
-
当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓,当多个条件是“包含”关系时,“小上大下/子上父下”
//实例
package com.wkcto;
public class AgeTest {
public static void main(String[] args) {
System.out.println("-----------if-else语句应用举例--------------");
int age = 75;
if(age>0){
System.out.println("不可能!");
}else if(age>250){
System.out.println("是个妖怪!");
}else{
System.out.println("人家芳龄: " + age + ",马马虎虎啦!");
}
}
}
//编译结果
-----------if-else语句应用举例--------------
不可能!
Process finished with exit code 0
//if else基本语法
/*
第一种:
if(条件表达式){
执行表达式
}
第二种:二选一
if(条件表达式){
执行表达式1
}else{
执行表达式2
}
第三种:多选一
if(条件表达式){
执行表达式1
}else if(条件表达式){
执行表达式2
}else if(条件表达式){
执行表达式3
}
...
else
*/
package com.wkcto;
import java.sql.SQLOutput;
public class IfTest {
public static void main(String[] ages){
System.out.println("--------实例1-------");
int heartBeats = 179;
if(heartBeats < 60 || heartBeats > 100){
System.out.println("需要做进一步检查");
}
System.out.println("检查结束");
System.out.println("--------实例2-------");
int age = 23;
if(age <18){
System.out.println("可看动画片");
}else{
System.out.println("可看成人电影");
}
System.out.println("--------实例3-------");
if(age < 0 ){
System.out.println("您输入的数据非法");
}else if(age < 18){
System.out.println("青少年时期");
}else if(age < 35){
System.out.println("青壮年时期");
}else if(age < 60 ){
System.out.println("中年时期");
}else if(age < 120){
System.out.println("老年时期");
}else{
System.out.println("成仙~");
}
}
}
//编译结果
--------实例1-------
需要做进一步检查
检查结束
--------实例2-------
可看成人电影
--------实例3-------
青壮年时期
Process finished with exit code 0
循环语句就是在满足一定条件的情况下反复执行某一个操作的语句。java中提供了3种常用的循环语句,分别 while循环语句、do...while循环语句和for循环语句。
java.util.Scanner包
基本知识:
util,utiliy的缩写,意即,工具性的包。主要包含集合类(如ArrayList,HashMap等),随机数产生类,属性文件读取类,定时器类等类。
Scanner,扫描仪,使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。
java.util.Scanner,Java5的新特性,可以简化文本扫描,主要用于控制台输入,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析。
* new Scanner的时候,控制台就会一直等待输入,
* 使用回车键后,输入的内容将传送给Scanner
* 如果要获取输入的内容,就调用Scanner的nextLine()方法
* Scanner:用于获取键盘录入的数据。(基本数据类型,字符串数据)
* public String nextLine():获取键盘录入的字符串数据
/*
如何键盘获取不同类型的变量:需要使用Scanner类
具体实现步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化
3.调用Scanner类的相关方法,来获取指定类型的变量
注意:需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException,导致程序终止。
*/
//实例测试
import java.util.Scanner; //导入包
public class ScannerTest {
public static void main(String[] args){
Scanner scan = new Scanner(System.in); //创建扫描器,接收控制台输入内容
// int num = scan.nextInt(); //获取控制台输入数字
// System.out.println(num); //输出字符串
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 isLove = scan.nextBoolean();
System.out.println(isLove);
//对于char型的获取,scanner没有提供相关的方法。只能获取一个字符串
System.out.println("请输入你的性别:(男/女)");
String gender = scan.next(); //"男"
char genderChar = gender.charAt(0); //获取索引为0位置上的字符
System.out.println(genderChar);
}
}
//编译结果
请输入你的姓名:
某酷菌
某酷菌
请输入你的年龄:
24
24
请输入你的体重:
117
117.0
你是否喜欢我?(true/false)
true
true
请输入你的性别:(男/女)
男
男
Process finished with exit code 0
//if...else if 和util.Scanner包结合使用实例测试
/*
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断
说明:
1.else结构结构是可选的。
2.针对于条件表达式:
>如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句生命在上面还是下面,无所谓;
>如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面;
>如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的则没机会执行。
例如:
if(score == 100){
System.out.println("奖励一辆BMW");
}else if(score >= 60 ){ //范围大的写上面,包含了80;下面80的语句则无意义,所以在写语句时要思考好到底要怎么设计;
System.out.println("奖励一个 iPad");
}else if(score > 80 ){
System.out.println("奖励一台iphone xs max");
}else{
System.out.println("什么奖励也没有");
*/
import java.util.Scanner;
public class ScannerTest1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //实例化,创建扫描器,接收控制台输入内容
System.out.println("请输入某酷菌期末成绩:(0-100)");
int score = scan.nextInt(); //获取控制台输入数字为int型
if(score == 100){
System.out.println("奖励一辆BMW");
}else if(score > 80 && score <= 99){
System.out.println("奖励一台iphone xs max");
}else if(score >= 60 && score <= 80){
System.out.println("奖励一个 iPad");
}else{
System.out.println("什么奖励也没有");
}
}
}
//编译结果
请输入某酷菌期末成绩:(0-100)
100
奖励一辆BMW
Process finished with exit code 0
1.2.3.do...while语句
//while循环,先判断后执行语句
public class DoWhile {
public static void main(String[] args) {
int i = 0, j = 0;
/System.out.println("befor while j = " + j);
while(i > 1){
j++;
}
System.out.println("after while j = " + j);
}
}
//do...while循环,先执行语句后判断
public class DoWhile {
public static void main(String[] args) {
int i = 0, j = 0;
System.out.println("befor while j = " + j);
do {
j++;
}while(i > 1);
System.out.println("after while j = " + j);
}
}
//do...while循环,先执行语句后判断
public class DoWhile {
public static void main(String[] args) {
int i = 0, j = 0;
System.out.println("befor while j = " + j);
do {
j++;
}while(i > 1);
System.out.println("after while j = " + j);
}
}
//do...while循环,先执行语句后判断
public class DoWhile {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in); //创建扫描器,接收控制台输入信息
String pwd1 = "0"; //保存密码的变量
String pwd2 = "-1";
do{
System.out.println("请输入密码:");
pwd1 = sc.nextLine(); //输入密码时,从控制台获取信息
System.out.println("请再次输入密码:");
pwd2 = sc.nextLine(); //输入密码时,从控制台获取信息
if(!pwd1.equals(pwd2)){ //取非,如果不相等则...
System.out.println("您输入的密码不一致,请重新输入!");
}
}while(!pwd1.equals(pwd2));
System.out.println("设置密码成功!");
}
}
//运行结果
请输入密码:
123
请再次输入密码:
321
您输入的密码不一致,请重新输入!
请输入密码:
123
请再次输入密码:
123
设置密码成功!
Process finished with exit code 0
- 表达式不允许为空;
- 表达式不应该是常数;
- 循环体中要有条件表达式值的语句,否则将成改变为死循环;
- 不要少写分号。
1.2.4.循环语句
初始表达式1:最常用的是给循环变量赋值;
//实例--使用for循环,计算从1加到100的和。
public class for1 {
public static void main(String[] args){
int sum = 0;
for(int i = 1; i <=100; i++){
sum = sum + i;
}
System.out.println("sum= " +sum);
}
}
//运行结果
sum= 5050
Process finished with exit code 0
//结论:用for循环比while循环代码会更简洁
//实例
import java.util.Scanner;
public class foreach {
public static void main(String[] args){
int arr[]={7,10,11,56,99};
for(int x:arr){ //创建一个数字数据类型一样的循环变量int x
System.out.println(x);
}
}
}
//运行结果
7
10
11
56
99
Process finished with exit code 0
//for循环实例
/*题干: 中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”:
鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几只?
*/
public class foreach {
public static void main(String[] args){
int cock,hen,chick; //创建三个变量,分别存储三只鸡
for(cock=1;cock<=20;cock++){
for(hen=1;hen<=33;hen++){
for(chick=3;chick<=99;chick+=3){
if(cock*5+hen*3+chick/3==100){ //百钱
if(cock+hen+chick==100){ //百鸡
System.out.println("公鸡:"+cock+"母鸡:"+hen+"小鸡"+chick);
}
}
}
}
}
}
}
//结论:这种循环取数进行判断的方法可以叫做"穷举法";
//运行结果
公鸡:4母鸡:18小鸡78
公鸡:8母鸡:11小鸡81
公鸡:12母鸡:4小鸡84
Process finished with exit code 0
1.3.1.switch语句
//switch实例
/*
题干: 10-9分为优,8分为良,7-6为中,6分以下为差。
*/
import java.util.Scanner;
public class switch1 {
public static void main(String[] args){
System.out.println("请输入成绩,数字范围10以内!");
Scanner sc =new Scanner(System.in);
int grade= 0 ;
grade = sc.nextInt();
switch(grade){
case 10:System.out.println("成绩为优");break; //如果成绩为10,则成绩为优,否则跳出该语句
case 9:System.out.println("成绩为优");break;
case 8:System.out.println("成绩为良");break;
case 7:System.out.println("成绩为中");break;
case 6:System.out.println("成绩为差");break;
case 5:System.out.println("成绩为差");break;
case 4:System.out.println("成绩为差");break;
case 3:System.out.println("成绩为差");break;
case 2:System.out.println("成绩为差");break;
case 1:System.out.println("成绩为差");break;
case 0:System.out.println("成绩为差");break;
default:System.out.println("成绩无效");break;
}
}
}
//运行结果
请输入成绩,数字范围10以内!
6
成绩为差
Process finished with exit code 0
1.4.循环控制--break关键字--continue关键字
1.4.1break:它能终端当前的循环,不管后面有什么代码;
//实例--控制内层循环和外层循环
public class demo2 {
public static void main(String[] args){
for(int i=0; i<3; i++){ //循环变量i,循环3次
System.out.println("i="+ i);
for(int j=0; j<6; j++){
System.out.println("j="+ j);
if (j==4){
break; //跳出内层循环
}
}
}
}
}
//运行结果
i=0
j=0
j=1
j=2
j=3
j=4
i=1
j=0
j=1
j=2
j=3
j=4
i=2
j=0
j=1
j=2
j=3
j=4
Process finished with exit code 0
//实例--利用“标签”功能同时控制内层循环与外层循环
public class demo2 {
public static void main(String[] args){
loop:for(int i=0; i<3; i++){ //定义标签(标签名可写成任意名)
System.out.println("i="+ i);
for(int j=0; j<6; j++){
System.out.println("j="+ j);
if (j==4){
break loop; //使得break有了指向性,它将跳出被loop标记的循环(标签的功能极大地提高了break的灵活性)
}
}
}
}
}
//运行结果
i=0
j=0
j=1
j=2
j=3
j=4
Process finished with exit code 0