陣列
容器,可以用來儲存同種資料型別的多個值
需要結合隱式轉換考慮
容器的型別和儲存資料的型別保持一致
陣列的定義:
格式一:
資料型別 [] 陣列名
int [] array
格式二:
資料型別 陣列名 []
int array []
陣列初始化:在記憶體中,為陣列容器開闢空間,並將資料存入容器中的過程
陣列靜態初始化和動態初始化的區別:
動態初始化:手動指定陣列長度,由系統給出預設初始化
靜態初始化:手動指定陣列元素,系統根據元素個數,計算長度
靜態初始化:
完整格式:
資料型別 []陣列名 = new 資料型別 [ ] {元素1,元素2,元素三,…};
簡化格式:
資料型別 []陣列名 = {元素1,元素2,元素三,…};
陣列長度定義後不變
動態初始化
初始化時只指定陣列長度,由系統為陣列分配初始值
格式:資料型別[] 陣列名 =new 資料型別[陣列長度];
陣列的地址值:
public class ArrayDemo1 {
public static void main(String[] args) {
int[] arr1 = new int[]{11,12,13,14};
int[] arr2 = {11,12,13,14};
String[] arr3 = new String []{"zhangsan","lisi","wangwu","zhaoliu"};
String[] arr4 = {"zhangsan","lisi","wangwu","zhaoliu"};
double[] arr5 = new double[]{161.5,189.6,179.9,193.8};
double[] arr6 = {161.5,189.6,179.9,193.8};
System.out.println(arr1);//[I@b4c966a
}
}
地址值:[I@b4c966a
地址值的格式含義:[ :表示是一個陣列
I :表示當前陣列裡面的元素都是int型別的
@ : 表示一個間隔符號(固定格式)
b4c966a:才是陣列真正地址(十六進位制)
陣列元素訪問格式:
陣列名[索引];
索引:下標,角標
特點:從0開始,逐個+1,連續不間斷
public class ArrayDemo2 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
//獲取陣列中的元素
int number = arr[0];
System.out.println(number);
System.out.println(arr[1]);
}
}
陣列的記憶體圖:
兩個陣列指向同一空間的記憶體圖
當兩個陣列指向同一個小空間時,其中一個陣列對小空間中的值發生了改變,那麼其他陣列再次訪問的時候都是修改之後的結果。
陣列遍歷:
java中,關於陣列的一個長度屬性,length
呼叫方式:陣列名.length
擴充:
自動生成陣列的遍歷方式
idea提供的:陣列名.fori
常見問題
索引越界
public class ArrayDemo2 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
//長度5
//最小索引:0
//最大索引:4
System.out.println(arr[10]);
}
}
陣列常見操作:
求最值
求和:
import java.util.Random;
public class ArrayDemo3 {
public static void main(String[] args) {
int[] arr = new int[10];
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int number = r.nextInt(100) + 1;
arr[i] = number;
}
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("所有資料的總和:" + sum);
int temp = sum /arr.length;
System.out.println("平均數"+ temp);
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (temp < arr[i]) {
count++;
}
}
System.out.println("一共有" + count + "個資料比平均數大");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
交換資料:
定義中間變數
打亂資料:
獲取隨機索引Random
import java.util.Random;
public class ArrayDemo4 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
Random r = new Random();
int number = r.nextInt(arr.length);
System.out.println(number);
}
}
例項:
import java.util.Random;
public class ArrayDemo4 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int number = r.nextInt(arr.length);
int temp = arr[i];
arr[i] = arr[number];
arr[number] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
java記憶體分配
棧:方法執行時使用的記憶體,比如main方法執行,進入方法棧中執行
堆:儲存物件或者陣列,new來建立的,都儲存在堆記憶體中
堆內開發的空間有地址值
方法區:儲存可以執行的class檔案
本地方法棧:JVM在使用作業系統功能的時候使用
暫存器:給CPU使用
方法
程式中最小的執行單元
main方法,主方法
作用:呼叫方法(解決程式碼重複問題) 提高程式碼複用性、可維護性
把一些程式碼打包,用的時候就呼叫
方法定義——一些程式碼打包
方法呼叫——手動呼叫
定義格式
最簡單:
public static void 方法名 () {
方法體 (就是打包起來的程式碼);
}
呼叫:方法名 () ;
方法必須先定義後呼叫,否則報錯
例項:
public class MethodDemo1 {
public static void main(String[] args) {
//呼叫方法
playGame();
playGame();
}
//定義一個方法
//放在類內,main方法之外
public static void playGame (){
System.out.println("1");
System.out.println("2");
System.out.println("3");
System.out.println("4");
System.out.println("5");
}
}
public class MethodDemo2 {
public static void main(String[] args) {
student();
}
public static void student(){
System.out.println("張三");
System.out.println("性別男");
System.out.println("20歲");
System.out.println("身高187");
}
}
public class MethodDemo3 {
public static void main(String[] args) {
getSum();
}
public static void getSum(){
int number1 = 10;
int number2 = 20;
int sum = number1 + number2;
System.out.println(sum);
}
}
帶引數:
定義:
public static void 方法名(引數) {… …}
呼叫:
method(變數);
形參:方法定義中引數
實參:方法呼叫中引數
呼叫時,形參和實參必須一一對應
帶返回值:
格式:
public static 返回值型別方法名(引數) {
方法體;
return 返回值;
}
呼叫:
直接呼叫:方法名(實參);
賦值呼叫:整數型別 變數名 = 方法名 (實參);
輸出呼叫:System.out.println(方法名(實參));
public class MethodDemo4 {
public static void main(String[] args) {
//直接呼叫
method1(10,30,50);
//賦值呼叫
int sum = method1(10,30,50);
System.out.println(sum);
//輸出呼叫
System.out.println(method1(10,30,50));;
}
public static int method1(int a, int b,int c) {
return a + b + c;//返回給方法的呼叫處
}
}
方法注意事項:
方法不呼叫就不執行
方法與方法是平級關係,不能互相巢狀定義(巢狀呼叫可以,不能巢狀定義)
方法的編寫順序和執行順序無關
方法的過載:
在同一類中,定義了多個同名的方法,這些同名的方法具有同種功能
每個方法具有不同引數型別或引數個數
同一個類中,方法名相同,引數不同的方法,與返回值無關
引數不同:個數不同、型別不同、順序不同
public class MethodDemo5 {
public static void main(String[] args) {
method1((byte)5, (byte)6);
}
public static void method1(byte b1,byte b2) {
System.out.println(b1 == b2);
}
public static void method1(short s1,short s2) {
System.out.println(s1 == s2);
}
public static void method1(int i1,int i2) {
System.out.println(i1 == i2);
}
public static void method1(long o1,long o2) {
System.out.println(o1 == o2);
}
}
練習:
複製陣列:
public class MethodDemo6 {
public static void main(String[] args) {
//定義原始陣列
int[] arr = {1,2,3,4,5,6,7,8,9};
//呼叫方法複製資料
int [] copyArr = method1(arr,3,7);
//遍歷copyArr
for (int i = 0; i < copyArr.length; i++) {
System.out.print(copyArr[i] + " ");
}
}
public static int[] method1(int [] arr,int from,int to) {
//定義陣列,動態初始化
int [] newArr = new int[to-from];
//複製資料
//偽造索引的思想
int index = 0;
for (int i = from; i < to; i++) {
newArr[index] = arr[i];
index++;
}
return newArr;
}
}
平方根應用
獲取隨機數
導包 – Random這個類在哪
import java.util.Random
建立物件
Random r = new Random () ;
上式中只有r是變數名,可以變,其他的都不允許變
接收資料
int number = r.nextInt(隨機數範圍);
上式中只有number是變數名,可以變,其他都不能變
import java.util.Random;
public class Demo2 {
public static void main(String[] args) {
Random r = new Random();
int number = r.nextInt(9) + 7;// 7~15
System.out.println(number);
}
}
猜數字
import java.util.Random;
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
Random r = new Random();
int number = r.nextInt(100) + 1;// 1~100
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("Enter a number: ");
int guessnumber = sc.nextInt();
if(guessnumber > number) {
System.out.println("大了");
}else if(guessnumber > number) {
System.out.println("小了");
}else {
System.out.println("Guess number is: " + guessnumber);
System.out.println("You guessed correctly!");
break;
}
}
}
}
總結:
本週繼續學習java陣列和方法相關的基礎語法,並進行了相關練習。
下週進行物件導向和管理系統的相關內容的學習。
本週主要問題是學習態度不夠積極,學習效率較低,要合理規劃時間進行有效學習。