java数组的基础应用

数组

数组是一种数据结构,只能存储同一类型值。

数组的特点:

定长:数组的长度一旦确定就不能修改

创建数组时会开辟一块连续的内存来存储

存取元素的速度快,可以通过索引,快速定位到任意一个元素

数组的声明与初始化

声明

// 声明语法:数据类型[] 数组名 

int[]  arr;

初始化

静态初始化:

/ 方式一:数据类型[] 数组名 = {元素1,元素2,元素3,...}

 int[]  arr = {1,2,3,4};

 // 方式二:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};

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

动态初始化:

/数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度]; 

int[]  arr = new int[5]
数组元素的访问

索引:创建数组,内存会分配一块连续的空间来存储,第一个元素所在内存的地址称为基地址,那么第一个元素相对于基地址来说,偏移量为0,所以索引是从0开始,那么第二个地址与基地址之间就偏移了1. 因此,索引的范围为:[0,数组的长度-1] .

利用元素的索引(index)可以计算出该元素对应的存储地址,

通过 array.length 可以获得数组中元素的个数。

数组的遍历

public static void main(String[] args) {

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

   //打印数组的属性,输出结果是5

   System.out.println("数组的长度:" + arr.length);

    //遍历输出数组中的元素

    System.out.println("数组的元素有:");

    for(int i=0; i<arr.length; i++){

        System.out.println(arr[i]);

    }

}

数组元素的默认值

当我们动态初始化数组时:

/数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];

int[]  arr = new int[5]

数组的拷贝

在Java中,可以将一个数组变量拷贝给另一个数组变量,这个时候,两个变量引用的是同一个数组。

int[]  firstArray = {1,2,3,45};

 int[]  secondArray = firstArray ;

全新拷贝

那就要使用Arrays类的copyOf 方法:

int[]  copiedArray=Arrays.copyOf(firstArray ,firstArray .length);

第一个参数是要拷贝的数组。第二个参数是数组的长度
Arrays.copyOf 这个方法通常用来增加数组的大小。比如

int[] copiedArray=Arrays.copyOf(firstArray ,2 * firstArray .length);

拷贝firstArray 数组,并且将数组扩大为firstArray 数组大小的两倍.

多余的元素的默认值是什么

int 类型的就是0, 布尔类型的就是false.

相反: 如果长度小于原始数组的长度

这种请跨的话,只拷贝最前面的数据元素。
比如元素数组的长度为10,拷贝时你传的参数是5,那就只拷贝原始数组的前5个元素。

数组的排序

若对数值型数组进行排序,则使用Arrays 类中的sort 方法。

int[] firstArray = {9,58,3,915};

 Arrays.sort(firstArray);

一维数组的3种初始化方式

    public static void main(String[] args) {

        int[] array = {1,2,3,4,5};

        int[] array2 = new int[]{1,2,3,4,5};

        int[] array3 = new int[5];

        System.out.println(Arrays.toString(array));

        System.out.println(Arrays.toString(array2));

        System.out.println(Arrays.toString(array3));

二维数组概述

1、二维数组其实就是一个特殊的一维数组,一维数组中每个元素就是一个一维数组

2、三维数组又是一个特殊的二维数组

二维数组的定义

        int[][] a=new int[10][10];

        String[][] b=new String[10][10];

初始化二维数组

        //静态初始化

        int[][] a={{1,2,3,4},{4,5,6,7},{8,9,10,11}};

        //动态初始化

        String[][] b=new String[10][10];

        b[0]=new String[]{"zahngsan","lisi","wangwu"};

        b[1]=new String[]{"java","python","c++"};

二维数组的遍历

public class Text0 {

    public static void main(String[] args) {

        //静态初始化

        int[][] a={{1,2,3,4},{4,5,6,7},{8,9,10,11}};

       //遍历

        for (int i = 0; i < a.length; i++) {

            for (int j = 0; j < a[i].length; j++) {

                System.out.print(a[i][j]+" ");

            }

            System.out.println();

        }

    }

}

二维数组传递参数给方法

public class Text0 {

    public static void main(String[] args) {

        //静态初始化

        int[][] a={{1,2,3,4},{4,5,6,7},{8,9,10,11}};

        //调用print方法

        print(a);

    }

    public static void print(int[][] a){

        //遍历

        for (int i = 0; i < a.length; i++) {

            for (int j = 0; j < a[i].length; j++) {

                System.out.print(a[i][j]+" ");

            }

            System.out.println();

        }

    }

}

举例

第五套人民币的主币(不包括角、分)共有以下6种面值纸币:1元,5元,10元,20元,50元,100元。自定义方法CalculateMoney,计算要用这几种纸币组成金额“X”,最少需要多少纸币。

package ceshi

import java.util.*;

import java.util.regex.*;

public class Ceshi {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int[] arr = new int[7];

System.out.println("请输入金钱");

String st = sc.nextLine();

if (isInteger(st)) {

int a = Integer.parseInt(st);

arr = Calculatemoney(a);

for (int i = 6; i >= 0; i--) {

switch (i) {

case 6:

System.out.println("100元需要:");

break;

case 5:

System.out.println("50元需要:");

break;

case 4:

System.out.println("20元需要:");

break;

case 3:

System.out.println("10元需要:");

break;

case 2:

System.out.println("5元需要:");

break;

case 1:

System.out.println("2元需要:");

break;

case 0:

System.out.println("1元需要:");

break;

}

System.out.println(arr[i] + "张");

}

} else {

System.out.println("请输入整数");

}

}

private static int[] Calculatemoney(int a) {

int temp;

int[] bb = { 0, 0, 0, 0, 0, 0, 0 };

temp = a;

while (temp >= 100) {

bb[6] += 1;

temp -= 100;

}

while (temp >= 50) {

bb[5] += 1;

temp -= 50;

}

while (temp >= 20) {

bb[4] += 1;

temp -= 20;

}

while (temp >= 10) {

bb[3] += 1;

temp -= 10;

}

while (temp >= 5) {

bb[2] += 1;

temp -= 5;

}

while (temp >= 2) {

bb[1] += 1;

temp -= 2;

}

while (temp >= 1) {

bb[0] += 1;

temp -= 1;

}

return bb;

}

public static boolean isInteger(String str) {

Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");

return pattern.matcher(str).matches();

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值