04_数组、一维数组、二维数组

1.数组的概念

1.1什么是数组:

有相同的元素(类型)组成集合,叫数组。

1.2数组的特点:

- 数组的长度是固定的
- 数组的元素类型必须一样
- 数组的元素可以为基本数据类型,也可以是引用数据类型
- 数组本身就是一个引用类型数据

2.一维数组

2.1声明和创建数组

1)数组的声明:

  • 第一种声明方式:数据类型 数组名[];
    int ints[];
  • 第二种声明数组的方式: 数据类型[] 数组名:(一般推荐使用第二种)
    double[] dous;
  • 注意点:
    数组的类型可以是基本数据类型,也可以是引用数据类型

2)数组的创建:

  • 第一种创建方式: 先声明,后创建(创建==new)
 float[] fls;
 fls=new float[10];
  • 第二种创建方式:声明的同时创建
 char[] chars = new char[10];
  • 第三种声明方式:直接赋值
    String[] strs={" 今天","天气 ","非常 ","好 “,”!!! "};//strs数组的长度为5

2.2 数组的取值

  • 数组是利用下标来取值的,取值的格式:数组名[下标值],数组的下标值是从0开始的,最大下标值(长度-1)
  • 案例:计算张浩五门学科的总成绩
    声明并且使用直接赋值的方式创建数组,定义成绩之和变量,使用循环将值去除并且累加,输出总和
int[] list = {55,66,77,88,99};
int sum = 0;
for(int i = 0;i < 5;i++){
	sum = sum + list[i];
}
System.out.println("五门学科的总成绩:"+sum);

2.3数组的赋值

利用下标来赋值

  • 案例:创建char类型的数组,将值存储进去
    创建char类型的数组,长度为5,利用下标存储元素,将存储的值一一取出
char[] chars = new char[10];
chars[0]='a';
chars[1]='b';
chars[2]='c';
chars[3]='d';
chars[4]='e';
for(int  i =0;i<5;i++){
	System.out.println(chars[i]);
}
chars[4]='f';
for(int i=0;i<5;i++){
	System.out.println(chars[i]);
}

2.4数组的长度

  • 判断数组的长度:length属性
  • 案例:
    int[] ints = new int[5];
    int i = ints.length;
    System.out.println("数组的长度为: "+ i);

2.5遍历数组

  • 概念
    将数组里面的所有元素都显示出来
  • 普通for循环遍历
    • 格式:
      for(int i = 0;数组长度;i++){
      利用下标将元素输出;
      }
    • 小案例:
String[] strs = {" 今天","天气 ","非常 ","好 ","!!! "};
for(int i = 0;i<strs.length;i++){
	System.out.println(strs[i]);
}
  • 增强for循环遍历‘
    • for(数组的数据类型 变量名:数组名){
      输出变量名即可;
      }
      -小案例:
String[] strs = {" 今天","天气 ","非常 ","好 ","!!! "};
for(String s:strs){
	System.out.println(s);
}
  • 案例
    使用遍历的方式查看五位学员的成绩
    创建数组和成绩变量,创建键盘输入对象,利用循环将元素存储,使用普通for循环或者增强for循环进行遍历
int[] scores = new int[5];
int s= 0;
Scanner input = new Scanner(System.in);
System.out.println("请输入5位学员的成绩:")

//利用循环输出元素
for(int i= 0;i<score.length;i++){
	scores[i] = input.nextInt();
}

//普通for遍历
for(int i = 0;i<scores.length;i++){
	System.out.println(scores[i]);
}
System.out.println("=======================")
//增强for遍历
for(int s1:scores){
	System.out.println(s1);
}
  • 注意点
    使用for循环来遍历数组,所谓的遍历数组是指将数组中所有的元素全部打印在控制台上
    float类型的数组的默认值为0.0
    char的默认值为’’
    引用数据类型的数组默认值为null

2.6注意点

  • 数组是利用下标来取值的,取值的格式:数组名[下标值],数组的下标值是从0开始的,最大下标值为(长度-1)
  • 数组的长度在创建时就已经确定了,不是在声明的时候,数组的长度一旦创建,就不能修改
  • 数组的长度一旦确定,就不可改变,也就是说数组一旦创建,长度就已经确定,时无法进行长度的修改的
  • 数组下标的取值范围为:0-(数组的长度-1)如果超出范围会报异常:java.lang.ArrayIndexOutOfBoundsException:数组下标越界异常,说明取值超出数组的长度
String[] strArrayDynamc = new String[4];
System.out.println(strArrayDynamc[1]);
//得到的是null

int[] intArrayDynamc = new int[5];
System.out.println(intArrayDynamc[0]);
//结果:0

Integer[] integerArrayDynamc = new Integer[5];
System.out.println(integerArrayDynamc[0]);
//结果:null

3.二维数组

3.1概念

本事就是数组中的数组(相当于两个一维数组的嵌套)

3.2 二维数组的声明和创建

  1. 声明:
    • 第一种方式:(推荐使用)
      int[][] ints;
    • 第二种方式:
      char chars[][];
  2. 创建
    • 第一种方式:声明的同时使用new关键之创建二维数组
      double[][] dous = new double[4][5];
    • 第二种方式:直接赋值
      String[][] strs = {{“1”,“2”,“3”,“4”},{“5,”,“6”,“7”,“8”},{“9,”,“0”,“1”,“2”}};

3.3二维数组的遍历

  1. 普通for循环遍历二维数组
for(int i =0;i<strs.length;i++){
	for(int j = 0;j<strs[i].length;j++){//j表示的是一维数组的下标值
		System.out.println("strs["+i+"]["+j+"]="+strs[i][j]);
	}
}
  1. 增强for循环遍历二维数组
