7.数组、运行流程和二维数组

数组:

注意事项:

1.可存储比  数组类型  更小的值

例如:

double[] a = {1 , 2 , 3 , 1.2 , 1.3 , 2.2 ,4}

short[] b = {1 , 2 , 'a' ,'我'}

2.数组和变量一样,在使用前必须赋值(初始化),否则报错

int[] a ;

sout(a)  →  报错

初始化:在内存中,为数组容器开辟空间,并将数据存入容器的过程

动态初始化: 

int[]  a = new int [6]

各数据类型的默认值

数据类型

默认值

整数

0

浮点数0.0
布尔false
字符空字符
引用数据类型null

java中内容分配:

栈内存:方法运行时,进入的内存,局部变量都在于此

堆内存:new出来的内容都会进入堆内存,并都会被赋予地址值

方法区:字节码文件(.class文件)加载时进入的内存,各类方法也会进入此处,但运行是在栈内存

本地方法栈:调用系统相关资源

寄存器:交给cpu去使用

运行的流程:

创建并写好了某个类,例如类名叫:Demo3.java

方法区 →栈内存 →堆内存

方法区:

Demo3.java → jvm编译后 →Demo3.class →字节码文件加载进方法区中,且main方法存放在字节码文件中 →main方法被jvm自动调用,进入栈内存执行 

栈内存:

执行main方法,new的变量会被赋予地址值

堆内存:

存放new出来的内容,且有地址值

注意:可以 多个数组 指向同一个堆内存地址

int[] arr1 = new int [2]

int[] arr2 = arr1;

静态初始化:

int[] arr = new int[]{1 , 2 , 3}

简化:int[] arr =  {1 , 2 , 3}

注意这里的简化也是new了一个堆内存空间

如何证明arr有没有在堆内存new地址?

直接sout(arr),若出现地址值,则new了一个地址

遍历用循环

动态获取数组元素个数:数组名.length

案例:

数组找最值

数组求和

数组的索引查找

评委评分

数组找最值

package package1;

public class c0 {
    public static void main(String[] args) {
        int[] a = {1,2,6,5,8,7};

        int max = a[0];//这里直接假设数组第一个为最大值
        for (int i = 1; i < a.length; i++) {//数组的第一个(索引0)就不用比对,直接从索引1开始
            if (a[i]>max){//不要用a[0],不然一直跟索引0比对,得出的只有最后一位数,只能跟max比对
                max = a[i];
            }
        }

        System.out.println(max);
    }
}

数组求和

package package1;

import java.util.Scanner;

public class c1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[] all = new int[5];

        for (int i = 0; i < all.length; i++) {
            System.out.println("请输入第"+(i+1)+"个数据");
            int shuju = scanner.nextInt();
            all[i]=shuju;
        }

        System.out.println("结果为");
        System.out.print("[");
        for (int i = 0; i < all.length ; i++) {
            if (i<all.length-1) {
                System.out.print(+all[i] + ",");
            }else {
                System.out.println(all[i]+"]");
            }
        }

        System.out.println("数组求和结果:");
        int acount =all[0];
        for (int i = 1; i < all.length; i++) {
            acount += all[i];
        }
        System.out.println(acount);

    }
}

数组的索引查找

package package1;

import java.util.Scanner;

public class c2 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        Scanner scanner = new Scanner(System.in);


        while (true) {
            System.out.println("请输入要查询的数据(-2退出)");
            int sj = scanner.nextInt();
            int index = -1;

            for (int i = 0; i < arr.length; i++) {
                if (arr[i] == sj) {
                    index = i;
                    System.out.println("索引值为:"+index);
                    break;
                }
            }

            if (sj == -2) {
                break;
            } else if (index == -1) {
                System.out.println("您输入的数据不存在,请重新输入");
            }
        }
    }
}

评委评分

package package1;

import java.util.Scanner;

public class c3 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int[] all = new int[6];
        //
        System.out.println("一共6位评委");

        for (int i1 = 0; i1 < all.length; i1++) {
            System.out.println("请第" + (i1 + 1) + "位评委输入评分(1-100分)");
            int sc = scanner.nextInt();

            if (sc >= 0 && sc <= 100) {
                all[i1] = sc;
            } else {
                System.out.println("您输入的分数有误,请重新输入");
                i1--;
            }
        }


        int max = all[0];

        for (int i = 1; i < all.length; i++) {
            if (all[i] > max) {
                max = all[i];
            }
        }

        int min = all[0];
        for (int i = 1; i < all.length; i++) {
            if (all[i] < min) {
                min = all[i];
            }
        }


        int acount = 0;
        for (int i = 0; i < all.length; i++) {
            acount += all[i];
        }

        System.out.println("最终结果:");
        for (int i = 0; i < all.length; i++) {
            System.out.println(all[i]);
        }
        System.out.println("-----------");
        System.out.println("最大分数为" +
                ":"+max);
        System.out.println("最小分数为:"+min);
        System.out.println("总分为:"+acount);
        System.out.println("最终计算分数为:"+(acount - max - min));

    }
}

二维数组:

含义:是放多个一维数组的容器

格式:int[][] arr

动态初始化:int[][] arr = new int[3][2]  (3表示可以存放几个一维数组,2表示每个一维数组能存几个元素)

静态初始化:int[][] arr = {{1,2,3},{2,3,4}}(也可以写成{arr1,arr2})

注意:

int[][] arr1  ={11,22,33}

int[][] arr2 = {22,33,44,100}

int[][] arr = new int[2][3]

a[1] = arr2 (运行成功!赋的是地址值,且可以访问到)

sout(a[1][3])=100

a[0][3] = 100 (运行报错!此处赋的是元素值,在0这个一维数组里创建的堆内存空间只有3个,所以访问不到第四个)

遗留的疑问:

1.如何判断评分  只能输入数字,而不是其他的数字例如 ‘9-’或字符等?

2.jvm虚拟机 再细节的运行流程 后续需要继续深入学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值