Day07循环语句、数组和内存分配

Day07

循环语句

for循环语句

格式:

for(初始化语句;条件判断语句;条件控制语句){

​ 循环体语句;

}

执行流程:

  1. 执行初始化语句

  2. 执行条件判断语句,判断结果是否为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出来的东西都有一个地址值,在使用完毕后,会在垃圾回收器空闲时被回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值