循环
while循环
1.语法
while (条件表达式) {
// 条件满足时执行的代码
// 循环体中通常会有改变条件表达式结果的操作,避免死循环
}
2.注意:
- 主要条件表达式为true,循环就会一直执行下去
- 循环体中通常会有改变条件表达式结果的操作,避免死循环
- 少部分情况需要循环一直执行,比如服务器的请求响应监听等
- 循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环。会影响程序性能或造成程序卡死崩溃
- while循环的特点是先判断条件,条件为true时才会执行循环体
3.示例代码:
package com.xxxx.structure;
public class WhileDemo01 {
public static void main(String[] args) {
//计算1-100
int i = 0;
int sum = 0;
while (i<=100){
sum = sum+i;
i++;
}
System.out.println(sum);
}
}
do...while
1.语法:
do {
// 循环体,至少会执行一次
// 同样,循环体中一般要有改变条件表达式结果的操作
} while (条件表达式); // 注意这里结尾有分号
2.注意:
- do-while循环和while循环类似,但它是先执行一次循环体,再去判断条件。即,循环体至少会被执行一次。
3.示例代码:
package com.xxxx.structure;
public class DoWhileDemo {
public static void main(String[] args) {
int i = 0;
int sum = 0;
do {
sum = sum+i;
i++;
}while (i <=100);
System.out.println(sum);
}
}
4.Do...while & while
代码示例:
package com.xxxx.structure;
public class DoWhile_While {
public static void main(String[] args) {
int a = 0;
while(a<0){
System.out.println(a);
a++;
}
System.out.println("*************************");
do{
System.out.println(a);
a++;
}while(a<0);
/*
输出结果为:
*************************
0
说明*号上面的循环未执行
*/
}
}
for循环
1.语法:
//一般表达式
for (初始化表达式; 布尔表达式; 迭代表达式) {
// 循环体
}
//死循环
for (;;){
}
2.注意:
- for循环适用于已知循环次数的场景,它把初始化、条件判断和迭代操作都整合在了一起。
- 最先执行初始化步骤,可以声明一种类型,但初始化一种或多个循环控制变量,也可以是空语句;
- 检测布尔表达式的值,如果为true,循环被执行。如果为false,循环终止,开始执行循环体后的语句;
- 再次检测布尔表达式,循环执行上面的过程
3.代码示例:
- 示例01
package com.xxxx.structure;
public class ForDemo02 {
public static void main(String[] args) {
//计算1-100的奇数和和偶数和
int oddSum = 0;
int eveSum = 0;
for (int i = 0; i <= 100; i++) {
if (i%2 != 0){
oddSum += i;
}else{
eveSum+= i;
}
}
System.out.println("奇数的和:"+oddSum);
System.out.println("偶数的和:"+eveSum);
}
}
- 示例02
package com.xxxx.structure;
public class ForDemo03 {
public static void main(String[] args) {
//循环输出1-1000之间能用5整除的数,3个一组
for (int i = 1; i < 1000; i++) {
if (i%5==0){
System.out.print(i+"\t"); //注意:这里是print(),不是println()
}
if (i%(5*3)==0){ //每行输出3个
System.out.println();//也可以写`System.out.println("\n")`
}
//print() & println()
/*
println:输出完会换行
print:输出完不会换行
*/
}
}
}
- 示例03:打印9*9乘法表
package com.xxxx.structure;
public class ForDemo04 {
public static void main(String[] args) {
for (int j = 1; j <= 9; j++) {
for (int i = 1; i <= j; i++) {
System.out.print(j+"*"+i+"="+(j*i) + "\t");
}
System.out.println();
}
}
}
增强型for循环(用于遍历数组或集合)
1.语法:
for (元素类型 变量名 : 数组或集合) {
// 对每个元素执行的操作
}
2.示例代码:
package com.xxxx.structure;
public class ForDemo05 {
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50}; //定义一个数组
for (int i = 0;i<5;i++){
System.out.println(numbers[i]);
}
System.out.println("=========================");
for (int x:numbers){
System.out.println(x);
}
}
}
循环控制break&continue
1.break:用于终止整个循环。可在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。break语句也可以再switch中使用;
2.continue:用于跳过当前循环的剩余部分,直接开始下一次循环。语句用在循环语句中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
3.示例代码:
package com.xxxx.structure;
public class BreakDemo {
public static void main(String[] args) {
int i = 0;
while(i<100){
i++;
System.out.println(i);
if (i == 30){
break;
}
}
}
}
package com.xxxx.structure;
public class ContinueDemo {
public static void main(String[] args) {
int i = 0;
while (i<100){
i++;
if (i%10==0){
System.out.println();
continue;
}
System.out.println(i);
}
}
}
4.go to关键字
- goto是一个保留关键字,但 Java 语言本身并不支持直接使用goto语句进行无条件跳转。Java 设计之初有意避免了goto的使用,因为无限制的跳转容易导致代码结构混乱、可读性降低,增加维护难度。可以使用带标签的break和continue来实现;
- "标签"是指后面跟上一个冒号标识符,例如:label:
- 对Java来说唯一用到标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由是:希望在其中嵌入另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。
- 示例代码
package com.xxxx.structure;
public class LabelDemo {
public static void main(String[] args) {
//打印101-150之间所有的质数
int count = 0;
outer:for (int i=101;i<150;i++){
for (int j = 2;j<i/2;j++){
if (i % j == 0){
continue outer;
}
}
System.out.print(i+" ");
}
}
}
-综合练习
```java
package com.xxxx.structure;
public class TestDemo {
public static void main(String[] args) {
//打印三角形 5行
for(int i = 1; i<=5; i++){
for (int j = 5; j>=i ; j--){
System.out.print(" ");
}
for (int j = 1; j <=i; j++){
System.out.print("*");
}
for (int j = 1; j<i; j++){
System.out.print("*");
}
System.out.println();
}
}
}