break,continue,while,do while,数组
一、break,continue
break和continue
break: 直接结束当前循环,如果在内层循环,只跳出内层,还会执行外层
continue: 结束本轮循环中continue后面的代码,直接开始下一轮循环
TIPS: break与continue后面不能直接写代码,都是不可到达的代码
我们来做一小案例就能明白其作用;案例需求:找数字88,如果不是88,就继续输入,如果找到88,就结束
我们还是直接上代码:
package cn.tedu.study1;
import java.util.Scanner;
//本类用于测试break和continue
//需求:找数字88,如果不是88,就继续输入,如果找到88,就结束
public class Day05TestBreakAndContinue {
//1,创建程序的入口函数main
public static void main(String[] args) {
//2.创建一个循环,执行100次,100是自己自定义的,多少都行
for(int i = 1 ; i <101 ; i++) {
//3.提示并接收用户猜的数字
System.out.println("请输入您想猜的数字");
int input = new Scanner(System.in).nextInt();
//4.判断用户输入的是否正确
if(input != 88) {//用户猜的不是88
continue;//直接跳过本轮continue后面的代码,开始下一轮
//System.out.println("");//Unreachable code
}
/**注意:不管是加不加continue,都可以在猜不对的情况下继续猜
* 只不过在加了continue以后效率更高
* 只要猜的不是88,就不执行本轮循环中continue后面的代码
* 直接进行下一轮的猜数字即可
* */
/**break与continue后面不能直接写代码,都是不可到达的代码*/
System.out.println("我是用来测试continue后边的代码有没有执行");
if(input == 88) {//用户猜的是88
System.out.println("恭喜您!猜对了!");
break;//猜对了就结束整个循环,后面的轮数都不执行
//System.out.println();//Unreachable code
}
}
}
}
如果输入的数字不是88则会继续让用户去猜。
当我们输入88后:
二、 while,do while
while :循环,先判断,后执行
while(条件){满足条件执行的循环体 }
do-while 循环,先执行一次,再判断,如果符合条件,开始第二轮循环,不符合,结束
do{ 循环体 }while(条件);
TIPS:我们可以设置死循环,一定注意:死循环一定要设置出口
案例:让电脑产生一个随机数,然后用户去猜,并且会根据用户的数的大小提示猜大了还是猜小了。
首先我们要了解一下怎么让电脑产生一个随机数,
private static int careateNum() {
//随机产生一个100以内的数
int random = new Random().nextInt(100);
return random;
}
这里nextInt(100),括号里的100就是控制产生一个100以内的随机数,当然我们用这种方法就要导包import java.util.Random;
这里这个案例使用到自定义方法的形式,所以通过这种方式我们可以,更直观的了解到代码的组成部分。下边是使用while的代码:
package cn.tedu.study1;
import java.util.Random;
import java.util.Scanner;
//本类用于练习while循环和do-while循环
//需求:产生一个随机数,和用户一直输入的数字作比较,直到用户猜对
public class Day05TestWhileAndDoWhile {
public static void main(String[] args) {
int m=careateNum();//调用生成随机数
guessNumber1(m);//while
}
private static void guessNumber1(int m) {
//创建一个死循环
while(true) {
//提示用户输入猜想的数
System.out.println("猜猜看~");
int input =new Scanner(System.in).nextInt();
if(input<m) {
System.out.println("猜小了");
}else if(input>m){
System.out.println("猜大了");
}else if(input==m) {
System.out.println("猜对了");
break;//一定注意设置出口
}
}
}
private static int careateNum() {
//随机产生一个100以内的数
int random = new Random().nextInt(100);
return random;
}
}
下边是使用do while写的代码:
package cn.tedu.study1;
import java.util.Random;
import java.util.Scanner;
//本类用于练习while循环和do-while循环
//需求:产生一个随机数,和用户一直输入的数字作比较,直到用户猜对
public class Day05TestWhileAndDoWhile {
public static void main(String[] args) {
int m=careateNum();//调用生成随机数
guessNumber2(m);//do-while
}
private static void guessNumber1(int m) {
//创建一个死循环
while(true) {
//提示用户输入猜想的数
System.out.println("猜猜看~");
int input =new Scanner(System.in).nextInt();
if(input<m) {
System.out.println("猜小了");
}else if(input>m){
System.out.println("猜大了");
}else if(input==m) {
System.out.println("猜对了");
break;//一定注意设置出口
}
}
}
private static int careateNum() {
//随机产生一个100以内的数
int random = new Random().nextInt(100);
return random;
}
}
三、数组
1、数组的创建
数组是用来存放多个相同类型的值的结构
数组需要开辟连续的内存空间,数组定义时,需要明确数组类型和长度
数组名保存的是数组是数组的地址值,是一个引用类型变量!!!!!!
例如数组char[] a= {'h','e','l','l','o'};
h的地址就是a[0],数组的地址是从0开始的
数组的定义方式有两类:
1)静态创建–知道具体的元素值
2)动态长度–知道长度,后续需要动态的赋值
除了char类型的数组以外,其他类型的数组需要使用数组工具类Arrays的toString()
我们运用不同的方式定义数组,来展示他们的定义方法:
package cn.tedu.study1;
import java.util.Arrays;
//数组的创建
public class Day05TestCreateArray {
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开始,最大下标是数组的长度减一
*/
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);
//创建一个Sting类型的数组
/**
* char类型底层做了处理,可以直接打印数组中具体的元素内容
* 除了char类型以外的其他类型的数组,想要查看具体的元素
* 需要使用数组的工具类Arrays的toString(数组名)方法
* 注意:Arrays使用时需要导包:java.util.Arrays
*/
String[] s= {"a","b","c","d"};
System.out.println(Arrays.toString(s));
//查看数组的长度--数组中存放的元素的个数
System.out.println(a.length);
System.out.println(s.length);
}
}
2、数组的遍历
数组的遍历有什么用?最主要的用途是“比较”。
遍历数组中所有的元素,进行比较,得到需要的元素(索引、指针等);
我们来展示一下数组的遍历使用:
package cn.tedu.study1;
import java.util.Arrays;
//数组的创建
public class Day05TestCreateArray {
public static void main(String[] args) {
m();
}
private static void m() {
int[] f= {31,28,31,30,31,30,30,31,30,31,30,31};
for(int a=0;a<f.length;a++) {
System.out.println("第"+(a+1)+"个月有"+f[a]+"天");
}
}
}
我们运行后的结果是:
3、数组的动态赋值
遍历数组,存入1~10;
package cn.tedu.study1;
import java.util.Arrays;
//本类用于练习向数组中动态赋值
public class Day05TestCreateArray2 {
public static void main(String[] args) {
//创建一个数组
int[] a = new int[10];//动态创建,只指定长度10
//我们可以已通过for循环遍历数组,依次给数组的每个位置上元素赋值
//我们通过数组的下标来操作数组中的具体元素
for(int m=0;m<a.length;m++) {
a[m]=m+1;//在每轮循环中给数组的具体元素赋值
}
System.out.println(a);//打印的是一个地址值
System.out.println(Arrays.toString(a));//查看数组中具体元素的值
}
}
3.1 练习使用数组工具类Arrays
练习Arrays.sort(数组)
对数组进行排序,对于基本类型的数组使用的是优化后的快速排序算法,效率高
对引用类型数组,使用的是优化后的合并排序算法
package cn.tedu.study1;
import java.util.Arrays;
//本类用于练习向数组中动态赋值
public class Day05TestCreateArray2 {
public static void main(String[] args) {
int [] n = {10,20,48,32,28,89};
System.out.println("排序前:"+Arrays.toString(n));
Arrays.sort(n);//特点,先排序,覆盖原有数组(原有值被改变),升序
System.out.println("排序后:"+Arrays.toString(n));
}
}
控制显示:
Arrays还能够进行数组的扩容,缩容。如果我们定义一个数组b,长度为5
数组的扩容:
int[] length = Arrays.copyOf(b,10);
System.out.println(Arrays.toString(length));
数组的缩容:
int[] length = Arrays.copyOf(b,3);
System.out.println(Arrays.toString(length));
最后就是Arrays还可以截取数组中某段地址的值:
截取数组的某段值,指定的是数组的下标,左闭右开,含头不含尾。
int[] length = Arrays.copyOfRange(b,3,5);
System.out.println(Arrays.toString(length));