JAVA 嵌套for循环 while do-while

1.for循环案例

1.1 打印左边直角三角形案例
package com.ban;
/*打印左边直角三角形*/
public class Day5Demo {
	public static void main(String[] args) {
		
		for(int a = 1;a <= 6;a++) {    //外层循环决定行数
			for(int b = 1;b <= a;b++) {   //内层循环决定列数
				System.out.print("*");
			}
			System.out.println();   //此行为使打印的**换行
		}	
	}
}
1.2 99乘法表案例
package cn.tedu.review;
/*本类用于打印99乘法表*/
public class TestFor99Excel {
	public static void main(String[] args) {
		
		for(int i = 1;   i <= 9   ;i++) {    //外循环控制行数
			
			for(int j = 1;  j <= i   ;j++) {   //内循环控制列数
				
				System.out.print(j+"*"+i+"="+(j*i)+"\t");
				//  \t表示制表符
			}
			System.out.println();  //使打印的算式换行
		}		
	}
}

2.break与continue

2.1 break

遇到break时直接结束当前循环体,break后面的循环体语句不会再运行,但循环体外会执行。

注意:如果是嵌套for循环,在内层循环遇到了break,只会跳出当前这一层内循环。

for (){
               代码1
        if(条件){
               代码3
               break;  //如果遇到break,则直接跳出这个for循环,执行循环体外接下来的代码
               代码4
        }
        代码2
    }
2.2 continue

遇到continue后跳出本轮循环,继续下一轮。

for (){
               代码1
        if(条件){
               代码3
               continue;  //如果成立,则直接略过本轮for循环后面的代码,进入下一轮
               代码4
        }
        代码2
    }

2.3 测试案例

package cn.tedu.review;

import java.util.Scanner;

/*本类用于测试break和continue*/
public class TestBreakAndContinue {
	public static void main(String[] args) {
		for (int i = 1;i <= 100;i++) {
			System.out.println("请输入您想猜的数字:");
			int input = new Scanner(System.in).nextInt();
			
			if(input !=88) {
				continue;    //本轮循环体中的语句不会继续执行,但是会继续执行下轮循环
			}
			/**break与continue之后不能直接写代码,之后的都是不可到达的代码*/
			/**注意:不管是加不加continue,都可以在猜不对的情况下继续猜
			 * 只不过在加了continue以后效率更高
			 * 只要猜的不是88,就不执行本轮循环中continue后面的代码
			 * 直接进行下一轮的猜数字即可*/
			if (input == 88) {
				System.out.println("恭喜您!猜对了!");
				break;   //猜对了就直接结束整个循环,后面的轮数都不再执行      
			}			
		}
	}
}

3.while循环结构、do-while循环结构

3.1 while循环结构

while循环结构是先判断,后执行。

while循环格式:

while (执行条件){
        
            循环体;   
    }
3.2 do-while循环结构

先执行,再判断,循环体代码能保证最少执行一次。

do-while循环格式:

do {
        
           循环体;
        
    }while(执行条件);
3.3 猜数字案例练习
package cn.tedu.review;

import java.util.Random;
import java.util.Scanner;

/*本类用于练习while循环和do-while循环*/
public class TestWhile_doWhile {
	public static void main(String[] args) {
		createNum();   //调用生成随机数的方法
		int r = createNum();
		System.out.println(r);
		
		guessNumber1(r);  //使用while循环猜数字
		//guessNumber2(r);  //使用do-while循环猜数字
	}

	/*
	 * private static void guessNumber2(int r) { // do { System.out.println("猜猜看");
	 * int input = new Scanner(System.in).nextInt();
	 * 
	 * if(input > r) { System.out.println("猜大了,往小猜"); }else if(input < r){
	 * System.out.println("猜小了,往大猜"); }else if(input == r) {
	 * System.out.println("恭喜您,猜对了!"); break; //死循环需要设置程序出口 } }while(true); }
	 */
    
	private static void guessNumber1(int r) {
		//1.写一个死循环
    	while(true) {   /**死循环,还需注意要设置程序出口!!!*/
    		//2.提示并接收用户猜的数字
    		System.out.println("猜猜看");
    		int input = new Scanner(System.in).nextInt();
    		
    		if(input > r) {
    			System.out.println("猜大了,往小猜");
    		}else if(input < r){
    			System.out.println("猜小了,往大猜");
    		}else if(input == r) {
    			System.out.println("恭喜您,猜对了!");
    			break;  //死循环需要设置程序出口
    		}
    	}		
	}
	
	//创建一个让程序生成随机数的方法
	private static int createNum() {
		//import java.util.Random;  注意导包
		//让程序产生一个随机数,且为一个整数
		
		int rendom = new Random().nextInt(100);
		return rendom;
	}
}

注:以上注释掉的do-while其实功能和while一样,都是写死循环,只是;两种循环的结构不一样。但写死循环时必须给程序设置出口!!!

三种循环的区别:

1)for循环:知道要循环的次数时使用

2)**while / do-while循环:**当循环的次数不确定时使用

while:先进行判断,不符合条件则不执行代码

