循环结构:
在程序当中总有一些需要反复执行的代码,假设没有循环结构,这些重复执行的代码需要重复编写,代码无法得到重复使用。所以多数编程语言都是支持循环结构的,将来把需要反复执行的代码片段放到“循环体”,再联合计数器,共同控制这段需要反复执行的代码。
在Java中循环结构分为三种:
/*
1、当前示例主要讲解for循环。for循环的语法结构如下:
语法结构:
for(初始化表达式;布尔表达式;更新表达式){
//需要重复执行的代码片段【由java语句构成】
}
2、for循环的执行过程/执行原理【*****】
1、初始化表达式、布尔表达式、更新表达式都不是必须的。【两个分号(;)必须要有】
2、初始化表达式最先执行,并且在整个for循环当中只执行一次。
3、布尔表达式必须是true/false,不能是其他值
4、for循环的执行过程:
* 先执行初始化表达式,并且该表达式只执行一次
* 判断布尔表达式的结果是true还是false
- 布尔表达式true
* 执行循环体
* 执行更新表达式
- 布尔表达式true
* 执行循环体
* 执行更新表达式
* 判断布尔表达式
- 布尔表达式false
循环结束
- 布尔表达式false
循环结束
*/
public class ForTest01
{
public static void main(String[] args){
//使用循环结构代替所有需要反复执行的代码块
//使用循环语句可以使代码量减少
for(int i=0;i<=10;i++){
System.out.println(i);
}
// 无限循环
for(;;){
System.out.println("无限循环");
}
}
}
/*
for循环变量的作用域
*/
public class ForTest02
{
public static void main(String[] args){
// 以下循环中,i变量的作用域仅限于当前循环的内部使用
for(int i=1;i<=10;i++){
System.out.println("i---------->"+i);
}
// System.out.println(i); //编译错误:找不到i
// j变量作用于整个main函数
int j = 0;
for(;j<=10;j++){
System.out.println("j++++++>"+j);
}
System.out.println("j--------->"+j); //11
// k变量也作用域整个main函数
int k;
for(k=0;k<=10;k++){
System.out.println("k------"+k);
}
System.out.println("k+++++++"+k);
}
}
public class ForTest03
{
public static void main(String[] args){
// 输出1-10中所有的奇数
for(int i=1;i<=10;i+=2){
System.out.println("i++++++"+i); //1 3 5 7 9
}
// 输出1-10中所有的偶数
for(int i=2;i<=10;i+=2){
System.out.println("i---------"+i); //2 4 6 8 10
}
// 递减输出 10-1
for(int i=10;i>0;i--){
System.out.println("i======>"+i); //10 9 8 7 6 5 4 3 2 1
}
for(int i=100;i>=50;i-=10){
System.out.println("i-------->"+i);
}
// 以下两个不一样
for(int i=1;i<10;){
System.out.println("i-------->"+i);
i++;
}
for(int i=1;i<10;){
i++;
System.out.println("i-------->"+i);
}
}
}
/*
循环语句和判断语句嵌套使用【for if】
1、判断奇数的两种方法;
优先使用循环次数少的方法
*/
public class ForTest04
{
public static void main(String[] args){
for(int i=1;i<=10;i+=2){
System.out.println(i+"是奇数");
}
System.out.println("-----------------");
// 找出1~10中所有的奇数
for(int i=1;i<=10;i++){
if(i%2==1){
System.out.println(i+"是奇数");
}
}
}
}
public class ForTest05
{
public static void main(String[] args){
int j = 0;
for(int i=1;i<=100;i+=2){
// i一定是奇数
// 累加求和
j += i;
}
// 整个循环结束之后,输出和的值
System.out.println("100以内奇数的和为:"+j);
}
}
public class ForTest05
{
public static void main(String[] args){
for(int i=1;i<10;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+i*j+'\t');
}
System.out.println(); // 输出一个换行
}
}
}
/*
编写for循环找出1~10000中所有的素数
要求每8个换一行
*/
public class ForTest07
{
public static void main(String[] args){
int count = 0;
for(int i=2;i<=10000;i++){
//设置标志位
boolean isSushu = true;
for(int j=2;j<=i/2;j++){
if(i%j == 0){
isSushu = false;
break;
}
}
// 第一种方法,使用三目运算符
// System.out.println(isSushu ?i+"是素数":i+"不是素数");
//第二种方法
if(isSushu){
System.out.print(i+"\t");
count++;
if (count%8==0)
{
System.out.println();
}
}
}
System.out.println("素数共有:"+count);
}
}
/*
while循环语句:
1、while循环的语法结构
while(布尔表达式){
循环体
}
2、while循环的执行原理
先判断布尔表达式的结果:
* true
执行循环体
* 判断布尔表达式的结果
* true
...
* false
...
* false
- 循环结束
3、while循环的循环次数
0 ~ N次
注意:while循环的循环体可能执行次数为0次
*/
public class WhileTest01
{
public static void main(String[] args){
//无限循环
/*
while (true)
{
System.out.println("hello");
}
// 编译器检测到该程序永远都无法被访问
// 错误: 无法访问的语句
System.out.println("world!");
*/
int i = 10;
int j = 3;
// 改为10>3时,无限循环下边的代码就会编译报错
while(i>j){
System.out.println("呵呵");
}
// 以下程序不会编译报错
System.out.println("Hello World");
}
}
/*
使用while循环输出1~10
*/
public class WhileTest02
{
public static void main(String[] args){
int i = 1;
while(i<=10){
System.out.println("i----->"+i);//1 2 3 4 5 6 7 8 9 10
i++;
}
System.out.println("end---->"+i);
System.out.println("-------------------------->");
int j = 10;
while(j>0){
System.out.println(j--);//10 9 8 7 6 5 4 3 2 1
}
System.out.println("end j------>"+j);
int k = 10;
while(k >= 0){
System.out.println(--k);//9 8 7 6 5 4 3 2 1 0 -1
}
System.out.println("end k------>"+k);
}
}
/*
do...while循环:
1、do...while循环的语法结构
do{
循环体;
}while(布尔表达式);
2、do...while循环的执行原理
3、do...while循环的执行次数:
循环体代码片段执行次数是:1-N次【至少1次】
4、使用do...while循环的注意事项:
do...while循环语句最终有一个"分号(;)"
*/
public class DoWhileTest01
{
public static void main(String[] args){
int i =10;
do{
//至少执行一次
System.out.println("i------->"+i);
i++;
}while(i>100);
System.out.println("--------------");
// 完整的do...while语句
int j = 1;
do{
System.out.println("j-------->"+j);
j++;
}while(j<10);
}
}
break表示终止循环,可以终结当前循环,也可以终止某个命名的循环。
/*
break语句:
1、break是java语句当中的关键字,被翻译为“终端/折断”
2、break + ";"可以成为一个单独的完整的java语句: break;
3、break语句使用在switch语句当中,用来终止switch语句执行。
4、break语句同样可以使用在循环体中,用来终止循环的执行。
5、break可以终止哪个循环呢?
6、使用在for、while、do...while循环语句当中,当某个条件成立时,
用来跳出循环。
7、默认情况下:break中断最近的循环语句,
可以给循环命名,使break中断某个循环
*/
public class BreakTest01
{
public static void main(String[] args){
// 1、单个循环
for(int i=0;i<10;i++){
if(i==5){
// 当 i=5 时跳出循环
break;
}
System.out.println("i------->"+i);
}
// 分割线
System.out.println("————————————————————————————————>");
// 2、双层循环终止当前循环
for(int j=0;j<3;j++){
for(int k=0;k<10;k++){
if(k==5){
break;
}
System.out.println("k----------"+k);
}
}
System.out.println("-------------------");
//3、给循环命名
for1:for(int j=0;j<3;j++){
for2:for(int k=0;k<10;k++){
if(k==5){
break for1;
}
System.out.println("k----------"+k);
}
}
System.out.println("Hello world!-----------");
}
}
continue表示终结本次循环,在continue之后的代码不再执行。
/*
continue语句:
1、continue表示:继续下一次循环
2、continue也是一个continue关键字加一个分号(;)构成的一个单独的完整的java语句,
主要出现循环语句当中用来控制循环的次数
3、break和continue的区别:
* break 表示循环不再执行
* continue表示中断本次循环,继续下一次循环
* continue 也可以加循环名称
*/
public class ContinueTest01
{
public static void main(String[] args){
// 1、break语句
for(int i=0;i<5;i++){
if(i==3){
break;
}
System.out.println("i------"+i);
}
System.out.println("---------------------");
// 2、continue
for(int i=0;i<5;i++){
if(i==3){
continue;
}
System.out.println("i------"+i);
}
System.out.println("----------------------");
// 3、continue 加循环名称
for1:for(int j=0;j<5;j++){
for2:for(int i=0;i<5;i++){
if(i==3){
continue for1;
}
System.out.println("i------"+i);
}
System.out.println("j+++++++++"+j);
}
}
}