循环结构
1.for循环
控制一段代码反复执行很多次
格式:
for(初始化语句;循环条件;迭代语句)f
循环体语句(重复执行的代码);}
2.for循环案例
需求:在控制台输出所有的“水仙花数”,水仙花数必须满足如下2个要求:
1.水仙花数是一个三位数
2
int count=0;
for(int i=100;i<=999;i++)
{
//个位
int ge=i%10;
//十位
int shi=i/10%10;
//百位
int bai=i/100;
if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
System.out.print(i+"\t");//\t是空格
count++;
}
}
System.out.println();//换行
System.out.println("水仙花个数为:"+count);
.水仙花数的个位、十位、百位的数字立方和等于原数
3.while循环
初始化语句;
while(循环条件){
循环体语句(被重复执行的代码);
迭代语句;}
4.for循环和while循环对比
功能上是完全一样的,for能解决的while也能解决,反之亦然。
使用规范是:知道循环几次:使用for;不知道循环几次建议使用:while。
for循环中,控制循环的变量只在循环中可以使用。while循环中,控制循环的变量在循环后还可以继续使用。
5.do-while循环
先执行再判断循环条件
初始化语句;
do {
循环体语句;
迭代语句;} while(循环条件); 注意:一定会先执行一次循环体
6.死循环案例
密码验证
需求:系统密码是520,请用户不断的输入密码验证,验证不对输出密码错误,验证成功输出欢迎进入系统,并停止程序。
分析:(1)使用while死循环,让用户不断输入数据
-
- 与密码比对:验证不成功输出错误密码
- 验证成功输出欢迎进入系统,并使用break结束当前循环
//1.定义正确的密码
int okpassword=520;
Scanner sc=new Scanner(System.in);
//2.定义一个死循环让用户不断输入密码验证
while(true){
System.out.println("请你输入正确的密码");
int password=sc.nextInt();
//3.使用if判断密码是否正确
if(password==okpassword){
System.out.println("登陆成功");
break;
}else{
System.out.println("密码错误");
}
}
7.break和 continue
break :跳出并结束当前所在循环的执行。
continue:用于跳出当前循环的当次执行,进入下一次循环。
注意:break :只能用于结束所在循环,或者结束所在switch分支的执行。
continue :只能在循环中进行使用。
8.案例:随机数Random类
作用:用于在程序中获取随机数的技术。
使用步骤:
(1)导包:告诉程序去JDK的哪个包中找随机数技术
(2)写一行代码代表得到随机数对象
(3)调用随机数的功能获取0-9的随机数
//1.导包
//创建随机数对象
Random rs=new Random();
//调用nextInt功能 可以返回一个整型的随机数
for (int i=0;i<10;i++) {
int data=rs.nextInt(10);//0-9不包含10
System.out.println(data);
}
-
Random生成随机数特点:
nextlnt(n)功能只能生成:0-(n-1)之间的随机数。
如果要生成1-10之间随机数
例子
Random r = new Random();
int number = r.nextInt(10)+ 1; //1-10
案例:
猜数字游戏:
需求:随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。
分析:(1) 随机生成一个1-100之间的数据
(2)使用死循环让用户不断提示用户猜测,猜大提示过大,猜小提示过小,猜中结束游戏。
//1.随机一个随机数 (0-99)+1
Random r=new Random();
int lucknumber=r.nextInt(100)+1;
//2.使用一个死循环 让用户去猜数据
Scanner SC=new Scanner(System.in);
while(true){
System.out.println("请你输入你要猜测的数据(1-100):");
int guessnumber= SC.nextInt();
//3.猜测的情况
if(guessnumber>lucknumber){
System.out.println("你猜测的数据过大");
} else if (guessnumber<lucknumber) {
System.out.println("你猜测的数据过小");
}else {
System.out.println("恭喜你,猜对啦,可以去买单了 ");
break;
}
}
数组
1.静态初始化数组
定义数组的时候直接给数组赋值。
//完整格式
数据类型[]数组名= new 数据类型[]{元素1,元素2,元素3...
double[] scores = new double[]{89.9,99.5,59.5,88.0};
int[] ages = new int []{12,24,36}
//简化格式
数据类型[]数组名= {元素1,元素2,元素3,} ;
int[] ages = {12,24,36};
注意:数组变量名中存储的是数组在内存中的地址,数组是引用类型。
数组的访问:
数组的长度属性:Length(数组元素的个数)数组长度:数组名称.length
赋值:数组名称[索引]=数据;
数组的最大索引可以这样表示:数组名.length-1//前提:元素个数大于0
数组的注意事项:
(1)“数据类型[数组名”也可以写成“数据类型数组名[]”
(2)什么类型的数组存放什么类型的数据,否则报错。
(3) 数组一旦定义出来,程序执行的过程中,长度、类型就固定了。
2.数组的动态初始化
定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据。
格式:
数据类型[]数组名 = new数据类型[长度];
int[]arr = new int[3];
然后再赋值
动态和静态数组的两种特点:
当前已经知道存入的元素值,用静态初始化。
当前还不清楚要存入哪些数据,用动态初始化。
动态初始化数组的元素默认值:
数据类型 明细 默认值 |
基本类型 byte、short、char、int、long 0 |
基本类型 float、double 0.0 |
基本类型 Boolean false |
引用类型 类、接口、数组、string null |
- 数组的遍历
遍历:就是一个一个数据的访问。
用for循环
例子:int[] ages = {20,30,40,50};
for (int i = e; i < ages. length; i++) {
system.out.println(ages[i]);}
- 数组的案例
猜数字游戏:需求
开发一个幸运小游戏,游戏规则如下:
游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:
未猜中提示:“未命中”,并继续猜测
猜中提示:“运气不错,猜中了”,并输出该数据第一次出现的位置,且输出全部5个数据,最后结束本游戏
分析:(1)随机生成5个1-20之间的数据存储起来--->使用数组
(2)定义一个死循环,输入数据猜测,遍历数组,判断数据是否在数组中,如果在,进行对应提示并结束
循环;如果没有猜中,提示继续猜测直到猜中为止。
//开发一个幸运小游戏,游戏规则如下:
//游戏后台随机生成1-20之间的5个数(无所谓是否重复),然后让大家来猜数字:开发一个幸运小游戏,游戏规则如下:
//1.定义一个动态初始化数组存储5个随机的1-20之间数据
int data[]=new int[5];
//2.生成5个1-20之间的随机数存到数组中
Random r=new Random();
for (int i = 0; i < data.length; i++) {
// i=0 1 2 3 4
data[i] =r.nextInt(20)+1;
}
//3.使用一个死循环让用户猜测
Scanner sc=new Scanner(System.in);
OUT:
while(true){
System.out.println("请你输入一个1-20之间的整数进行猜测:");
int guessdata=sc.nextInt();
//4.遍历数组的每个数据,看是否有数据与猜测的数据相同
for (int i = 0; i < data.length; i++) {
if(data[i]==guessdata){
System.out.println("恭喜你猜中了");
break OUT;//结束了整个死循环,代表游戏结束
}
}
System.out.println("当前猜测的数据在数组不存在,请重新猜测");
}
//5.输出猜中数据数组的全部数组,
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]+"\t");
}
随机排名:
某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。请先依次录入5名员工的工号,然后展示出一组随机的排名顺序。
分析:(1)在程序中录入5名员工的工号存储起来---〉使用数组。(2)依次遍历数组中的每个元素,随机一个索引数据,让当前元素与该索引位置处的元素进行交换。
//1.动态初始化一个数组,有五个工号
int codes[]=new int[5];
//2.定义一个循环,循环5次,依次录入一个工号对应的位置
Scanner sc=new Scanner(System.in);
for (int i = 0; i < codes.length; i++) {
//正式录入工号
System.out.println("请你输入第"+(i+1)+"个员工的工号");
int code= sc.nextInt();
//存入数据中去
codes[i]=code;
}
//3、遍历数组中的每个元素,然后随机一个索引出来,让该元素与随机索引位置处的元素值进行交换
Random r=new Random();
for (int i = 0; i < codes.length; i++) {
//当前遍历的元素值:codes[i]
int index=r.nextInt(codes.length);
//定义一个临时变量
int temp=codes[index];
codes[index]=codes[i];
codes[i]=temp;
}
//4.遍历数组元素输出就是随机排名的结果
for (int i = 0; i < codes.length; i++) {
System.out.print(codes[i]+"\t");
}