概念:嵌套循环
语法:
for(循环变量声明和初始化 1;循环条件 2;循环变量的变化 3){
语句块 4;
for(循环变量声明和初始化 5;循环条件 6;循环变量的变化 7){
循环体(语句块) 8;
}
语句块 9;
}
/**
1、循环变量声明和初始化 数字变量int i,初始化0,1; N
2、循环条件 i<[=]N;i>=0,1
3、循环变量的变化 i++,i+=N,i--,i-=x
4、循环体(语句块) 根据经验找【规律】
*/
/**
使用循环解决问题的步骤
1、审题确认重复是否存在(经验:唯有练习)
2、设计四要素并套用循环语法
3、检查循环是否正常结束
*/
练习
双层循环求水仙花数
public static void main(String[] args) {
//找出所有三位数的水仙花数
for (int i = 100,sum; i < 1000; i++) { //sum要使用很多次
sum = 0; //在此定义int sum = 0;就要被执行很多次;
for (int copy = i; copy >= 1; copy/=10) {
sum += Math.pow(copy%10,3);
}
if(sum==i){
System.out.println(i);
}
}
}
倒立直角三角形的对称图形输出
public static void main(String[] args) {
for (int row = 1; row <= 9 ; row++) {
for (int col = 1; col < row; col++) {
System.out.print(" ");
}
for (int col = 1; col <= 10-row ; col++) {
System.out.print("#");
}
System.out.println();
}
}
结果
输出等腰三角形
public static void main(String[] args) {
for (int row = 1; row <= 9; row++) {
for (int cols = 1; cols <= 9-row; cols++) {
System.out.print(" ");
}
for (int col = 1; col <= 2*row-1; col++) {
System.out.print("#");
}
System.out.println();
}
}
输出倒立等腰三角形
public static void main(String[] args) {
for (int row = 1; row <= 9; row++) {
for (int col = 1; col <= row - 1; col++) {
System.out.print(" ");
}
for (int col = 1; col <= 2 * (9 - row) + 1; col++) {
System.out.print("#");
}
System.out.println();
}
}
输出空心等腰三角形
public static void main(String[] args) {
for (int i = 1,t; i <=9 ; i++) {
for (int j = 1; j <=9-i ; j++) {
System.out.print(" ");
}
t=2*i-1; //第一列#排好后,第二列#分别在它第一个数的第3,5,7,9...位置上
for (int j = 1; j <=t ; j++) {
if (i==1||i==9||j==1||j==t){
System.out.print("#");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}
输出倒立空心等腰三角形
//空心三角形
public static void main(String[] args) {
for (int i = 1,t; i <=9 ; i++) {
for (int j = 1; j <=i-1 ; j++) {
System.out.print(" ");
}
t = 2*(9-i)+1;
//i=9,t=1;i=8,t=3;i=1,t=17 t为下一个#所在的位置(从第一个#开始数到第几个)
for (int j = 1; j <= 2*(9-i)+1; j++) {
if (i==1||j==1||i==9||j==t){
System.out.print("#");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}
输出菱形
//全局法
public static void main(String[] args) {
for (int i = -4; i <=4 ; i++) { //上(+4行)下(-4行),中间行为0
for (int j = 1; j <= Math.abs(i) ; j++) {
System.out.print(" "); //这样第几行就有几个空格了,看结果图分析
}
for (int j = 1; j <=9-2*Math.abs(i) ; j++) {
System.out.print("#");
}
System.out.println();
}
}
//2个等腰三角形相加法
public static void main(String[] args) {
for (int i = 1; i <=5 ; i++) {
for (int j = 1; j <=5-i; j++) {
System.out.print(" ");
}
for (int j = 1; j <=2*i-1 ; j++) {
System.out.print("#");
}
System.out.println();
}
for (int i = 1; i <=4 ; i++) {
for (int j = 1; j <=i ; j++) { //i=1,前面有1个空格,i=2,前面有2个空格...,看图分析
System.out.print(" ");
}
for (int j = 1; j <=2*(4-i)+1 ; j++) { //此时第一行7个,第二行5个,第三行3个,推规律
System.out.print("#");
}
System.out.println();
}
}
输出掏空菱形
//掏空菱形
public static void main(String[] args) {
for (int i = -4; i <=4 ; i++) { //此i=-4是图第一行,i=4是最后一行
for (int j = -4; j <= 4; j++) { //此j=-4是图第一列,i=4是最后一列
if (Math.abs(j)<4-Math.abs(i) ){ //j第3列,i=0,1,2行全是空格
System.out.print(" ");
}else{
System.out.print("#");
}
}
System.out.println();
}
}
输出一个沙漏图形
//全局法
public static void main(String[] args) {
for (int i = -4; i <=4 ; i++) { //上(+4行)下(-4行),中间行为0
int abs = Math.abs(i);
for (int j = 1; j <= 4 - abs; j++) { //第4行0空格,第3行1空格,第0行4空格
System.out.print(" ");
}
//先想象不看前空格的图形,计算每行有多少个#,推规律.第0行1个,第4行9个...
for (int j = 1; j <= 2 * abs + 1; j++) {
System.out.print("#");
}
System.out.println();
}
}
//叠加法
//沙漏
public static void main(String[] args) {
for (int i = 1; i <=5 ; i++) {
for (int j = 1; j <=i ; j++) {
System.out.print(" ");
}
for (int j = 1; j <=2*(5-i)+1 ; j++) {
System.out.print("#");
}
System.out.println();
}
for (int i = 1; i <=4 ; i++) {
for (int j = 1; j <=5-i; j++) {
System.out.print(" ");
}
for (int j = 1; j <=2*i+1 ; j++) {
System.out.print("#");
}
System.out.println();
}
}
输出一个空心沙漏
public static void main(String[] args) {
for (int i = -4,t; i <=4 ; i++) {
int abs = Math.abs(i);
for (int j = 1; j <=4-abs ; j++) {
System.out.print(" ");
}
t=2*abs+1; //t是另一个#的位置计数
for (int j = 1; j <=2*abs+1 ; j++) {
if(abs==4 ||j==1||j==t){ //第4行,第1列,另一个t在的列
System.out.print("#");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}
输出掏空沙漏
//掏空沙漏
public static void main(String[] args) {
for (int i = -4; i <= 4; i++) {
for (int j = -4; j <= 4; j++) {
if (Math.abs(j) > Math.abs(i) || Math.abs(i) == 4) {
System.out.print("#");
} else {
System.out.print(" ");
}
}
System.out.println();
}
}