黑马程序员----------java基础知识(6)之数组查找和二维数组及其应用

本文详细介绍了Java中数组的使用方法,包括一维数组的查找、无序数组查找、有序数组二分查找等,并深入探讨了二维数组的概念、定义、初始化及遍历方式。此外,还提供了两个实际应用案例:数学黑洞问题和螺旋填空问题。
摘要由CSDN通过智能技术生成

                                   ----------------------android培训java培训、期待与您交流! ----------------------


          数组在java中用的比较多,所以总结下数组的查找和二维数组。


    (1)查找
        A:无序数组
    

   public static int getIndex(int[] arr,int value)
        {
            for(int i=0; i<arr.length; i++)
            {
                if(arr[i]==value)
                {
                    return i;
                }
            }
            //当循环结束,说明元素在数组中不存在
            return -1;
        }
            


        B:有序数组 二分查找(必须是有序的)
     
  public static int getIndex(int[] arr,int value)
        {
            int min = 0;
            int max = arr.length - 1;
            int mid = (min+max)/2;

            while(arr[mid]!=value)
            {
                if(arr[mid]>value)
                {
                    max = mid - 1;
                }
                else if(arr[mid]<value)
                {
                    min = mid + 1;
                }


                //如果没有怎么办?min max
            
   if(min>max)
                {
                    return -1;
                }

                mid = (min+max)/2;
            }
            return mid;
        }


        
2:二维数组
    (1)int[][] arr = new int[3][2];
        A:定义了名称为arr的二维数组

        B:二维数组中有3个一维数组


        C:每一个一维数组中有2个元素

        D:一维数组的名称分别为arr[0], arr[1], arr[2]

        arr:二维数组名

        arr[1]:二维数组中的第二个数组名

        arr[1][1]:二维数组中的第二个数组的第二个元素

        E:给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;

    (2)格式2:int[][] arr = new int[3][];

        A: 二维数组中有3个一维数组

        B: 每个一维数组都是默认初始化值null

        C: 可以对这个三个一维数组分别进行初始化
         

          arr[0] = new int[3];
          arr[1] = new int[1];
          arr[2] = new int[2];


    (3)int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
        A:二维数组有3个一维数组。
        B:第一个一维数组有3个元素
           第一个一维数组有2个元素
           第一个一维数组有4个元素
    (4)二维数组的遍历
     
  public static void printArray2(int[][] arr2)
        {
            for(int i=0; i<arr2.length; i++)
            {
                for(int j=0; j<arr2[i].length; j++)
                {
                    System.out.print(arr2[i][j]+" ");
                }
                System.out.println();
            }
        }

二维数组的应用

数学黑洞问题


import java.util.Scanner;
public class BlackHole {
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		if (n % 1111 == 0){
			return;
		}
		while(n!=6174){
			//把整数转为数组
			int[] a = intToArray(n);
			//对数组进行排序
			java.util.Arrays.sort(a);
			//根据排序后的数组,获得最小值
			int min = arrayToMin(a);
			//根据排序后的数组,获得最大值
			int max = arrayToMax(a);
			System.out.println(max + "-" +  min + "=" + (max-min) );
			n = max - min;
		}
	}
	public static int[] intToArray(int n){
		int[] a = new int[4];
		a[0] = n/1000;
		a[1] = n/100%10;
		a[2] = n/10%10;
		a[3] = n%10;
		return a;
	}
	public static int arrayToMin(int[] a){
		return a[0]*1000 + a[1] * 100 + a[2] * 10 + a[3];
	}
	public static int arrayToMax(int[] a){
		return a[3]*1000 + a[2] * 100 + a[1] * 10 + a[0];
	}
}

螺旋填空

package chp4;

import java.util.Scanner;
public class LuoXuan{
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in); 
		int m = sc.nextInt();
		int n = sc.nextInt();
		
		int[][] a = new int[m][n];
		int col=0, row = 0;
		a[row][col] = 1;
		
		int[][] direction = {
			{0, 1}, //右
			{1, 0}, //下
			{0, -1},//左
			{-1, 0} //上
		};
		int directIndex = 0; //用来标识方向,一开始为右
		
		for(int i = 2; i<= m*n; i++){
			//按照之前的方向,计算下一个坐标
			row = row + direction[directIndex][0];
			col = col + direction[directIndex][1];
			
			//如果计算所得的坐标超出了范围
			if ( ( row >=m || row <0 )
			||(col >=n || col <0)
			|| (a[row][col] != 0) ){
			    //复原
				row = row - direction[directIndex][0];
				col = col - direction[directIndex][1];
				//换成下一个方向
				directIndex++;
				if (directIndex == 4) directIndex = 0;
				
				//计算新坐标
				row = row + direction[directIndex][0];
				col = col + direction[directIndex][1];
			}
			
			a[row][col] = i;
		}
		
		printMultiArray(a);
	}
	
	public static void printMultiArray(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] + "\t");
			}
			System.out.println();
		}
	}
}


                                ----------------------android培训java培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值