Day07
循环语句
for循环语句
格式:
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
执行流程:
-
执行初始化语句
-
执行条件判断语句,判断结果是否为true
若结果是false,则循环结束。
若结果是true,则继续执行
3.执行循环体语句
4.执行条件控制语句
5.回到2继续执行
Demo:获取所有水仙花数
public class ForDemo3 {
//输出所有的水仙花数
/*
水仙花数是一个三位数(的数字,且三位数的个位数十位数和百位数的立方和为原数。
难点:分别得到三位数的个位十位以及百位
通过整除和取余操作得到
如要得到123的个位数:通过 123 % 10 = 3;
得到123的百位数: 通过 123 / 100 = 1;
得到123中间的十位数: 通过 123 / 10 =12,再 12 % 10 =2 得到。
若要得到12345678中的5 则12345678/1000=12345,再12345%10=5。
* */
public static void main(String[] args) {
int a = 0;
int b = 0;
int c = 0;
int sum = 0;
for(int i=100; i<=999; i++) {
a = i % 10;
b = i / 10 % 10;
c = i / 100;
sum = a*a*a + b*b*b + c*c*c;
if(sum == i) {
System.out.println(i);
}
}
}
}
while循环语句
初始化语句
while(条件判断语句){
while(条件判断语句){
循环体语句;
条件控制语句;
}
执行流程:
1.执行初始化语句
2.执行条件判断语句
若为falsle则循环结束
若为true则继续执行
3.执行循环体语句
4.执行条件控制语句
5.回到2继续执行。
Demo:
public class WhileDemo1 {
public static void main(String[] args) {
//纸张厚度为0.1毫米,珠峰高度为8844.43米=8844430毫米,求纸张折叠多少次能达到珠峰的高度。
double thick = 0.1;
int count = 0;
while(thick <= 8844430){
thick = thick * 2;
count++;
}
System.out.println("需要折叠次数为:"+count);
}
}
可以明确执行次数的用for循环,不明确次数的用while循环。
do…while循环语句
格式:
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句)
执行流程:
1.执行初始化语句
2.执行循环体语句
3.执行条件控制语句
4.执行条件判断语句
若为false则循环结束
若为true则继续执行
5.回到2继续执行
三种循环语句的区别
三种循环的区别:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DyJ4Umug-1606312913889)(C:\Users\LL\AppData\Local\Temp\1606289706420.png)]
for循环和while循环:
for(int =1; i<3; i++){
循环语句
}
System.out.println(i);//报错
int j = 1;
while(j<3){
循环语句;
j++;
}
System.out.println(j);//输出j的值
for循环中的i是属于for循环内部,所以在循环外部不能继续使用
while循环中的j不属于while内部,所以可在循环外部使用。
死循环的三种格式:
for(;;😉{}
while(true){}
do{}while(true)
跳转控制语句
continue:用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一下的执行。
break:用在循环中,基于条件控制,终止循环体内容的执行,结束当前循环的每个环节。
Random
demo:猜数字
import java.util.Random;
import java.util.Scanner;
public class RandomDeom {
//猜1-100的随机数
/*
tips:随机数;数据输入;if...else if ...else 语句比较;while循环(死循环)。
*/
public static void main(String[] args) {
Random r = new Random();
int number = r.nextInt(100) + 1;
while(true){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要猜的数字:");
int guess_number = sc.nextInt();
if (guess_number < number){
System.out.println("你猜小了:(");
}else if (guess_number > number){
System.out.println("你猜大了:(");
}else{
System.out.println("你猜对了:)");
break;
}
}
}
}
数组
int[] arr = new int[3];
System.out.println(arr);//输出数组名
System.out.println(arr[0]);//输出系统默认初始值0
System.out.println(arr[1]);//输出系统默认初始值0
System.out.println(arr[2]);//输出系统默认初始值0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PjkTSmFH-1606312913903)(C:\Users\LL\AppData\Local\Temp\1606308545697.png)]
arr代表的是数组名,是个变量,存储在栈内存。
int[3]是new出来的内容,存储在堆内存。
数组动态初始化
数据类型[] 数组名 = new 数据类型[数组长度];
例如:
int[] arr = new arr[3];
系统为存储空间添加默认值0,所以在未进行手动赋值的情况下,arr[0]、arr[1]、arr[2]的值都为0。
数组静态初始化
数据类型[] 数组名 = new 数据类型[]{数据1,数据 2,数据3,…,};
例如:
int[] arr2 = new arr[]{1,2,3};
在new arr[]的中括号中即使你知道数组的长度也不能输入数组的长度。
简化格式:数据类型[] 数组名 = {数据1,数据 2,数据3,…,};
***int[] arr3 ={1,2,3}***;
数组操作常见的小问题
package JavaStudy;
/*
索引越界;访问了数组中不存在的索引和对应元素,导致索引越界的问题。
ArrayIndexOutOfBoundsException
空指针异常:访问的数据已经不指向堆内存的数据,造成空指针异常。
NullPointerException
*/
public class ArrayException {
public static void main(String[] args) {
int[] arr = new int[2];
// System.out.println(arr[2]);
// arr = null;
System.out.println(arr[1]);
}
}
Java内存分配
栈内存:存储局部变量的值
定义在方法中的变量,如arr,在***使用完后立即消失***。
堆内存:存储new出来的内容(实体、对象)
数组在初始化时,会为存储空间添加默认值。
整数:0
浮点数:0.0
布尔类型:false
字符:空字符
引用数据类型:null
每一个new出来的东西都有一个地址值,在使用完毕后,会在垃圾回收器空闲时被回收。