Java學習路線課程第五課:一維數組

如有疑問或建議,請在線加QQ: 點擊這裏給我發消息  或掃 QQ:    或掃 微信:   或加 微信號: QingYunJiao   
想系統學習JAVA的學友請加備註:xx    |   想提升技術的學友請加備註:js    |   需要資料的學友請加備註:zl

本博客地址 | 小站坐坐 | GitHub

JavaSE一維數組

爲什麼需要數組

  • 可以用一個變量,存儲相同數據類型的多個值。

有數組和沒有數組的區別案例演示:

package org.gyun.array;

import java.util.Scanner;

/**
 * @ClassName:ArrayTest1.java
 * @Description:沒有使用數組前與使用數組後的比較及爲什麼要使用數組
 * @Author:DongGaoYun
 * @URL: www.gyun.org
 * @Email:[email protected]
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @Date:2019-9-9 下午2:14:32
 * @Version:1.0
 */
public class ArrayTest1 {

	/**
	 * 給一個班的3位同學算平均分。 1.動態的錄入分數 Scanner input=new Scanner(System.in); 三步走:引包
	 * 創建對象 使用數據 循環給它賦值。用for之前,看它有沒有固定的次數 ,有,就用for for(int i=0;i<3;i++){//打印需求};
	 * sum變量計算總分數,除以3位同學,得出平均分
	 * 
	 */
	public static void main(String[] args) {
		// 調用方法
		// 簡單方便
		// forTest();
		// array1();
		array2();

	}
	/**
	 * 求靜態數組元素平均分
	 */
	private static void array2() {
		// 聲明數組 幾步走: 聲明數組、開闢空間、賦值、使用
		// 簡化:聲明數據並賦值、使用
		// 靜態的聲明數組
		int[] score1 = new int[] { 99, 98, 97 };// 左右邊中括號裏不能指定數組的長度

		int sum = 0;
		// 創建輸入對象Scanner 
		Scanner input = new Scanner(System.in);
		/*
		 * 普通for循環 for (int i = 0; i < score1.length; i++) { 
		 * 等價於sum=sum+score1[i]; sum += score1[i]; }
		 */
		// 增強for循環
		for (int score : score1) {
			// 等價於sum=sum+score;
			sum += score;
		}
		//打印平均分
		System.out.println(sum / score1.length);
	}
	/*
	 * 使用數組後,保存多個數據,僅需一個數組便可以搞定,優勢明顯
	 */
	private static void array1() {
		// 聲明數組 幾步走: 聲明數組、開闢空間、賦值、使用
		// 簡化:聲明數據並賦值、使用
		// 動態的聲明數組
		int[] score = new int[7];

		int sum = 0;
		// 創建輸入對象Scanner 
		Scanner input = new Scanner(System.in);
		// 循環        //score.length是拿到數組的長度。
		for (int i = 0; i < score.length; i++) {
			System.out.println("請輸入第" + (i + 1) + "位同學的成績:");
			score[i] = input.nextInt();
			// 等價於sum=sum+score[i];
			sum += score[i];
		}
		System.out.println(sum / score.length);
	}
	/**
	 * 沒有使用數組之前,想保存一些數據,需要定義多個相應的變量名,使用複雜
	 */
	private static void forTest() {
		// 聲明變量
		int num = 3;
		String zs = "張三";
		String ls = "李四";
		String wmz = "王麻子";
		int z = 0;
		int l = 0;
		int w = 0;
		int sum = 0;
		// 創建輸入對象Scanner
		Scanner input = new Scanner(System.in);
		// 循環
		for (int i = 0; i < num; i++) {
			System.out.println("請輸入第" + (i + 1) + "位同學的成績:");
			int score = input.nextInt();
			if (i == 0) {
				z = score;
			}
			if (i == 1) {
				l = score;
			}
			if (i == 2) {
				w = score;
			}
			// 等價於sum=sum+score;
			sum += score;
		}
		System.out.println(sum / num);
		System.out.println(zs + "的成績爲:" + z);
		System.out.println(ls + "的成績爲:" + l);
		System.out.println(wmz + "的成績爲:" + w);
	}
}

