黑馬程序員-一維數組和二維數組

------- android培訓java培訓、期待與您交流! ----------


數組是 一個存放同一種數據類型的集合,它是一個容器

數組對其中的元素默認從0開始編號,方便對元素的操作

一維數組:
格式:
    1.數據類型[] 變量名 = new 數據類型[數組長度];
        int[] arr = new int[5];
    2.數據類型[] 變量名 = new 數據類型[]{元素1,元素2,元素3...};
        int[] arr = new int[]{3,10,4,5,23};
    3.數據類型[] 變量名 = {元素1,元素2,元素3...};
        int[] arr = {39,25,10,49};

注意:
在操作數據的時候注意數組的角標,以防越界和空指針的問題
//訪問到了數組中的不存在的腳標時,發生角標越界
int[] arr = new int[2];
System.out.println(arr[3]);

//arr引用沒有指向實體,卻在操作實體中的元素時,發生空指針異常
int[] arr = null;
System.out.println(arr[0]);

練習:
/*
	獲取最值(最大值,最小值)
	在一個數組中找到一個值所對應的索引
*/
class Demo 
{
	public static void main(String[] args) 
	{
		//1.獲取最值(最大值,最小值)
		int [] arr1 = {321,4,432,5,6546,54,654,2,432,21};
		
		System.out.println("max = " + getMax(arr1));
		System.out.println("min = " + getMin(arr1));
		
		System.out.println("index = " + getIndex(arr1,432));
	}
	//求數組的最大值
	public static int getMax(int[] arr)
	{
		int max = arr[0];
		for (int i = 0;i<arr.length ;i++ )
		{
			max = max > arr[i]? max : arr[i];
		}
		return max;
	}
	
	//求數組的最小值
	public static int getMin(int[] arr)
	{
		int min = arr[0];
		for (int i = 0;i<arr.length ;i++ )
		{
			min = min < arr[i]? min : arr[i];
		}
		return min;
	}
	//找一個數的索引
	public static int getIndex(int[] arr,int num)
	{
		int index=0;
		for (int i=0;i<arr.length ;i++ )
		{
			if (arr[i]==num)
			{
				index = i;
			}
		}
		return index;
	}
}

二維數組:
格式:
    1.數據類型[][] 變量名 = new 數據類型[數組長度][每個數組中的元素個數];
        int[][] arr = new int[3][2];//有3個一維數組,一維數組中有兩個元素
    2.數據類型[][] 變量名 = new 數據類型[數組長度][];//可以先不寫每個數組中的元素個數,然後在對每個一位數組中的元素分別進行初始化
        int[][] arr = new int[3][];
        int[0] = new int[3];//第一個一維數組中有3個元素
        int[1] = new int[2];//第二個一維數組中有2個元素
        int[2] = new int[4];//第三個一維數組中有4個元素
    3.數據類型[][] 變量名 = {{數組1},{數組2},{數組3}...};
        int[][] arr = {{3,4,1},{5,2},{10,43,9,25}};//二維數組中有三個一位數組,每個一維數組均已初始化
注意:
特殊情況的寫法: int[] x,y[]; x是一維數組,y是二維數組。

練習:
class Demo
{
	public static void main(String[] args) 
	{
		int[][] arr = {{89,86,90,88,99},
					   {77,95,63,77,89},
					   {88,82,78,45,88},
					   {90,90,65,98,94}};
		//第一次考試,所以同學的平均分
		int sum = 0;
		//遍歷第一行求和求平均
		for (int i = 0;i<arr[0].length ;i++ )
		{
			sum += arr[0][i];
		}
		System.out.println("第一次考試的平均分:"+ sum / arr[0].length);
		
		//求劉德華同學四次考試的平均分
		sum = 0;	//sum歸零
		//遍歷第一列,求和求平均
		for (int i = 0;i<arr.length ;i++ )
		{
			sum += arr[i][0];
		}
		System.out.println("劉德華第一次考試的平均分:"+ sum / arr.length);
		//求所有同學所有考試的最高分\最低分
		//假設最高分\最低分是數組中的第一個元素
		int max = arr[0][0];
		int min = arr[0][0];
		//便利所有元素,求最值
		for (int i = 0;i<arr.length ;i++ )
		{
			for (int j = 0;j<arr[i].length ;j++ )
			{
				max = max > arr[i][j] ? max : arr[i][j];
				min = min < arr[i][j] ? min : arr[i][j];
			}
		}
		System.out.println("最高分是:" + max);
		System.out.println("最低分是:" + min);
	}
}

綜合練習:
/*
	某公司採用公用電話傳遞數據信息,數據是小於8位的整數,爲了確保安全,在傳遞過程中需要加密,加密規則如下:
	
	首先將數據倒序;
	然後將每位數字都加上5,再用和除以10的餘數代替該數字;
	然後將第一位數字和最後一位數字交換。
	請任意給定一個小於8位的整數,然後把加密後的結果在控制檯打印出來。
	87362
	思路:
	1.將這個數的每一位取出來。
		87362 % 10 = 2;
		87362 / 10 =8736;
		8736 % 10 = 6;
		8736 /10 = 873;
		...
	2.建立數組,方便對每個數的操作
	3.將每個數加到數組中
	4.按要求進行題目的操作
	5.從數組中打印這個數即可
*/
class Demo
{
	public static void main(String[] args) 
	{
		printNum(87362);
	}
	public static void printNum(int a)
	{
//		int a = 87362;
		int b = a;	//將a賦值給b,如果用a來判斷,a的值會被改變
		int count =0;	//記錄a是幾位數,從而確定數組的長度
		for (int i =0; ;i++ )
		{
			if (b!=0)
			{
				b=b/10;
				continue;
			}
			count = i;
			break;
			
		}
		//System.out.println(count);
		int[] arr = new int[count];
		
		for (int i = 0;i<arr.length ;i++ )
		{
			int num = a%10;
			a = a/10;
			arr[i] = num;
//			System.out.println(a);
		}
//		printArray(arr);
		for (int i=0;i<arr.length ;i++ )
		{
			arr[i] = (arr[i]+5)%10;
		}
//		printArray(arr);
		arr[0] = arr[0]^arr[4];
		arr[4] = arr[0]^arr[4];
		arr[0] = arr[0]^arr[4];
		printArray(arr);
	}
	public static void printArray(int[] arr)
	{
		for (int i=0;i<arr.length ;i++ )
		{
			System.out.print(arr[i]);
		}
		System.out.println();
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章