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));
}
}