什麼是數組

數組是存儲相同數據類型多個元素的集合。

數組和變量的小知識:

  • 聲明一個變量就是在內存空間中劃出一塊合適的空間

  • 而聲明一個數組就是在內存空間中劃出一串相同數據類型且連續的空間

數組基本要素:

  • 標識符(數組名)
  • 數組元素
  • 元素下標:從0開始
  • 元素類型

在這裏插入圖片描述

數組聲明方式:

動態聲明數組

1.第一種聲明動態數組分二步走:

  • 聲明數組: int[] score; //c++的成績 告訴計算機數據類型是什麼
	 語法1:數據類型 數據名[];
 
 		int  score[];
 
	 語法2:數據類型[] 數據名;

	    int[] score;

注意:聲明數組時不規定數組長度

  • 分配空間: 告訴計算機分配幾個連續的空間
	語法:數組名 = new 數據類型[數組的長度];

 		score=new int[8]

附:使用數組分四步走:聲明數組、分配空間、賦值、使用

  • 賦值: score[0]=88; 向分配的格子裏放數據
  • 使用: score[0]+=1;

2.第二種聲明動態數組分一步走:

  • 聲明數組且分配空間(如下)
      語法1:數據類型[] 數組名 = new 數據類型[數組的長度];(推薦使用)
                
          int[] arr = new int[5]; 	

      語法2:數據類型 數組名[]  = new 數據類型[數組的長度];

           int arr[] = new int[5]; 	

注意:聲明數組時左邊無需指定數組長度 但右邊需指定數組長度,系統會給出初始化值

附:使用數組分三步走:聲明數組且分配空間、賦值、使用

  • 賦值:arr[0]=1; arr[1]=2; 向分配的格子裏放數據
  • 使用: score[0]+=1;

靜態聲明數組

  • 邊聲明邊賦值的有兩種聲明方式:
      
      語法1:數據類型[] 數組名 = new 數據類型[]{元素1,元素2,…};

           int[] score = new int[] { 99, 98, 97 };

注意:靜態聲明數組時,靜態賦值不能指定數據長度

   語法2:簡寫方式:  數據類型[] 數組名 = {元素1,元素2,…};  
      
        int[] score = { 99, 98, 97 };

​ 注意:靜態聲明數組時,要手工給出初始化值,系統會自動計算數組長度

數組存儲類型小知識:

  • 數組既可以存儲基本數據類型,也可以存儲引用數據類型。

  • 數組元素根據類型不同,有不同的初始值。

    int類型初始化值爲:0

    String類型初始化值爲: null

動態數組的演示案例:

package org.gyun.array;

/**
 * @ClassName:ArrayTest2.java
 * @Description:聲明數組並化內存圖
 * @Author:DongGaoYun
 * @URL: www.gyun.org
 * @Email:[email protected]
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @Date:2019-9-9 下午2:56:08
 * @Version:1.0
 */
public class ArrayTest2 {

	/**
	 * 完成需求: 畫一個數組的內存圖
	 */
	public static void main(String[] args) {
		// 動態聲明數組 使用動態數組可以分四步走:聲明數組、開闢空間、賦值、使用,
		//使用動態數組也可以分三步走::聲明數組並開闢空間、賦值及使用
		//1.聲明數組並開闢空間
		int[] num = new int[5];//推薦使用
		//int num[] = new int[5];
		//2.賦值
		num[0] = 1;
		num[4] = 4;
		//3.使用
		System.out.println(num[0]);//1
		System.out.println(num[1]);//0
		System.out.println(num[4]);//4			
	}

}

