while循环是最基本的循环
语法:
while(布尔表达式){
//循环体
}
do…while 循环
do{
//循环体
}while(布尔表达式)
while 和 do…while的区别
while先判断后执行。do…while先执行后判断
do…while总是保证循环体至少会被执行一次!(主要的区别)
看代码:
public static void main(String[] args) {
int a=0;
while(a<0){
System.out.println("while循环体内的a="+a);
a++;
}
System.out.println("===============");
do{
System.out.println("do...while循环体里面的a="+a);
a++;
}while(a<0);
}
运行结果:
===============
do...while循环体里面的a=0
代码解析:
这里的代码并没有进入到while循环里面
因为while循环的条件语句并没有成立
而do...while循环则进行了一次循环,
因为dowhile循环是先执行一次才进行条件的判断的
所以,即使一开始条件不符合也能进入到循环体里面
虽然所有的循环结构都可以用while或者dowhile表示,但java提供了另一种语句——for循环,使一些循环结构变得更加简单
for循环
for循环语句是支持迭代的一种通用结构,是最有效的、最灵活的循环结构。
for循环执行的次数是在执行前就确定的。
语法:
for(初始化;布尔表达式;循环变量迭代){
//循环体
}
增强for循环
语法
for(声明语句:表达式){
//循环体
}
这里的声明语句是声明新的局部变量,
该变量的类型必须和数组或集合的元素的类型一致
表达式:表达式是要访问的数组名
代码举例:
public static void main(String[] args) {
int numbers[]={100,30,20,10,33,44};
for (int num:numbers) {
System.out.println(num);
}
}
运行结果:
100
30
20
10
33
44
代码:
public static void main(String[] args) {
for (int i=1;i<=9;i++){
for (int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
}
代码分析:
1.观察99乘法表的规律
每一列:行数逐渐递增,列数不变
而且 列数<=行数
2.输出格式的调整
运行结果:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
*
* *
* *
* *
*********
题目分析:
化繁为简,先死后活
简单:(打印半个金字塔)
* 第一层:1个*
** 第二层:2个*
*** 第三层:3个*
**** 第四层: 4个*
***** 第五层:5个*
public static void main(String[] args) {
for (int i=1;i<=5;i++){ //i表示层数
//控制打印每层的*数
for (int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
运行结果:
*
**
***
****
*****
中等:(打印整个金字塔)
* //第一层 有1个* 2 * 1 - 1 有4=(总层数-1)个空格
*** //第二层 有3个* 2 * 2 - 1 有3=(总层数-2)个空格
***** //第三层 有5个* 2 * 3 - 1 有2=(总层数-3)个空格
******* //第一层 有7个* 2 * 4 - 1 有1=(总层数-4)个空格
********* //第一层 有9个* 2 * 5 - 1 有0=(总层数-5)个空格
*数=2*当前层数-1
空格数=总层数-当前层数
public static void main(String[] args) {
for (int i=1;i<=5;i++){//i表示层数
// 在输出*之前,还要输出 对应空格 总层数-当前层数
for(int k=1;k<=5-i;k++){
System.out.print(" ");
}
// 控制打印* 数
for (int j=1;j<=i*2-1;j++){
System.out.print("*");
}
System.out.println();
}
}
运行结果:
*
***
*****
*******
*********
复杂:(空心金字塔)
* //第一层 有1个* 当前行的第一个位置是*,最后一个位置也是*
* * //第二层 有2个* 当前行的第一个位置是*,最后一个位置也是*
* * //第三层 有2个* 当前行的第一个位置是*,最后一个位置也是*
* * //第一层 有2个* 当前行的第一个位置是*,最后一个位置也是*
********* //第一层 有9个* 全部输出*
代码:
public static void main(String[] args) {
for (int i=1;i<=5;i++){//i表示层数
// 在输出*之前,还要输出 对应空格 总层数-当前层数
for(int k=1;k<=5-i;k++){
System.out.print(" ");
}
// 控制打印* 数
for (int j=1;j<=i*2-1;j++){
// 当前行的第一个位置是*,最后一个位置也是*,最后一行全部输出
if(j==1||j==2*i-1||i==5) {
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}
运行结果:
*
* *
* *
* *
*********
最后一步,先死后活:
5 层数做成变量 int num=5;
这样就可以随时改变金字塔的行数了
public static void main(String[] args) {
int num=5;
for (int i=1;i<=num;i++){//i表示层数
// 在输出*之前,还要输出 对应空格 总层数-当前层数
for(int k=1;k<=num-i;k++){
System.out.print(" ");
}
// 控制打印* 数
for (int j=1;j<=i*2-1;j++){
// 当前行的第一个位置是*,最后一个位置也是*,最后一行全部输出
if(j==1||j==2*i-1||i==num) {
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}