public class LogicControl {
public static void main(String[] args) {
System.out.println("a");
System.out.println("b");
System.out.println("c");
}
}
这个我就不展示效果图了,
结果就是
a
b
c
* * *
[]( )2\. 选择结构(分支结构)
-----------------------------------------------------------------------------
if else switch
* * *
[]( )3\. 循环结构
-----------------------------------------------------------------------
for while do while
* * *
[]( )分支结构(选择结构)
=========================================================================
[]( )if语句
===================================================================
[]( )基本语法形式1
----------------------------------------------------------------------
if(布尔表达式){
条件满足时执行的代码;
}
* * *
[]( )基本语法形式2
----------------------------------------------------------------------
if(布尔表达式){
条件满足时执行代码
}else{
条件不满足时执行代码
}
* * *
[]( )基本语法形式3(多分支情况)
-----------------------------------------------------------------------------
if(布尔表达式){
条件满足时执行代码;
}else if(布尔表达式){
条件满足时执行代码;
}else{
if 和 else if 的条件都不满足时执行代码
}
* * *
[]( )代码实例1
--------------------------------------------------------------------
public class LogicControl {
public static void main(String[] args) {
int n =10;
if(0 == n%2){//当 n 是偶数时,输出if输出语句
System.out.println("偶数");//10是偶数,所以输出该语句的
}else{// 当 n 不是是偶数时(不满足if条件时),输出else语句
System.out.println("奇数");
}
}
}
. 那么这里我想自己输入一个数,来判断是否是奇偶数。
这里就要使用到 Scanner 函数,或者可以说是一种方法。
public class LogicControl {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);// 相当于 C语言中 scanf,从键盘输入一个数据
int n = scanner.nextInt();// nextInt 意思是读取一个整形数据,赋给 整形变量 n
}
}// 图1,为什么会显示找不到 Scanner 类, 因为没有引入 inport java.util.Scanner 类似C语言头文件的作用
### []( )图 1
![在这里插入图片描述](https://img-blog.csdnimg.cn/6c36fb8709f94a39bd10d48d5864afbf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
.在这里有一个小技巧,在idea编译器中,只要你使用它推荐的方法Scanner ,它就会自动引入 inport java.util.Scanner
图 2 、图 3
### []( )图2
![在这里插入图片描述](https://img-blog.csdnimg.cn/8423935afc0c46109349f96de806a8f4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )图3
![在这里插入图片描述](https://img-blog.csdnimg.cn/abe25126b21c4a6a96b2f655a55cff9e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
如果你已经写完了 Scanner ,随便点击 Scanner 的一个位置,只要鼠标点完闪烁光标在 Scanner 上就行,按住 alt + 回车,它就会弹出框架,你只需选择就可以了,图4 和 图5
### []( )图4
![在这里插入图片描述](https://img-blog.csdnimg.cn/c225795402b14c939d0aef7212e4a19b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )图5
![在这里插入图片描述](https://img-blog.csdnimg.cn/a28fd752b69647a0903e8c353d16ee60.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
nextInt()的用法
### []( )图6
![在这里插入图片描述](https://img-blog.csdnimg.cn/3aa6bafa1d3c4e4a9503ddc92cbd3313.png#pic_center)
* * *
[]( )最终程序如下:
----------------------------------------------------------------------
import java.util.Scanner;
public class LogicControl {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);// 相当于 C语言中 scanf,从输入一个数据
int n = scanner.nextInt();
// nextInt 意思是读取一个整形数据,赋给 整形变量 n,意味着你需要输入一个整形数据
// 因为Java对数据的类型非常严格,不同类型的值是无法进行赋值,就是说 如果你此时输入一个 非整形 的数据
// 那么程序 nextInt 读取数据毫无疑问会失败,导致程序运行不起来 图9
if(0 == n%2){//当 n 是偶数时,输出if输出语句
System.out.println("偶数");
}else{// 当 n 不是是偶数时(不满足if条件时),输出else语句
System.out.println("奇数");
}
}
}// 效果图 7, 8
### []( )图 7
![在这里插入图片描述](https://img-blog.csdnimg.cn/308c8873954e47c09236c6f64f167ead.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )图 8
![在这里插入图片描述](https://img-blog.csdnimg.cn/3481cb90a95942e28c7edb5748d7a5e6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )图 9
![在这里插入图片描述](https://img-blog.csdnimg.cn/f9e649f4242940daa773917c72d409f1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )你们是不是觉得 java输入好麻烦?
=================================================================================
是的,主要因为Java 本身就不是用来开发控制台程序的,是用于 后台开发,偏应用性的语言
* * *
### []( )那么我们想输入输入一个字符串呢?
### []( )方法1
将 nextInt 的Int 改成 Line
即:nextLine
import java.util.Scanner;
代码如下
public class LogicControl {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();// 把 Int 改成 Line就OK了,意思是读取一行的数据
System.out.println(str);
int n = scanner.nextInt();
if(0 == n%2){//当 n 是偶数时,输出if输出语句
System.out.println("偶数");
}else{// 当 n 不是是偶数时(不满足if条件时),输出else语句
System.out.println("奇数");
}
}
}//图10
### []( )图10
![在这里插入图片描述](https://img-blog.csdnimg.cn/77ffb62bd777482a8a2b3016f34fe6ed.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )方法2
把 nextLine 去掉 Line
即 next
### []( )代码如下
import java.util.Scanner;
public class LogicControl {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
// 此方法存在一个弊端,就是无法读取空格,且遇到空格后,不再读取后面的数据
System.out.println(str);
String str1=scanner.nextLine();// 而 nextLine 可以读取 空格数据,并往后一直读取
System.out.println(str1);
}
}//图11
### []( )图 11
![在这里插入图片描述](https://img-blog.csdnimg.cn/53f3d68b552c4bd0b982ed87e639b52f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
#### []( )但是请注意 如何我后面写的是 int n = scanner.nextInt的话,留下来的数据( world) 与nextInt的要读取的数据类型不匹配,程序会报错。
#### []( )代码如下
import java.util.Scanner;
public class LogicControl {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
// 此方法存在一个弊端,就是无法读取空格,且遇到空格后,不再读取后面的数据
System.out.println(str);
int n =scanner.nextInt();
System.out.println(n);
}
}//图12
##### []( )图12
![在这里插入图片描述](https://img-blog.csdnimg.cn/e1afa51262924a07ade38e6218fca2cf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )在输入中,还需要注意一种情况
-----------------------------------------------------------------------------
public class LogicControl {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String str = scanner.nextLine();
System.out.println(str);
if(0==n%2){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
}
} 图13
### []( )图13
![在这里插入图片描述](https://img-blog.csdnimg.cn/f0685958320e455fa6678629cf80900d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
这个问题是无法解决的,是java的缺陷,所以以后在我们想要输入字符串和 整形数据时,字符串输入语句要写在前面。注意在以后工作,做项目的时候,慎重使用 Scanner
* * *
[]( )代码实例2
--------------------------------------------------------------------
### []( )判定一个数字是奇数还是偶数
public class LogicControl {
public static void main(String[] args) {
int num = 10;
if (num > 0) {
System.out.println("num 是正数");//满足if条件执行该语句,其它语句就不执行了
} else if (num < 0) {
System.out.println("num 是负数");//满足else if条件执行该语句,其它语句就不执行了
} else {
System.out.println("num 是 0");//不满足上面所有条件,执行该语句,其它语句就不执行了
}
}
}// 这个程序我就不讲了,你们自己看看就行,主要是了解一下 if语句的用法
* * *
[]( )代码示例3: 判定某一年份是否是闰年
---------------------------------------------------------------------------------
### []( )图14
![在这里插入图片描述](https://img-blog.csdnimg.cn/8ce9c5a4fdf4419ea6747ceb4c0ba25c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_18,color_FFFFFF,t_70,g_se,x_16#pic_center)
### []( )代码如下
public class LogicControl {
public static void main(String[] args) {
int year = 2000;
if (year % 100 == 0) {
// 判定世纪闰年
if (year % 400 == 0) {
System.out.println("是闰年");
} else {
System.out.println("不是闰年");
}
} else {// 不能被100 整除,走else语句
// 普通闰年
if (year % 4 == 0) {
System.out.println("是闰年");
} else {
System.out.println("不是闰年");
}
}
}
}
### []( )让我们来优化一下上程序
import java.util.Scanner;
public class LogicControl {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
if ((year % 100 != 0 && 0 == year%4) || 0==year%400) {
// 普通闰年
System.out.println("普通闰年");
}if(0 == year%100 && 0==year%400){
// 实际闰年
System.out.println("世纪闰年");
}
scanner.close();//这里跟C语言的文件操作时一样的,打开文件,就需要关闭文件
// scanner在Java中是一种资源,System.in 相当于打开键盘,键盘其实也是一个文件
// 所以更C语言文件操作是一样的,打开一个文件,就需要关闭一个文件
// scanner.close 就类似于 C语言中 fclose(),都是关闭一个文件
// 不管也没问题,但最好还是写一下,
}
}
* * *
[]( )注意事项1:悬垂 if/else 问题
----------------------------------------------------------------------------------
### []( )任何一行代码有括号就写上不要省略
#### []( )例如
if(布尔表达式)
System.out.println("hehe");
else
System.out.println("haha");
虽然if后面可以不加括号,但是它只能管一条语句,代码一多就容易出现问题
所有我们要保持良好的习惯,要这么写
if(布尔表达式){
System.out.println(“hehe”);
}
else{
System.out.println(“haha”);
}
* * *
[]( )注意事项2: 代码风格问题
----------------------------------------------------------------------------
### []( )代码写得好不好,主要看可读性高不高(等价于 注释 和 风格好不好看) 和 效率高不高(程序运行速度快不快)
### []( )java程序的代码风格,代码示例
java程序的代码风格
if(布尔表达式){
System.out.println(“hehe”);
}else{
System.out.println(“haha”);
}
C语言的风格
if(布尔表达式)
{
System.out.println(“hehe”);
}
else
{
System.out.println(“haha”);
}
注意 Java跟C语言的代码风格不同,两者不能混淆
我们现在是在学Java,所以写Java代码时,一定要使用Java的代码风格!!!
前花括号一定要跟在 表达式/类/方法 的后面,这是Java中代码风格
* * *
[]( )注意事项3 分号问题
-------------------------------------------------------------------------
### []( )代码示例
if(布尔表达式);{// 这样写会导致后面的花括号里面的内容成为了,无条件都能执行,因为if(布尔表达式);的管理范围 到 分号就结束了。
所以对花括号里的内容起不到限制作用,所以后面的花括号里的内容,只要程序运行,它就会被无条件运行
System.out.println(“hehe”);
}
else{
System.out.println(“haha”);
}
* * *
&ensp
[]( )switch 语句
========================================================================
[]( )基本语法
-------------------------------------------------------------------
public class LogicControl {
public static void main(String[] args) {
switch(整数|枚举|字符|字符串){
case 内容1 : {
内容满足时执行语句;
break;
}
case 内容2 : {
内容满足时执行语句;
break;
}
.....
....
default:{
内容都不满足时执行语句;
break;
}
}
}
}
* * *
[]( )代码实例
-------------------------------------------------------------------
public class LogicControl {
public static void main(String[] args) {
int a =1;
switch (a){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
default:
System.out.println("参数不能匹配");
break;
}
}
}//图 15
### []( )图15
![在这里插入图片描述](https://img-blog.csdnimg.cn/ca50c815afed4464bfb2af174d414639.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )现在让我们来看看看那些类型 数据 不可以运用到 switch 语句中(int 是绝对可以的)
-------------------------------------------------------------------------------------------------------------
### []( )byte
public class LogicControl {
public static void main(String[] args) {
byte a =1;
switch (a){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
default:
System.out.println("参数不能匹配");
break;
}
}
}//图 16,有结果得知可以
#### []( )图16
![在这里插入图片描述](https://img-blog.csdnimg.cn/c45bfe510c1f48038d8bae0857d5bf7a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )short
public class LogicControl {
public static void main(String[] args) {
short a =1;
switch (a){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
default:
System.out.println("参数不能匹配");
break;
}
}
}//图 17,有结果得知可以
#### []( )图17
![在这里插入图片描述](https://img-blog.csdnimg.cn/a2c526aa829d41458db0a7511f911b78.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )long
public class LogicControl {
public static void main(String[] args) {
long a =1;
switch(a){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
default:
System.out.println("参数不能匹配");
break;
}
}
}//图 18,有结果得知不可以
#### []( )图18
![在这里插入图片描述](https://img-blog.csdnimg.cn/f641d1f6058647aaa793e4e233380f3c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )float 、double
public class LogicControl {
public static void main(String[] args) {
// float a =1.0f;
double a =1.0;
switch(a){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
default:
System.out.println("参数不能匹配");
break;
}
}
}//图 19、20,由结果得知都不可以
#### []( )图19
![在这里插入图片描述](https://img-blog.csdnimg.cn/7cc85a4954114fd0bac19a186b93b350.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
#### []( )图20
![在这里插入图片描述](https://img-blog.csdnimg.cn/0b1c0cbcf9284d38b112ac7bc6af3af4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_16,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )char
public class LogicControl {
public static void main(String[] args) {
char a = 'f';//可以
switch (a){
case 'f':
System.out.println("1");
break;
case 'g':
System.out.println("2");
break;
default:
System.out.println("参数不能匹配");
break;
}
}
}// 图21,由结果可知可以
#### []( )图21
![在这里插入图片描述](https://img-blog.csdnimg.cn/20b4521314374fab85de8543bcd7521a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )boolean
public class LogicControl {
public static void main(String[] args) {
boolean a = true;
switch(a){
case true:
System.out.println("1");
break;
case false:
System.out.println("2");
break;
default:
System.out.println("参数不能匹配");
break;
}
}
}// 图22,由结果可知不可以
#### []( )图22
![在这里插入图片描述](https://img-blog.csdnimg.cn/6a60cab9ea2b4b34a097c75553c104a9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_19,color_FFFFFF,t_70,g_se,x_16#pic_center)
[]( )总结:在Java中的八大基础数据类型,有4种(long、double、float、boolean)不能运用在switch语句中
------------------------------------------------------------------------------------------------------------------------------
* * *
[]( )我们再来试试Java中特有的字符串类型
----------------------------------------------------------------------------------
public class LogicControl {
public static void main(String[] args) {
String a = "hehe";
switch(a){
case "hehe":
System.out.println("1");
break;
case "haha":
System.out.println("2");
break;
default:
System.out.println("参数不能匹配");
break;
}
}
}// 图23,由结果可知可以
### []( )图23
![在这里插入图片描述](https://img-blog.csdnimg.cn/2bf7368db6ab42b09fea943c55cb3b7e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )在jdk1.5开始,引入了枚举,枚举是可以运行到switch语句中的,这点和C语言一样。在这里就不举例子,讲到枚举时,再细讲
-----------------------------------------------------------------------------------------------------------------------------
* * *
[]( )注意事项1: break 不要遗漏, 否则会失去 “多分支选择” 的效果(就是说会输出 其他条件的case语句)
-----------------------------------------------------------------------------------------------------------------------
public class LogicControl {
public static void main(String[] args) {
int day =1;
switch (day){
case 1:
System.out.println("1");
case 2:
System.out.println("2");
break;
}
}
}// 图24
### []( )图24
![在这里插入图片描述](https://img-blog.csdnimg.cn/6f0d7574174c49bbb9067e53a0867c43.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )注意事项2 switch 中的值只能是 整数|枚举|字符|字符串,这个就不多说,前面已经讲了
-------------------------------------------------------------------------------------------------------------
* * *
[]( )注意事项3 switch 不能表达复杂的条件
-------------------------------------------------------------------------------------
### []( )例如: 如果 num 的值在 0 到 10 之间, 就打印 hehe,这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示.
if (num > 0 && num < 10) {
System.out.println("hehe");
}// 图 25
#### []( )图25
![在这里插入图片描述](https://img-blog.csdnimg.cn/f057d0f5e00f435f8c19ab1782b1d4be.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )注意事项4 switch 虽然支持嵌套, 但是很丑~,歪七扭八的
-----------------------------------------------------------------------------------------------
public class LogicControl {
public static void main(String[] args) {
int x = 1;
int y = 1;
switch(x) {
case 1:
switch(y) {
case 1:
System.out.println("hehe");
break;
}
break;
case 2:
System.out.println("haha");
break;
}
}
}
结论 代码的美观程度也是一个重要的标准. 毕竟这是看脸的世界
* * *
[]( )循环结构
===================================================================
while(布尔表达式) do while(布尔表达式) for(表达式1;布尔表达式2;表达式3)
[]( )while 循环
-----------------------------------------------------------------------
### []( )基本语法格式:
while(循环条件){
循环语句;
}
循环条件(布尔表达式)为 true, 则执行循环语句; 否则结束循环
### []( )代码实例 1
#### []( )(把 1~10 全部按加起来)
public class LogicControl {
public static void main(String[] args) {
int i =1;
int sum = 0;
while(i<=3){// 1.i==1、 2.i==2、3,i==3、 4.i == 4 不满足循环条件,为假(false)。跳出循环
sum= sum+i;
// 1. sum = sum+i == 0+1==1
// 2. sum = sum +i == 1 + 2 == 3
// 3. sum = sum +i == 3 + 3 == 6
i++;
// 1.i =2;
// 2.i = 3
// 3.i = 4;
}
System.out.println(sum);//6
}
}// 图27,28 ,29,30
#### []( )图27
![在这里插入图片描述](https://img-blog.csdnimg.cn/b7db2e87e94c454bb01a7327f907e229.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
#### []( )图28
![在这里插入图片描述](https://img-blog.csdnimg.cn/c68caedb47824f11b36e46f1620eee0b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
#### []( )图29
![在这里插入图片描述](https://img-blog.csdnimg.cn/af834d4101a347a5949324159edbd296.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
#### []( )图30
![在这里插入图片描述](https://img-blog.csdnimg.cn/597deb4e75fa4c64a942a9c9f4647169.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )注意 千万不要像C语言一样这样写死循环 while(1),在Java中,while里面放的是 布尔类型表达式,你只能这么写 while(true),明白嘛。
---------------------------------------------------------------------------------------------------------------------------------------------
* * *
### []( )代码实例2(求阶乘)
public class LogicControl {
public static void main(String[] args) {
int n = 1;
int num = 1;// 这里num设置为1,不设置为0,是因为,设置0的话
// 后面while循环求阶乘,就没有意义了。 0 乘以任何数都为0.
while (n <= 5) {
num *= n;
// num = num * n
// 1. num = 1 * 1 == 1 (n==1)
// 2. num = 1 * 2 == 2 (n==2)
// 3. num = 2 * 3 == 6 (n==3)
// 4. num = 6 * 4 == 24(n ==4)
// 5. num = 24 * 5 == 120(n==5)
等价于 1 * 2 * 3 * 4 * 5 == 120(5的阶乘)
n++;
//1. n = 2
//2. n = 3
//3. n = 4
//4. n = 5
//5. n = 6(在第五次循环时,n 自增加一等于6,返回while,判断循环条件不成立,跳出循环)
}
System.out.println(n);// 跳出循环后 n == 6
System.out.println(num);// num == 120
}
}// 图 31
#### []( )图31
![在这里插入图片描述](https://img-blog.csdnimg.cn/fc825fb4ae654630aeed69153bc7ba72.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )代码实例3(求 n! 的阶乘之和)
这里我们求3!的阶乘之和
11 + 12 + 123 == 1 + 2 + 6 == 9
public class LogicControl {
public static void main(String[] args) {
int n = 1;
int sum = 0; // 用来接收 num 计算出的每个阶乘值
int num = 1;// 这里num设置为1,不设置为0,是因为,设置0的话
// 后面while循环求阶乘,就没有意义了。 0 乘以任何数都为0.
while (n <= 3) {
num *= n;// n的阶乘
// num = num * n
// 1. num = 1 * 1 == 1 (n==1)
// 2. num = 1 * 2 == 2 (n==2)
// 3. num = 2 * 3 == 6 (n==3)
//这里我们只需要用一个 整形变量来 累积加上成 num算出的每个 阶乘值
sum = sum +num;
n++;
//1. n = 2
//2. n = 3
//3. n = 4 (在第3次循环时,n 自增加一等于4,返回while,判断循环条件不成立,跳出循环)
}
System.out.println(n);// 跳出循环后 n == 4
System.out.println(num);// num == 6
System.out.println(sum);// 根据我们的分析,sum应该是 9
}
}// 图 32
#### []( )图32
![在这里插入图片描述](https://img-blog.csdnimg.cn/43428ae5c5824086a58c34c2b294b180.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
\*\*
[]( )注意事项
-------------------------------------------------------------------
1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
2. 和 if 类似, while 后面的 { 建议和 while 写在同一行.
3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行
### []( )情况3 int i = 10;
while(i>0);{
i--;
}
如果你这样写, while(i>0);循环 是一个死循环,因为分号 将while 和 后面的循环体 给截断了,while一直在循环,因为 没有循环体的限制,i一直都是10
所以一直在死循环,不打印任何数据,while 只有一个循环条件判断,没有循环体,也就意味着没有任务可以交给程序去执行
* * *
[]( )break
--------------------------------------------------------------------
break 的功能是让循环提前结束
### []( )代码如下
找到 100 - 200 中第一个 6 的倍数
public class LogicControl {
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 6 == 0) {
break;// 找到 100 - 200 中第一个 6 的倍数之后,直接中断循环
// 也就是说 执行到 break 就会让循环结束
}
num++;
}
System.out.println("找到了 6 的倍数, 为:" + num);// 此时打印的 num 就是 100~200之间的 第一个 6 的倍数
}
}//图 33
### []( )图33
![在这里插入图片描述](https://img-blog.csdnimg.cn/92c82712dfac4cdcba6d8a89de92ffbd.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )continue
-----------------------------------------------------------------------
continue 的功能是跳过这次循环, 立即进入下次循环
### []( )继续拿上面的例子
这一次我们要找到 100 - 200 中 6 的倍数
public class LogicControl {
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 6 == 0) {// 判断num 是否为 100~200之间 6 的的倍数
System.out.println("找到了 6 的倍数, 为:" + num);// 打印 找到的 100~200之间 6 的倍数
num++; // num++; 在这里写一个,是为了 在找到 6的倍数之后,自增加一,避免造成死循环
// 如果没有这个num++; num 将恒为第一个6的倍数102 == 17*6,永远小于200,也就意味着永远都满足while的循环条件,从而造成死循环
continue;
// 找到 100 - 200 中 6 的倍数之后,直接返回while判断条件,让while去判断 num 是否符合循环条件
// 符合就再重复执行一遍上述程序,直至不满足 while 的循环条件 或者 不满足 if 语句的判断条件
// 跳出while循环 或者 执行 num++ 语句。
}
num++;// 这个num++ 是为了让程序遍历 100~200 之间的所有数值,且避免了死循环
比如说 假设这个num++没写,循环进来的时候,100 不满足if条件,所以不执行if语句,
但是 没有任何语句去改变 num的值,所以会导致num一直都是100,其结果就是 程序在死循环巡行,且不打印任何值
因为 除了 if 语句, 循环体里没有任何语句需要它去执行,况且100 也不满足if语句的执行条件
}
}
}//图 34
### []( )图34
![在这里插入图片描述](https://img-blog.csdnimg.cn/dbad6d1cc1c24bf9a06fd9d03c6f4251.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_8,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )总结
-----------------------------------------------------------------
执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的语句
* * *
[]( )另外,请注意, break 和 continue 都必须写循环中,才能使用,这是规则。切记!!!
---------------------------------------------------------------------------------------------------------------
[]( )特殊:break 还可以在switch中使用。这一点是break独有的,也请记住!
--------------------------------------------------------------------------------------------------------
[]( )说到这里还要额外提醒大家一个点,在Java中是没有 goto语句,就算有 你们也不要用,它太灵活了你们把握不住,而且以后可能会被 同事 和老板 diss,如果你想被分尸,你就去用,我不拦着,也不敢,
------------------------------------------------------------------------------------------------------------------------------------------------------------------
* * *
[]( )for 循环
---------------------------------------------------------------------
for(表达式1;布尔表达式2;表达式3){
循环体;
}
表达式1: 用于初始化循环变量.
表达式2: 循环条件
表达式3: 更新循环变量
和 while 循环相比较, for 循环将这三个部分合并在一起, 写代码时不容易遗漏
### []( )代码实例
输出 1~100 中,能被 3 和 5 整除的数
public class LogicControl {
public static void main(String[] args) {
int i =0;
for(i = 1;i < 100; i++){
if(0 == i%3 && 0 == i%5){
System.out.println(i);
}
}
System.out.println("haha");
}
}// 图35、流程图
我在这里只讲解for循环一次是怎么循环的
表达式将 i 初始化一个值,然后执行布尔表达式2(i<100),判断是否满足小于100的条件
满足就执行 循环体的内容,然后回到表达式3,更新循环变量 i的值,
然后再执行 布尔表达式2,判断是否满足小于100的条件,满足就重复上述步骤
不满足就跳出循环,执行下方程序 直至程序结束
#### []( )图35
![在这里插入图片描述](https://img-blog.csdnimg.cn/d718f010c8004f77be9c73e2bae9d520.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
#### []( )流程图
![在这里插入图片描述](https://img-blog.csdnimg.cn/0e523f90f78a45ffa3eb09d93850ceee.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )for 循环嵌套
-----------------------------------------------------------------------
public class LogicControl {
public static void main(String[] args) {
int i =0;
for(i = 1;i < 5;i++){
int j = 0;
for(j=1;j<=i;j++){
System.out.print(j);
}
System.out.print("\n");
}
}
}// 图36, 详解图
### []( )图 36
![在这里插入图片描述](https://img-blog.csdnimg.cn/21a50258e87842b0b9f08babc93bd557.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
### []( )详解图
![在这里插入图片描述](https://img-blog.csdnimg.cn/938121de581c409585a46cee5148af17.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARGFyayBBbmQgR3JleQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
* * *
[]( )注意事项 (和while循环类似)
--------------------------------------------------------------------------------
1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
2. 和 if 类似, for 后面的 { 建议和 while一样, 写在同一行.
3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行