java学习笔记day04-IDEA-数组

Day04

IDEA
  • 项目层级关系
    • project-module-package-class
  • 小结
    • project中可以创建多个module
    • module中可以创建多个package
    • package中可以创建多个class
  • 这些结构的划分是为了方便管理类文件的。
  • 常用快捷键
    • psvm+回车:快速生成main方法
    • sout+回车:快速生成输出语句
    • alt+1:打开/隐藏工程目录结构
    • alt+4:打开/隐藏控制台
    • Ctrl+alt+L:格式化代码
    • alt+enter:代码修正提示
    • Ctrl+D:向下复制一行
    • Ctrl+X:剪切当前行
    • Ctrl+/:批量加入单行注释,再按一次就是取消
    • Ctrl+shift+/:批量加入多行注释,再按一次就是取消
    • Alt+shift+up键:上移代码
    • Alt+shift+down键:下移代码
    • 数字.fori:自动生成for循环
数组

​ 数组是一种容器,用来存储(同种数据)的多个值。

总结:数组容器在存储数据的时候,需要结合数据类型考虑。

​ 建议:容器的类型,和存储的数据类型保持一致。

定义格式:
  • 格式一:数据类型[] 数组名; eg: int[] arr;
  • 格式二:数据类型 数组名[]; eg: int arr[];
数组初始化
  • 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值

    • 格式:数据类型[] 变量名 = new 数据类型[数组长度];eg:int[] arr = new int[10];
    • 注:打印数组变量的时候,会打印出数组的内存地址。
  • 数组的元素访问格式:

    ​ 数组名[索引]

    • 索引:数组中数据的编号方式,编号从0开始

    • 作用:访问数组容器中的空间位置

    • 注:数组在创建完毕后,即使没有赋值,也可以取出数组的默认值。

  • 静态初始化:初始化时,就可以指定数组要存储的元素,系统还会自动计算出该数组的长度;

    • 格式:数据类型[] 变量名 = new 数据类型[]{数据1,数据2,…}; eg: int[] arr = new int[]{1,2,3};
    • 简化格式:数据类型[] 变量名 = {数据1,数据2,…}; eg: int[] arr = {1,2,3};

注:

int[] arr = 只指定长度,java会给默认值;
int[] arr = 只指定元素,java会自动计算长度;  //不能即指定长度,有指定元素
//注意:简写格式,只允许在创建数组的时候使用,修改数组的时候不能使用;
使用场景
  • 动态初始化:只明确元素个数,不明确具体数值,推荐使用动态初始化;

  • 静态初始化:需求中已经明确了要操作的具体数据,直接静态初始化即可;

数组操作的两个常见小问题
  • 索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题
  • 空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常
  • null:空值,引用数据类型的默认值,表示不指向任何有效对象
数组遍历
public class TestArray {
    public static void main(String[] args) {
        int[] arr = {11,68,27};
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {  //正向遍历,快捷键:数组名.fori
            System.out.println(arr[i]);  //通过索引,循环遍历数组中的数据
        }
        System.out.println("---------------");
        for(int i=arr.length-1;i>=0;i--){   //逆向遍历,快捷键:数组名.forr
            System.out.println(arr[i]);
            sum += arr[i];
        }
        System.out.println("---------------");
        System.out.println("sum="+sum);
    }
}

结果:
在这里插入图片描述

数组求最值
/*
    1.假设数组中的第一个元素为最大值
    2.遍历数组,获取每一个元素,准备进行比较
    3.如果比较的过程中,出现了比max更大的,让max记录更大的值
    4.循环结束后,打印最大值
* */
public class TestArray {
    public static void main(String[] args) {
        int[] arr = {11,68,27,39,64,99};
        int max = arr[0];
        int min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>max){
                max=arr[i];
            }
            if(arr[i]<min){
                min=arr[i];
            }
        }
        System.out.println("最大值为:"+max);
        System.out.println("最小值为:"+min);
    }
}

结果:
在这里插入图片描述

数组求和
import java.util.Scanner;
public class TestArray {
    public static void main(String[] args) {
        int[] arr = new int[5];
        int sum = 0;
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 5; i++) {
            System.out.print("请输入第"+(i+1)+"个数:");
            arr[i] = sc.nextInt();
        }
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        System.out.println("数组中所有数之和为:"+sum);
    }
}

结果:
在这里插入图片描述

数组查找
import java.util.Scanner;
public class TestArray {
    public static void main(String[] args) {
        int[] arr = {12,64,33,45,27,78};
        int index = -1;  //定义一个索引并初始化
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入你要查找的值:");
        int serchNum = sc.nextInt();
        for (int i = 0; i < arr.length; i++) {
            if(serchNum==arr[i]){
                index=i;  //遍历数组,若要查找的值与数组中的值相等,则将该值的索引赋值给index
            }
        }
        if(index==-1){
            System.out.println("你要查找的数不存在。");
        }else{
            System.out.println("你要查找的数的索引为:"+index);
        }
    }
}