Java中的內存分配以及棧和堆的小知識:

  • 棧(掌握)
    存放局部變量
  • 堆(掌握)
    存放new出來的數組或對象
  • 方法區
    後面面向對象部分講解

內存圖:

在這裏插入圖片描述

數組猜數字演示案例:

package org.gyun.array;

import java.util.Scanner;

/**
 * @ClassName:ArrayTest3.java
 * @Description:猜數字
 * @Author:DongGaoYun
 * @URL: www.gyun.org
 * @Email:[email protected]
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @Date:2019-9-9 下午3:18:48
 * @Version:1.0
 */
public class ArrayTest3 {

	/**
	 * 需求: 有一個數列:8,4,2,1,23,344,12 循環輸出數列的值 有固定次數,我們就用for 普通for 增加for
	 * 
	 * 求數列中所有數值的和 在用for遍歷時累加
	 * 
	 * 猜數遊戲 從鍵盤中任意輸入一個數據,判斷數列中是否包含此數 用Scanner錄入數字 數字用==最好 對象用equals最好
	 */
	public static void main(String[] args) {
		// 聲明數組 四步走:聲明數組、開闢空間、賦值、使用
		// int[] num=new int[]{8,4,2,1,23,344,12};
		int[] num = { 8, 4, 2, 1, 23, 344, 12 };
		int count = 0;
		// 普通for
		for (int i = 0; i < num.length; i++) {
			System.out.print(num[i] + "\t");
			count += num[i];
		}
		// 打印之和
		System.out.println(count);
		// 三步走:引包、創建對象、使用數據
		Scanner input = new Scanner(System.in);
		System.out.print("請輸入一個數字:");
		int nums = input.nextInt();
		boolean flag = false;
		for (int i = 0; i < num.length; i++) {
			//遍歷元素時,只要是輸入的值與數組元素的值相同,就把標識變量的值變爲true,然後就跳出。,
			if (nums == num[i]) {
				flag = true;
				break;
			}
		}
		// 判斷
		if (flag) {
			System.out.println("恭喜你,猜對了!");
		} else {
			System.out.println("繼續加油!");
		}
	}
}

求最大值演示案例:

package org.gyun.array;

import java.util.Scanner;

/**
 * @ClassName:ArrayTest3.java
 * @Description:求出最大值
 * @Author:DongGaoYun
 * @URL: www.gyun.org
 * @Email:[email protected]
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @Date:2019-9-9 下午3:18:48
 * @Version:1.0
 */
public class ArrayTest4 {

	/**
	 * 需求: 用鍵盤輸入五位學員成績,並求出最大值
	 * 
	 * 求數列中所有數值的和 在用for遍歷時累加
	 * 
	 * 猜數遊戲 從鍵盤中任意輸入一個數據,判斷數列中是否包含此數 用Scanner錄入數字 數字用==最好 對象用equals最好
	 */
	public static void main(String[] args) {
		// 三步走:引包、創建對象、使用數據
		Scanner input = new Scanner(System.in);
		// 聲明數組 四步走:聲明數組、開闢空間、賦值、使用
		int[] score = new int[5];
		for (int i = 0; i < score.length; i++) {
			System.out.print("請輸入第"+(i+1)+"學員的java成績:");
			score[i] = input.nextInt();
		}
		int max = score[0];//注意一定是在賦值後再定義max變量,否則max的值是0
		// 普通for循環
		for (int i = 1; i < score.length; i++) {
			if (score[i] > max) {
				max = score[i];
			}
		}
		// 打印最大數
		System.out.println(max);
	}
}

求最小值演示案例:

package org.gyun.array;

import java.util.Scanner;

/**
 * @ClassName:ArrayTest3.java
 * @Description:求出最小值
 * @Author:DongGaoYun
 * @URL: www.gyun.org
 * @Email:[email protected]
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @Date:2019-9-9 下午3:18:48
 * @Version:1.0
 */
public class ArrayTest6 {

