一、一維數組
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();
}
}
}
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();
}
}
}
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常用方法
序號 | 方法 | 描述 |
---|---|---|
1 | boolean equals(int[] a, int[] b) | 判斷兩數組是否相等 |
2 | String toString(int[] a) | 輸出數組信息 |
3 | void fill(int[] a, int val) | 將指定值填充到數組之中 |
4 | void sort(int[] a) | 將數組進行排序 |
5 | int binarySearch(int[] a, int key) | 對排序後的數組進行二分法檢索指定的值 |
5.數組常見異常
(1)數組角標越界的異常:ArrayIndexOutException
(2)空指針異常:NullPiontException