for(String[] str : strs){//第一层遍历出来的是二维数组的元素,也就是一维数组
	for(String s : str){//第二层遍历的是一维数组中的每个元素
	System,out,println(s);
	}
}

4.练习

4.1从键盘中任意输入一个数据,判断数组中是否包含此数

import java.sql.SQLOutput;
import java.util.Arrays;
import java.util.Scanner;


public class Practice4 {
    public static void main(String[] args) {
        int intArrays[] = {1,2,3,4,5};
        Scanner input = new Scanner(System.in);
        System.out.println("Please input a number: ");
        int m = input.nextInt();

        for(int i =0;i<intArrays.length;i++){
            if(m==intArrays[i]){
                System.out.println("此数组包含此数");
            }
            }
        System.out.println(Arrays.toString(intArrays));
        }


}

在这里插入图片描述

4.2统计4*5二维数组中奇数的个数和偶数的个数。

 public static void main(String[] args) {
        int[][] intArraysGroup = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};
        //int a[][] =new int[4][5];
        int odd=0;//奇
        int even=0;//偶

 //      for (int i =0;i<3;i++){
 //          for (int j = 0;j<=4;j++){
  //             a[i][i]=input.nextInt();//输入
  //         }
        for (int i = 0;i<4;i++){
            for (int j =0;j<5;j++){
                if (intArraysGroup[i][j]%2==0)
                    even++;
                else
                    odd++;
            }
        }
        System.out.println("奇数个数为: "+odd+",偶数个数为: "+even+" ");
       }

在这里插入图片描述

4.3将数组的元素全部输出

        System.out.println("==============for循环============");
        if (strArrayStcTwo != null && strArrayStcTwo.length>0) {//断路与(前一个条件不成立就不再走后面的了)
            //排除空数组,以及长度为0的数组
            for (int i = 0; i < strArrayStcTwo.length; i++) {//加=号就会数组越界了,下标的问题
                //考虑不周,万一数组是空的-》就会报错NUllPointerException空指针异常。所以要先判断
                System.out.println(strArrayStcTwo[i]);//数组越界了
            }
        }

        System.out.println("==========增强型的for循环");
        for (String element : strArrayStcTwo){
            System.out.println(element);
        }

4.4输出最大值

 int[] intArrayNum = {3,50,90,10,60};
        //输出 数组内的最大值方法一
        int max=0;
        for (int i =0;i<intArrayNum.length-1;i++){
            int k=intArrayNum[i];
            int j= intArrayNum[i+1];
           if(k>=j){
               max=k;

           }else{
               max=j;
           }
            System.out.println(max);
        }
        System.out.println(max);


        //输出 数组内最大值 方法二
        int index = 0;//最大值索引号,默认为0
        int max2 = intArrayNum[index];
        for (int i =1; i<intArrayNum.length;i++){
            if (intArrayNum[i]>max){
                index = i;
                max2 = intArrayNum[i];
            }
        }
        System.out.println("最大值为"+max2+", 索引号为"+index);


        //输出数组内最大值 方法三:for增强循环
        int max3 = intArrayNum[0];
        for (int ele : intArrayNum){
            if (max3 < ele){
                max3=ele;
            }
        }
        System.out.println(String.format("最大值为:%s",max));

4.5冒泡排序:从小到大排序

冒泡排序是简单经典的排序算法,它重复地走访过要排序地元素,一次比较相邻地两个元素,如果他们的顺序错误就把他们调换过来,知道没有元素再需要交换,排序完成。名字由来:元素经由交换慢慢“浮”到数列顶端
冒泡排序算法:
1.比较相邻的元素,如果前一个比后一个大,就把他们两个调换位置
2.对每一对相邻元素作同样的哦你工作,从开始第一对到结尾的最后一对。这步做完之后,最后的元素会是最大的数
3.针对所有的元素重复以上步骤,除了最后一个
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
5.优点:
每进行一趟排序,就会少比较一次,因为每进行一趟排序就会找出一个较大值。如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,没进行一趟比较,每一趟少比较一次,一定程度上减少了算法的量。

//方法一:
 int index1=0;
        int length = intArrayNum.length-1;
        int k =0;
        for (int i=0;i<intArrayNum.length;i++){
            for (int j=i+1;j<intArrayNum.length;j++){
                if (intArrayNum[i]>=intArrayNum[j]){
                    k = intArrayNum[i];
                    intArrayNum[i] = intArrayNum[j];
                    intArrayNum[j]=k;
                }
                length--;
            }
        }
        
for (int i=0;i<intArrayNum.length;i++){
            System.out.println(intArrayNum[i]);
        }


//方法二:
        //确定循环次数:内循环循环次数:length-i-1,减的越来越多,
        //每一层换几次,要确定下来。外层决定的是有六层,内循环决定的是一层里面换几次
//内层循环没搞明白!!!!
        /*
        * {3,10,30,50,26}/
        * {3,10,30,26}//去掉50
        * {3,10,26,30}
        * {3,10,26}//去掉30
        * {3,10}
        * */
        for (int i =0;i<intArrayNum.length-1;i++){
            for (int j = 0;j<intArrayNum.length-i-1;j++){
                if (intArrayNum[j+1] < intArrayNum[j]){
                    int tmp = intArrayNum[j];
                    intArrayNum[j] = intArrayNum[j+1];
                    intArrayNum[j+1] = tmp;
                }
            }
        }
        System.out.println(Arrays.toString(intArrayNum));

//方法三:用i--

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值