Java学习day04-数组

今日目标:

数组

1.为什么使用数组?

1.什么是数组?:
一组类型相同的数据
为什么不能存放不同的数据类型?
每种数据类型在内存空间中占据的大小不同
2.为什么要用到数组?
业务所需,需要对多个同种数据类型的数据进行打包处理。

字符数组比较特殊,不能输出地址值,println会自动将字符转换为字符串输出
在这里插入图片描述
定义数组时会创建一个对象空间
在这里插入图片描述

 int arr[] = new int[]{1,2,3};
        int b[]=arr;
        arr[1]=8;
        System.out.println(b[1]);//8

方法里是形参,不会改变a的输出

public static void main(String[] args) {
        int a=2;
       fun(a);
        System.out.println(a);//2
    }
    private static int fun(int a) {
        a=10;
        return a;
    }

2.数组的使用步骤:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上是基本使用步骤,有没有更简单的步骤?
1.边声明边赋值
在这里插入图片描述

private static void one() {

        int arr1[];//定义
        arr1=new int[7];//指定长度
        int arr[]=new int[5];//定义加指定长度
        arr[0]=1;// 赋值 1
        arr[1]=2;
        arr[2]=3;
        arr[3]=4;
        arr[4]=5;
        int arr2[]=new int[]{1,2,3};//定义加指定长度加赋值
        int arr3[]={2,4,5};//定义加指定长度加赋值 简写
       /* for (int a:arr){
            System.out.println(a);
        }*/
    }

foreach简化数组和集合的遍历
foreach的语句格式:
for(元素类型t 元素变量x : 遍历对象obj){
引用了x的java语句;
}
2.用户边输入边动态赋值:基本步骤
案例:输入5名学员的java成绩,并求出平均数。

public void test1() {   
    //定义并初始化一个数组   
    int arr[] = {2, 3, 1};   
     System.out.println("----1----排序前的一维数组");   
    for (int x : arr) {   
         System.out.println(x); //逐个输出数组元素的值   
     }   

3.处理数据----增强型for

ForEach
数组赋值以后如何取出其中的每个数据呢?
案例:
打印数组中的每个数据?
普通for循环和增强for循环

4.栈内存和堆内存:

Int a=9;
都是用于存储数据的,栈:存储变量名,基本数据类型在常量池,不包括String
堆:存储引用数据类型:数组,集合,类(对象),接口
举例:
定义两个String,==比较
Next()Scanner中输入的String和定义的String不一样。
综合练习:
1.
在这里插入图片描述

 private static void one() {
        Scanner sc=new Scanner(System.in);
        int a[]=new int[]{8,4,2,1,23,344,12};
        int b=0;
        System.out.print("数列的值分别为:");
        for (int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
            b+=a[i];
        }
        System.out.println("数列中所有数值的和为:"+b);
        System.out.println("请输入一个数:");
        int i1=sc.nextInt();
        boolean a2=true;
        for (int i=0;i<a.length;i++){
            if (i1==a[i]){
                System.out.println("数列中包含此数");
                a2=false;
                break;
            }
        }
        if (a2){
            System.out.println("数列中没有此数");
        }
    }

在这里插入图片描述

2.求最大最小值
打擂台原理

 private static void two() {
        Scanner sc=new Scanner(System.in);
        int a[]=new int[]{8,4,2,1,23,344,12};
        int max=a[0],min=a[0];
        for (int i=1;i<a.length;i++){
            max=max>a[i]?max:a[i];
            min=min<a[i]?min:a[i];
        }
        System.out.println("最大值为:"+max);
        System.out.println("最小值为:"+min);
    }

在这里插入图片描述

3.排序,和插值
在这里插入图片描述

4.冒泡排序(明天讲)

学会调试程序

作业:

1.从键盘接受10个整数,求出其中的最大值和最小值。

 private static void One() {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你想要输入十个的数字(正整数):");
        int a[]=new int[10];
        int max;
        int min;
        for (int i=0;i<=(a.length-1);i++){
            a[i]=sc.nextInt();
        }
        max=a[0];
        min=a[0];
        System.out.println("你输入的十个数分别为:");
        for (int i=0;i<=a.length-1;i++){
            max=max>a[i]?max:a[i];
            min=min<a[i]?min:a[i];
            System.out.print(a[i]+" ");
        }
        System.out.println();//换行
        System.out.println("你输入的最大值为:"+max+"  最小值为:"+min);
    }

在这里插入图片描述

在这里插入图片描述

2.输入10个数,保存在一个数组中,在数组中查找某个数字,给出是否找到信息,如果找到了输出该数在数组中所处的位置,如果找不到输出“找不到”

 private static void Two() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你想要输入十个的数字(正整数):");
        int a[] = new int[10];
        for (int i = 0; i <= (a.length - 1); i++) {
            a[i] = sc.nextInt();
        }
        System.out.println("请输入你要查找的数字(正整数):");
        int b = sc.nextInt();
        boolean c=true;
        for (int i = 0; i < a.length - 1; i++) {
            if (a[i] == b) {
                System.out.println("找到了,在数组的中的第"+(i+1)+"位");
                c=false;
                break;
            }
        }
        if(c){
            System.out.println("找不到");
        }
    }

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.将一个数组中的元素逆序输出,即第一个元素和最后一个元素交换,第二个数与倒数第二元素交换……,例如:原数组为:9 2 5 7 8,逆序后的数组为:8 7 5 2 9
在这里插入图片描述