结果:
在这里插入图片描述
在这里插入图片描述

案例:评委打分
import java.util.Scanner;
public class Demo1Array {
    public static void main(String[] args) {
        double[] arr = new double[6];   //定义长度为6的double型数组,存储6位评委的评分
        double score;  //定义评分score变量
        Scanner sc = new Scanner(System.in);
        for(int i=1;i<7;i++){
            System.out.print("请输入第"+i+"位评委的打分:");
            score = sc.nextInt();  //接受评委评分
            if(score>100|score<0){   //判断评分是否符合标准
                System.out.println("您输入的评分有误,请重新输入。");
                i--;  //评分有误,i-1回到for循环i+1,则i还是原值,达到重新输入的效果
            }else{
                arr[i-1]=score;   //将平分存储入数组
            }
        }
        double sum = arr[0];
        double max = arr[0];
        double min = arr[0];
        //循环遍历数组,得出数组中的最大值和最小值,并求出数组中数的和
        for(int i=1;i<arr.length;i++){
            sum += arr[i];
            if(max<arr[i]) {
                max = arr[i];
            }
            if(min>arr[i]){
                min = arr[i];
            }
        }
        double avg = (sum-max-min)/4;   //去掉最大值和最小值后的平均分
        System.out.println("平均评分为:"+avg);
    }
}

结果:
在这里插入图片描述
在这里插入图片描述

练习1

需求:假如小明今年第1季度的三个月中的营业额分别是{5,10,15},第二季度他计划要把第1季度中每个月的营业额都提升为2倍,请你帮小明同学计算出他第二季度的每个月营业额;

要求:

​ 1.第二季度营业额需要使用一个新数组保存

​ 2.在控制台中打印新数组的所有元素

/*
    第二季度营业额是第一季度中每个月的2倍,则遍历
    第一季度中的数并乘以2可得第二季度营业额
* */
public class TestArray {
    public static void main(String[] args) {
        int[] arr1 = {5,10,15};
        int[] arr2 = new int[3];
        for (int i = 0; i < arr1.length; i++) {
            arr2[i] = arr1[i]*2;
        }
        System.out.println("小明第二季度的营业额为:");
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i]+" ");
        }
    }
}

结果:
在这里插入图片描述

练习2

需求:假设小明同学本周5天的日盈利分别如下:int[] arr = {1,3,-1,5,-2},为了防止同行偷窥行业机密,小明决定将上面的实际营业额重新记录一份,这次记录的时候,把上面数组中的内容倒着记录,并将所有的负数按0记录。请你帮小明把上面的结果按小明的规则重新保存到一个新数组中,并打印出来;

/*
    对数组进行逆向遍历,并判断数是否小于零,若不小于零,则
    直接赋值给新数组,否则变为零后再赋值给新数组,即将原数
    组的最后一个数(arr1[i=arr1.length-1])按一定规则赋值给
    新数组的第一个数arr2[0=arr2.length-1-i],
    arr1[i-1=arr1.length-2]赋值给arr2[1=arr2.length-1-(i-1)],
    即:将原数组的下标为i的值arr1[i]赋值给新数组的下标为(arr2.length-1-i)
    的值arr2[arr2.length-1-i]
* */
public class TestArray {
    public static void main(String[] args) {
        int[] arr1 = {1,3,-1,5,-2};
        int[] arr2 = new int[5];
        int t = -1;
        for (int i = arr1.length - 1; i >= 0; i--) {
            //if(arr1[i]<0){
            //    arr2[arr2.length-1-i]=0
            // }else{
            //    arr2[arr2.length-1-i]=arr1[i];
            // }
            t++;  //t初始值为-1,t++后,则t=0,是数组arr2从0开始遍历
            if(arr1[i]<0){
                arr2[t]=0;
            }else{
                arr2[t]=arr1[i];
            }
        }
        System.out.println("原数组内容:");
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i]+" ");
        }
        System.out.println();
        System.out.println("新数组内容:");
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i]+" ");
        }
    }
}

结果:
在这里插入图片描述

练习3

需求:已知双色球由1个蓝色球和6个红色球组成,蓝色球的范围是1–16,红色球的范围是1–33;请使用程序随机生成一组双色球并保存到数组中;然后打印出数组中的这一组数据;

import java.util.Random;
public class TestArray {
    public static void main(String[] args) {
        int[] arr = new int[7];
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            if(i==0){ //判断是否为第一个数
                arr[i]=r.nextInt(16)+1;  //第一个为蓝色球,范围为1~16
            }else{
                arr[i]=r.nextInt(33)+1;  //后六个为红色球,范围为1~33
            }
        }
        System.out.println("您的双色球号为:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值