do-while:代码最少被执行一次,再去判断,符合则执行,不符合则结束。

3)循环之间都可以相互代替,但一般还是选择 合适的循环结构来完成代码。

4.数组

数组词为Array,标志是[ ],是用于存储多个相同类型数据的集合。数组的下标是从0开始,使用数组中的元素值是通过下标来获取(如下所示),下标的最大值是数组长度减1。

4.1 创建数组

创建数组一般分为动态初始化和静态初始化。

int[] a = new int[5];    //动态初始化  系统会自动赋予对应数据类型默认的值
    /*int[5]表示的是这个数组的长度为5,是用来存放数据,并非值*/

    int[] b = new int[]{1,2,3,4,5}; //静态初始化
    int[] c = {1,2,3}                //静态初始化

1.数组名是引用类型的变量,它保存的是数组的地址,并非数据

2.数组完成初始化会分配一个唯一的地址值,把这个唯一的地址值交给引用类型的变量取保存。

3.数组的长度一旦定义将不可改变!!!

4.2 数组的长度

数组的长度用length属性来表示,数组长度允许为0。

4.3 数组案例

向数组中存入“hello”

package cn.tedu.array;

import java.util.Arrays;

/*数组*/
public class TestCreateArray {
	public static void main(String[] args) {
		//创建数组
		//静态创建--已知道具体数据
		char[] a = {'h','e','l','l','o'};
		char[] b = new char[] {'h','e','l','l','o'};	
		
		//动态创建---知道数组的长度,后续再动态赋值
		char[] c = new char[5];
		/**我们通过数组下标来操作数组的元素,
		 * 数组下标从0开始,最大下标是数组的长度减1
		 * */
		c[0] = 'h';   
		c[1] = 'e';
		c[2] = 'l';    //给数组内元素赋值
		c[3] = 'l';
		c[4] = 'o';
		
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
		System.out.println("=================");
		
		/**
		 * char类型底层做了处理,可以直接打印数组中具体的元素内容
		 * 除了char类型以外的其他类型的数组,想要查看具体的元素内容
		 * 需要使用数组的工具类Arrays的toString(数组名)方法
		 * 注意:Arrays使用时需要导包,import java.util.Arrays;
		 * 
		 * */
		
		String[] i = {"a","b","c"};
		System.out.println(i);   
		//打印出了:[Ljava.lang.String;@15db9742
		System.out.println(Arrays.toString(i));
		//打印出:[a, b, c]
		
		//查看数组的长度
		System.out.println(a.length);
		System.out.println(b.length);
		System.out.println(i.length);
	}
}

注:1.除了char类型以外的其他类型的数组,想要查看具体的元素内容,需要使用数组的工具类Arrays的 toString(数组名)方法

2. Arrays使用时需要导包,import java.util.Arrays;

4.4 数组的遍历

数组遍历:从头到尾,依次访问数组的每一个位置,并且获取每个位置的元素。

从哪开始:从下标0开始

到哪结束:到下标 length-1 结束

如何变化:下标++

格式:

for (下标0;下标的取值 <= 数组长度-1;下标++)
    for(int a = 0; a <= length-1;a++)

案例:输出每个月的天数

package cn.tedu.array;
/*本类用于练习数组的遍历*/

//输出一年中每个月的天数
public class TestArrayExec {
	public static void main(String[] args) {
		 //创建一个数组存放每个月的天数
		int[] month = {31,28,31,30,31,30,31,31,30,31,30,31} ;
		//输出每个月的天数打印
		//for循环:从哪儿开始------->到哪儿结束-------->如何变化
		/**数组:从哪儿开始(下标0)--->到哪儿结束(month(数组名) .length-1  数组最大长度-1)---->如何变化(++)  */
		for (int a = 0;a <= month.length-1;a++) {
			
			//System.out.println(a);  //打印的是数组下标
			System.out.println((a+1)+"月有"+month[a]+"天");	
		}		
	}
}

案例:练习向数组中动态赋值

package cn.tedu.array;

import java.util.Arrays;

/**本类用于练习向数组中动态赋值*/
public class TestArray2 {
	public static void main(String[] args) {
		
		int[] a = new int[10];  //创建一个动态数组
		//可以通过for循环遍历数组,依次给数组的每个位置上的元素赋值
		
		/**我们通过数组下标来操作数组中具体的元素
		 * */
		for(int i = 0;i <= a.length-1;i++) {
			//System.out.println(a[i]);    //会打印默认值0
			a[i] = i + 1;
		}
		System.out.println(a);	//会打印地址值
		System.out.println(Arrays.toString(a));//查看数组中具体元素的值
	}
}

测试数组工具类Arrays 练习Arrays.sort

package cn.tedu.array;

import java.util.Arrays;

/*本类用于测试数组的工具类Arrays*/
public class TestArray3 {
	public static void main(String[] args) {
		//创建一个无序数组
		int[] a = {34,78,89,199,2,70};
		//把数组a传给排序方法sort()
		Arrays.sort(a);   //对数组a进行排序
		//打印排序好的数组
		System.out.println(Arrays.toString(a));
	}
}