private static void three() {
        int a[]=new int[]{8,4,2,1,23,344,12};
        int b[]=new int[]{8,4,2,1,23,344,12,20};
            for(int i=0;i<a.length/2;i++){
                int c=a[i];
                a[i]=a[a.length-1-i];
                a[a.length-1-i]=c;
            }
        for(int i=0;i<b.length/2;i++){
            int c=b[i];
            b[i]=b[b.length-1-i];
            b[b.length-1-i]=c;
        }
        System.out.println("交换后的数为:");
            for (int i=0;i<a.length;i++){
                System.out.print(a[i]+" ");
            }
        System.out.println("");
     for (int i=0;i<b.length;i++){
        System.out.print(b[i]+" ");
    }
}

在这里插入图片描述

4.顾客从超市采购了10件商品,编写一个程序,用于接受每件商品的价格,计算应付的总金额。并分别打印出各个商品的价格以及应付的总金额的小票。

 private static void four() {
        String a[]={"鸡蛋","牛奶","饼干","矿泉水"
                ,"杯子","洗发精","沐浴露","牙刷","牙膏","鱼"};
        Scanner sc=new Scanner(System.in);
        double b[]=new double[10];
        for (int i=0;i<a.length;i++){
            System.out.print("请输入"+a[i]+"的价格:");
            b[i]=sc.nextDouble();
        }
        double sum=0;
        for (int i=0;i<a.length;i++){
            System.out.println(a[i]+"的价格为:"+b[i]+"元");
            sum=sum+b[i];
        }
        System.out.println("总金额为:"+sum+"元");
    }

在这里插入图片描述

5.接收并输出某公司某月的考勤和扣款信息,假设公司有5个员工,每个员工的考勤项有上下班忘打卡、迟到、早退、旷工,其中上下班忘打卡扣款10元/次,迟到和早退扣款为20元/次,旷工100元/天,参考图如下(参考图中是以3个员工为例):

private static void five() {
        int a[]=new int[5];//员工编号
        int b[]=new int[5];//忘打卡
        int c[]=new int[5];//迟到
        int d[]=new int[5];//早退
        int e[]=new int[5];//旷工
        Scanner sc=new Scanner(System.in);
        for (int i=0;i<1;i++){
            System.out.println("请输入第"+(i+1)+"个员工编号:");
            a[i]=sc.nextInt();
            System.out.println("请输入第"+(i+1)+"个员工忘打卡次数:");
            b[i]=sc.nextInt();
            System.out.println("请输入第"+(i+1)+"个员工迟到次数:");
            c[i]=sc.nextInt();
            System.out.println("请输入第"+(i+1)+"个员工早退次数:");
            d[i]=sc.nextInt();
            System.out.println("请输入第"+(i+1)+"个员工旷工次数:");
            e[i]=sc.nextInt();
        }
        System.out.println("************本月考勤信息***************");
        for (int i=0;i<1;i++){
            System.out.println("员工编号  忘打卡   迟到  早退  旷工  总罚款(单位元)");
            System.out.println(a[i]+"         "+b[i]*10+"       "+c[i]*20+"   "+d[i]*20+"    "+e[i]*100+"   "+
                    (b[i]*10+c[i]*20+d[i]*20+e[i]*100));
        }
    }

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.动态输入一组数,存到数组里面,利用四种循环打印出数组的所有元素。

 private static void six() {
        Scanner sc = new Scanner(System.in);
        System.out.println("你想要输入几个数(正整数):");
        int shu;
        shu=sc.nextInt();
        System.out.print("请输入这些数:");
        int a[] = new int[shu];
        for (int i = 0; i <= (a.length - 1); i++) {//给数组赋值
            a[i] = sc.nextInt();
        }
        System.out.print("打印的结果为: ");
        for (int i = 0; i <= (a.length - 1); i++) {
            System.out.print(a[i]+" ");
        }
        System.out.println(" ");//换行
        System.out.print("打印的结果为: ");
        int a1=0;
        while (a1<a.length){
            System.out.print(a[a1]+" ");
            a1++;
        }
        System.out.println(" ");//换行
        System.out.print("打印的结果为: ");
        int b1=0;
        do{
            System.out.print(a[b1]+" ");
            b1++;
        }while (b1<a.length);
        System.out.println(" ");//换行
        System.out.print("打印的结果为: ");
        for (int c1:a){
            System.out.print(c1+" ");
        }
    }

