流程控制

30-流程控制的理解

什么是流程控制。现在我们写的代码如果没有if语句,代码都是从上往下执行,就是一条线执行。有了流程控制我们可以让代码根据不同的条件执行不同代码,甚至根据条件重复执行某一些代码,或者根据一个值进入不同的代码里面执行(后面说的开关语句)。


31-复合语句-代码块

复合语句也叫代码块,使用 {} 括起来。和方法体的 {}、类体的 {} 一样。复合语句以整个块为单位,复合语句可以嵌套。在复合语句中定义的变量出了这个复合语句外面就没法访问了。

代码块中变量的有效范围

public static void main(String[] args) {
	{
		int a = 0;
		{
			int b = 1;
		}
		//int c = b; //这个时候访问b是出错的 因为b是在代码块里面 出了这个代码块就没法访问
	}
}Code language: JavaScript (javascript)
public static void main(String[] args) {
	{
		int father = 1;
		{
			int a = 1;
		}
		{
			//int b = a; //a是在上面的代码块定义的 所以作用范围只是在上面的代码块 当前代码块就没法访问了
		}
		if (true) {
			int a = 1; //同级别的块里面 是可以定义同名变量的
			int d = father;
		}
	}
}Code language: JavaScript (javascript)

32-if条件语句

if条件语句可以根据某个条件去执行不同的代码。if后面的括号里面的结果如果是true则执行。

简单的if语句

if(布尔表达式) {
	执行语句(可以为空也可以多条)
}

布尔表达式是必须的参数,它是一个布尔值。语句这里可以没有。

if的使用

public static void main(String[] args) {
	if (true || false && 1 > 2 || IsRain()) {
		System.out.println("判断是对的 欢迎大家访问FoxDevelop.com网校");
	}
}

public static boolean IsRain() {
	return false;
}Code language: JavaScript (javascript)

如果语句只有一条的时候可以不用 {},但个人建议还是使用 {} 好。如果一条语句都没有,甚至可以缩写为 if(true);,后面的分号不能省。

public static void main(String[] args) {
	if (true || false && 1 > 2 || IsRain()) {
		System.out.println("判断是对的 欢迎大家访问FoxDevelop.com网校");
	}
	System.out.println("www.FoxDevelop.com"); //这条语句不属于if语句块里面
}Code language: JavaScript (javascript)

练一练

比较两个int变量,判断哪个比哪个大,使用if语句不用else语句,这个时候需要两条if语句。

public static void main(String[] args) {
	int a = 1;
	int b = 2;
	if (a > b) {
		System.out.println("a大于b");
	}
	if (b > a) {
		System.out.println("b大于a");
	}
}Code language: JavaScript (javascript)

if-else语句

if-else就是如果/否则的意思。如果if后面的表达式是true则执行if后面的代码块,否则就执行else后面的代码块。同样如果只有一条语句可以省略大括号。

练一练

使用if-else完成上面的题目。

if-else if 多分支语句

在else的时候再进行判断。比如根据学生成绩输出级别:90分以上优秀,80分以上90以下良好,60到79及格,60以下不及格。

public static void main(String[] args) {
	int point = 99;
	if (point >= 90) {
		System.out.println("优秀");
	} else if (point >= 80) {
		System.out.println("良好");
	} else if (point >= 60) {
		System.out.println("及格");
	} else {
		System.out.println("不及格");
	}
}Code language: JavaScript (javascript)
public static void main(String[] args) {
	int a = 1;
	int b = 1;
	if (a > b) {
		System.out.println("a大于b");
	} else if (a < b) {
		System.out.println("b大于a");
	} else {
		System.out.println("b等于a");
	}
}Code language: JavaScript (javascript)

练习一下

根据当前的时间进行问好(早上好、下午好、晚上好)。Java中获取当前小时数:

public static void main(String[] args) {
	Date date = new Date();
	int h = date.getHours();
	System.out.println(h);
	if (h < 6 && h > 18) {
		System.out.println("晚上好");
	} else if (h < 12) {
		System.out.println("早上好");
	} else {
		System.out.println("下午好");
	}
}Code language: JavaScript (javascript)

33-switch多分支语句

根据不同的月份输出对应的汉字几月份,比如当前月是4就输出”四月份”。如果没有switch用if实现,有了switch可以这样实现。

switch语句后面的括号的表达式的值必须是整数型或者字符型(char其实也是整数型)。switch语句根据后面的表达式的值去匹配case的值,一旦匹配后就开始执行case后面的若干语句,直到遇到第一个break为止,就算这个break在另外一个case里面也是。同一个switch里case的值不能相同。

练习一下

  1. 根据当前星期提示当前星期几
  2. 根据月份输出当前的季节(春夏秋冬)

34-练习课-系统登录判断

写一个程序,要求用户在控制台输入账号密码,然后验证账号和密码,验证通过则提示登录成功,验证失败则提示失败(错误信息不要提示得太明显)。

public static void main(String[] args) {
	Scanner scan = new Scanner(System.in);
	System.out.println("请输入账号:");
	String name = scan.nextLine();
	System.out.println("请输入密码:");
	String password = scan.nextLine();
	if (name.equals("bamn") && password.equals("123321")) {
		//真正的系统应该是根据name去查数据库 然后拿到这个name的密码 然后判断密码
		System.out.println("登录成功"); //错误信息一般不要提示得太精确
	} else {
		System.out.println("账号或者密码不对");
	}
}Code language: JavaScript (javascript)

