001数组

目录

一、一维数组

二、二维数组

三、算法和数组常用的工具方法


本文有道地址

 

一、一维数组


1. 写出一维数组的声明与初始化
        

int[] ids ;
//1.静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1,2,3,4,5} ;
//2.动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] strs = new String[5] ;

int[] arr4 = {1,2,3,4,5} ;//类型推断



2.数组的调用

//数组的角标(或索引从0开始的,带数组长度array.length-1结束)
names[0]= "Tom" ;
names[1]= "Jack" ;
names[2]= "Anna" ;//charAt(index)

3.如何获得数组的长度?

array.lenth(length是数组中的一个属性)

4.一维数组的遍历

for(int j=0; j<array.length; j++){
    System.out.print(array[j] + ",") ;
}

5、一维数组元素的默认初始化值
    
    整型:0
    浮点型:0.0
    char:0或'/u0000',不是'0'
    boolean:false
    引用类型:null
    
6、一维数组内存解析

二、二维数组

1.二维数组的的声明与初始化

//静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
int[][] arr1 = {{1,2,3},{4,5,6},{7,8,9}};
//动态初始化1
int[][] arr2 = new int[3][2] ;
//动态初初始化2
int[][] arr2 = new int[3][] ;

2.二维数组的调用

int[][] arr2 = new int[3][4] ;

arr2[0][1] = 123 ;
arr2[1] = new int[4] ;

arr2[2]//打印会输出地址值

3.获得二维数组的长度?

int[][] arr2 = new int[3][4] ;

//外层长度:3
arr2.length
//内层长度:4
arr2[0].length

4.二维数组的遍历

for(int i=0; i<arr.length; i++){
    for(int j=0; j<arr[i].length; j++){
        System.out.print(arr[i][j] + ",") ;
    }
     System.out.println() ;
}


三、算法和数组常用的工具方法

1. 杨辉三角


主要思路:把每行起始和结尾的1先赋值,之后第i行j列等于第i-1行j-1列加是第i-1行j列

public class Test01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("请输入要打印的杨辉三角行数:");
            //从键盘获取要打印的杨辉三角行数
            String temp = sc.nextLine();
            try {
                //将键盘输入字符串转化为int类型,如果格式不正确,则提示输入格式不正确
                int rowsNum = Integer.parseInt(temp);
                getPascalTriangle(rowsNum);
            } catch (Exception e) {
                //e.printStackTrace();
                System.out.println("输入的格式不正确,请输入数字:");
            }
        }
    }
 
    //获取杨辉三角的二维数组
    private static void getPascalTriangle(int rowsNum) {
        int n = rowsNum;
        //构建二维数组
        int[][] ss = new int[n][];
        //给每行第一个和最后一个赋值为1
        for (int i = 0; i < ss.length; i++) {
            ss[i]=new int[i+1];
            ss[i][0]=1;
            ss[i][i]=1;
        }
        //给每行其他列赋值
        for (int i = 2; i < ss.length; i++) {
            for (int j = 1; j < ss[i].length-1; j++) {
                ss[i][j]=ss[i-1][j-1]+ss[i-1][j];
            }
        }
        //遍历打印杨辉三角
        printArray(ss);
        
    }
 
    //遍历方法
    private static void printArray(int[][] ss) {
        for (int i = 0; i < ss.length; i++) {
            for (int j = 0; j < ss[i].length; j++) {
                System.out.print(ss[i][j]+" ");
            }
            System.out.println();
        }
    }
}

源文链接:java实现杨辉三角

2. 回形数格式方阵的实现 


    主要思路:分别通过数组长度和数组是否赋值判断是否转向

public class HuiXing {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int vol = 15;//矩阵阶数
        
        int[][] arr = new int[vol][vol];
        
        int x = 0;
        int y = 0;//初始坐标
        int num = 1;
        
        while(arr[x][y] != (vol * vol)) {
            arr[x][y] = num;
            
            if(y != vol - 1 && arr[x][y + 1] == 0) {//→
                if(x > 0 && arr[x - 1][y]==0) {//优先向↑走
                    x--;
                }else {
                    y++;
                }
            }else if(x != vol - 1 && arr[x + 1][y] == 0) {//↓
                x++;
            }else if(y != 0 && arr[x][y - 1] == 0) {//←
                y--;
            }else if(arr[x - 1][y] == 0){//↑
                x--;
            }
            
            num++;
        }
        
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

原文链接:Java回形数问题
 

3. 求数值型数组中元素最大值、最小值、平均值、总和等

要求:定义一个int型数组的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,总和,平均值,并输出来。所有的随机数数都是两位

tip:[a,b]公式:(int)(Math.random() * (b-a+1) + a)

public class Arraytest1 {
    public static void main(String[] args) {
        int[] arr = new int[10] ;
        
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int)(Math.random() * (99-10+1) + 10) ;
        }
        