在这里插入图片描述

7.定义一个有序数列{1,5,20,30,80},要求用户输入一个数字,判断该数字应该插入到数组中的下标是?
在这里插入图片描述

private static void seven() {
        int a[]=new int[]{1,5,20,30,80};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数字:");
        int b=sc.nextInt();
        boolean c=true;
        for (int i=0;i<a.length;i++){
            if (a[i]>b){
                System.out.println("这个数字应该插入的下标为:"+i);
                c=false;
                break;
            }
        }
        if (c){
            System.out.println("这个数字应该插入的下标为: 5");
        }
    }

在这里插入图片描述

8.定义一个长度为8的数组,要求前7个元素赋值,最后一个不赋值,从第5个元素开始,依次覆盖后面的元素,并输出最终结果。
在这里插入图片描述

private static void eight() {
        Scanner sc = new Scanner(System.in);
        int a[]=new int[8];
        System.out.println("请输入七个数:");
        for (int i=0;i<7;i++){
            a[i]=sc.nextInt();
        }
        System.out.println("这八个数分别为:");
        for (int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println();//换行
        for (int i=a.length-2;i>=4;i--){
            a[i+1]=a[i];
        }
        System.out.println("最终结果为:");
        for (int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
    }

在这里插入图片描述

9.定义一个有序数列,{1,5,20,30,80},要求用户输入一个数字,然后插到数组中,并保持升序,不能使用冒泡排序。
在这里插入图片描述

 private static void nine() {
        int a[]=new int[]{1,5,20,30,80,0};
        System.out.println("这个数组为:");
        for (int i = 0; i <a.length ; i++) {
            System.out.print(a[i]+" ");
        }
        System.out.println();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数字:");
        int b=sc.nextInt();
        int x=a.length-1;//x为插入的下标
        for (int i=0;i<a.length;i++){
            if (a[i]>b){
                x=i;
                break;
            }
        }
        System.out.println("这个数字应该插入的下标为:"+x);
        for (int i=a.length-1;i>x;i--){//替换插入之后的数
            a[i]=a[i-1];
        }
        a[x]=b;//替换插入的数
        System.out.println("插入后的数组为:");
        for (int i = 0; i <a.length ; i++) {
            System.out.print(a[i]+" ");
        }
    }

在这里插入图片描述

------------------------------今天不做------------------
1.使用冒泡排序对数组{13,18,99,56,44,67}进行升序和降序。

private static void job1() {
        int a[]={13,18,99,56,44,67};
        for(int i=0;i<a.length-1;i++){//升序
            for (int j=0;j<a.length-1-i;j++){
                if (a[j]>a[j+1]){
                    int b=a[j+1];
                    a[j+1]=a[j];
                    a[j]=b;
                }
            }
        }
        System.out.println("升序后的排列为:");
        for (int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println();//换行
        for(int i=0;i<a.length-1;i++){//降序
            for (int j=0;j<a.length-1-i;j++){
                if (a[j]<a[j+1]){
                    int b=a[j+1];
                    a[j+1]=a[j];
                    a[j]=b;
                }
            }
        }
        System.out.println("降序后的排列为:");
        for (int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
    }

在这里插入图片描述

2.利用冒泡排序实现数组长度为10的特定排序:1-5升序,6-10降序。

private static void job2() {
        int a[]={5,4,3,2,1,6,7,-1,9,10};
        System.out.println("数组原为:");
        for (int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
        System.out.println();//换行
        for(int i=0;i<4;i++){//升序
            for (int j=0;j<4-i;j++){
                if (a[j]>a[j+1]){
                    int b=a[j+1];
                    a[j+1]=a[j];
                    a[j]=b;
                }
            }
        }
        for(int i=0;i<5;i++){//降序
            for (int j=5;j<a.length-1-i;j++){
                if (a[j]<a[j+1]){
                    int b=a[j+1];
                    a[j+1]=a[j];
                    a[j]=b;
                }
            }
           // System.out.println("第"+(i+1)+"个数为:"+a[i]);
        }
        System.out.println("1-5升序,6-10降序后的排列为:");
        for (int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
    }

在这里插入图片描述

Java学习顺序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值