35-循环语句-while语句

循环语句就是在满足一定条件的情况下反复执行某一个操作。Java中提供while、do-while、for三个循环语句。

while语句写法

while(布尔条件表达式) {
	执行语句
}Code language: JavaScript (javascript)

当执行完 {} 里面的语句后重新回到表达式判断是否为true,是则继续执行,直到false为止。所以如果不想死循环,在执行语句里面应该要有一个改变条件表达式使得它为false的地方。

public static void main(String[] args) {
	int i = 0;
	while (i < 10) {
		System.out.println("i小于10");
		//如果在执行代码块里面没有改变条件的话 则会死循环
		i++;
	}
}Code language: JavaScript (javascript)
int i = 0;
while (i < 10)
	System.out.println("1111"); //只有一条语句的时候也可以省略{}Code language: JavaScript (javascript)

试一下

统计1到100的和。

public static void main(String[] args) {
	int i = 1;
	int sum = 0;
	while (i < 101) {
		sum = i + sum; //sum += i;
		i++;
	}
	System.out.println("1到100的和是:" + sum);
}Code language: JavaScript (javascript)

注意:while(条件表达式); 这里后面的分号是没有的,不要多加,多加了就会死循环。


36-循环语句-do-while语句

do-while语句和while语句类似,区别在于while先判断条件成立就执行循环体,而do-while先执行一次循环体然后再判断条件,成立再去执行循环体。

do {
	执行语句
} while(条件表达式);Code language: JavaScript (javascript)

注意后面的分号不能少。

do {
	System.out.println("www.FoxDevelop.com");
	System.out.println("www.FoxDevelop.com");
	System.out.println("www.FoxDevelop.com");
} while (true);Code language: JavaScript (javascript)

练一练

使用do-while实现统计1到100个数的和。


37-for循环语句

for循环也是进行循环,不过它比while等循环要丰富一些。

语法结构

for(表达式1; 表达式2; 表达式3) {
	语句序列
}
  • 表达式1:初始化表达式,负责完成变量的初始化,在整个循环中只执行一次
  • 表达式2:循环条件表达式,值为boolean
  • 表达式3:循环后操作表达式,一般用来改变循环条件

最简单的for循环:

for(;;) {
}Code language: CSS (css)

试一试

使用for实现计算1到100所有的数的和。

int sum = 0;
for (int i = 1; i < 101; i++) {
	sum += i; //sum = sum + i;
}
System.out.println(sum);Code language: HTML, XML (xml)

38-foreach循环语句

foreach是for的特殊简化版本。foreach并不能完全取代for语句,然而任何foreach都可以改写成for语句。foreach通常用来遍历数组、列表。foreach语句也是使用for关键字的。

public static void main(String[] args) {
	int arr[] = {1, 2, 3};
	for (int x : arr) {
		System.out.println(x);
	}
}Code language: JavaScript (javascript)

39-练习一下-输出九九乘法口诀

使用for循环输出九九乘法口诀,注意是阶梯型的乘法口诀。提示:需要两层for循环。

public static void main(String[] args) {
	for (int i = 1; i < 10; i++) { //行
		for (int j = 1; j <= i; j++) { //列
			System.out.print(i + " x " + j + "=" + (i * j) + " ");
		}
		System.out.print("\r\n");
	}
}Code language: PHP (php)

40-跳转语句-break

break语句用在switch里是用来终止case。事实上break还可以用在for、while、do-while循环中,用来强制退出循环。

下面我们来做一道题

从1开始到n开始累加,当和大于1000的时候求n的值。

public static void main(String[] args) {
	int sum = 0;
	for (int i = 1; i < 1000000; i++) {
		sum += i;
		if (sum > 1000) {
			System.out.println(i);
			break; //退出它所在的循环 跳到for的下面的语句去
		}
	}
}Code language: JavaScript (javascript)

41-跳转语句-continue语句

continue和break差不多,也是用在for、while、do-while等循环语句里面。不过它不是跳出整个循环,而是跳过本次循环。

比如使用for循环输出1到50之间所有的奇数,要求用到continue

不用continue的实现:

int sum = 0;
for (int i = 1; i <= 50; i++) {
	if (i % 2 == 1) { //是奇数的时候
		sum += i;
	}
}
System.out.println(sum);Code language: HTML, XML (xml)

使用continue的实现:

int sum = 0;
for (int i = 1; i <= 50; i++) {
	if (i % 2 == 0) { //是偶数的时候
		continue; //一旦i是偶数则会执行continue 执行continue就不会执行本次循环下面的代码
	}
	sum += i;
}
System.out.println(sum);Code language: JavaScript (javascript)

42-return语句

return语句可以从一个方法返回,把控制权交给调用这个方法的地方。

return 表达式;Code language: JavaScript (javascript)

表达式是可选的,当方法不需要返回值(也就是void)时可以调用。

public static void main(String[] args) {
	int res = GetAge(1.2f);
	System.out.println(res);
}

public static int GetAge(float f) {
	f = f + 2;
	if (f > 3) {
		return 90; //一旦这个代码执行了 则这个函数GetAge就会退出了
	}
	return 12;
}Code language: JavaScript (javascript)
Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注