	/**
	 * 需求: 用鍵盤輸入五位學員成績,並求出最小值
	 * 
	 * 求數列中所有數值的和 在用for遍歷時累加
	 * 
	 * 猜數遊戲 從鍵盤中任意輸入一個數據,判斷數列中是否包含此數 用Scanner錄入數字 數字用==最好 對象用equals最好
	 */
	public static void main(String[] args) {
		// 三步走:引包、創建對象、使用數據
		Scanner input = new Scanner(System.in);
		// 聲明數組 四步走:聲明數組、開闢空間、賦值、使用
		int[] score = new int[2];
		for (int i = 0; i < score.length; i++) {
			System.out.print("請輸入第" + (i + 1) + "學員的java成績:");
			score[i] = input.nextInt();
		}
		int min = score[0];// 注意一定是在賦值後再定義min變量,否則min的值是0
		// 普通for循環
/*		for (int i = 1; i < score.length; i++) {
			if (score[i] <= min) {
				min = score[i];
			}
		}*/
		//增強for循環
		for (int s : score) {
			if (s < min) {
				min = s;
			}
		}
		// 打印最小數
		System.out.println(min);
	}
}

插入數字的案例演示:

package org.gyun.array;

import java.util.Scanner;

/**
 * @ClassName:ArrayTest3.java
 * @Description: 插入一個數字,並降序的排列 數組的靈活使用
 * @Author:DongGaoYun
 * @URL: www.gyun.org
 * @Email:[email protected]
 * @QQ:1050968899
 * @WeiXin:QingYunJiao
 * @Date:2019-9-9 下午3:18:48
 * @Version:1.0
 */
public class ArrayTest5 {

	/**
	 * 需求: 插入一個數字,並降序的排列 排序前的效果: 99 85 82 63 60 比如:98 排序前的效果:99 98 85 82 63 60
	 * int[] score = new int[6]; score[0]=99; score[1]=85; score[2]=82;
	 * score[3]=63; score[4]=60;
	 * 
	 * Scanner input=new Scanner(System.in); int scores=input.nextInt();
	 * 
	 * 
	 * 
	 * //int index=score.length-1; //比較 //遍歷一下 if(scores>score[i]){ index=i; }
	 * 
	 * for( int j=5;j>index;j--)
	 * 
	 * 1 score[5]=score[5-1-0]; 4 j=5 4 3 2 score[5-1]=score[5-1-1]; 3 j=4 3 2 3
	 * score[5-1-1]=score[5-1-2];2 j=3 2 1 4 score[5-1-2]=score[5-1-3] j=2
	 */
	public static void main(String[] args) {
		// 三步走:引包、創建對象、使用數據
		Scanner input = new Scanner(System.in);
		// 聲明數組 四步走:聲明數組、開闢空間、賦值、使用
		int[] score = new int[6];
		score[0] = 99;
		score[1] = 85;
		score[2] = 82;
		score[3] = 63;
		score[4] = 60;
		System.out.print("請輸入需要插入的值:");
		int scores = input.nextInt();
		int index = score.length - 1;

		// int index=socre.length-1;
		// 比較
		// 遍歷一下
		for (int i = 0; i < score.length; i++) {
			if (scores > score[i]) {
				index = i;
				//break 不加break會一直保存在index變量
				break;
			}
		}
		//這個遍歷給輸入的值騰空間
		for (int j = score.length - 1; j > index; j--) {
			score[j] = score[j - 1];
		}
		//賦值:
		score[index]=scores;
		for (int i = 0; i < score.length; i++) {
			System.out.println(score[i]);
		}
	}
}

Java數組的常見錯誤小知識:

  • ArrayIndexOutOfBoundsException: 數組索引越界異常
    原因:數組索引越界,訪問了不存在的下標(索引)。
  • NullPointerException: 空指針異常
    原因:數組不再指向堆內存了,如果還用數組名去訪問元素就會報錯。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章