        //遍历
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] + "\t");
        }
        System.out.println();
        
        //求数组元素的最大值
        int maxValue = arr[0] ;
        for (int i = 0; i < arr.length; i++) {
            if (maxValue < arr[i]) {
                maxValue = arr[i] ;
            }
        }
        System.out.println("最大值为:" + maxValue);
        //求数组元素的最大值
        int minValue = arr[0] ;
        for (int i = 0; i < arr.length; i++) {
            if (minValue > arr[i]) {
                minValue = arr[i] ;
            }
        }
        System.out.println("最小值为:" + minValue);
        //求数组的总和
        int sumValue = 0 ;
        for (int i = 0; i < arr.length; i++) {
            sumValue += arr[i] ;
        }
        System.out.println("总和为:" + sumValue);
        //求数组的平均值
        int avgValue = sumValue / arr.length ;
        System.out.println("平均值为:" + avgValue);
    }
}

4. 数组复制

使用简单的数组  
(1)创建一个类,在mina()方法array1和arrays2两个变量,他们是int[]类型的数组  
(2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19  
(3)显示array1的内容  
(4)赋值array2变等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0]=0),打印array1  

public class ArrayTest2 {
    public static void main(String[] args) {
        int[] array1, array2 ;
        
        array1 = new int[]{2,3,5,7,11,13,17,19} ;
        
        //显示array1的内容
        for(int i=0; i<array1.length; i++) {
            System.out.print(array1[i] + "\t");
        }
        System.out.println();
        
        //赋值array2变等于array1
        //不能称作数组的复制
        array2 = array1 ;
        
        //修改array2中的偶索引元素,使其等于索引值(如array[0]=0)
        for(int i=0; i<array2.length; i++) {
            if(i%2 == 0) {
                array2[i] = i ;
            }
        }
        //显示array1的内容
        for(int i=0; i<array1.length; i++) {
            System.out.print(array1[i] + "\t");
        }
        System.out.println();
    }
}

思考:array1与array2是什么关系  

array1与array2地址值相同,都指向了对空间的位置的一个数组实体

拓展:修改题目,实现array2对array1的复制
 

array2 = new int[array1.length] ;
for(int i=0; i<array2.length; i++) {
    array2[i] = array1[i] ;
}

5. 数组的复制、反转、查找(线性查找、二分法查找)

public class ArrayTest3 {
    public static void main(String[] args) {
        String[] str = new String[] {"AA", "BB", "CC", "DD", "EE", "FF"} ;
        
        //数组的复制
        String[] str1 = new String[str.length] ;
        for(int i=0; i<str1.length; i++) {
            str1[i] = str[i] ;
        }
        //数组的反转
        //方法一
        for(int i=0; i<str.length/2; i++) {
            String temp = str[i] ;
            str[i] = str[str.length-1 -i] ;
            str[str.length-i] = temp ;
        }
        //方法二
        for(int i=0, j=str.length-1; i<j; i++,j--) {
            String temp = str[i] ;
            str[i] = str[j] ;
            str[j] = temp ;
        }
        
        //查找
        //线性查找:
        String target = "EE" ;
        int index = -1 ;
        for(int i=0; i<str.length; i++) {
            if(target.equals(str[i])) {
                index = i ;
                System.out.println("找到指定元素,位置为" + i);
                break ;
            }
        }
        if(index == -1) {
            System.out.println("遗憾,没有找到");
        }
        
        //二分法查找
        //前提:所要查找的数组必须有序
        int[] array1 = new int[] {1,2,14,15,77} ;
        int t = 77 ;
        int head = 0 ;
        int end = str.length-1 ;
        boolean isFlag = true ;
        while (head <= end) {
            int middle = (head + end) / 2 ;
            
            if(array1[middle] == t) {
                isFlag = false ;
                System.out.println("找到指定元素,位置为" + middle);
                break ;
            } else if(array1[middle] > t) {
                end = middle-1 ;
            } else if(array1[middle] < t) {
                head = middle+1 ;
            }
        }
        if(isFlag) {
            System.out.println("遗憾,没有找到");
        }
        
    }
}


4. Arrays常用方法

序号方法描述
1boolean equals(int[] a, int[] b)判断两数组是否相等
2String toString(int[] a)输出数组信息
3void fill(int[] a, int val)将指定值填充到数组之中
4void sort(int[] a)将数组进行排序
5int binarySearch(int[] a, int key)对排序后的数组进行二分法检索指定的值

5.数组常见异常

(1)数组角标越界的异常:ArrayIndexOutException
(2)空指针异常:NullPiontException


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值