2024暑假第四周總結

haoyinuo發表於2024-07-27

陣列

容器,可以用來儲存同種資料型別的多個值
需要結合隱式轉換考慮
容器的型別和儲存資料的型別保持一致

陣列的定義:

格式一:
資料型別 [] 陣列名
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陣列和方法相關的基礎語法,並進行了相關練習。
下週進行物件導向和管理系統的相關內容的學習。
本週主要問題是學習態度不夠積極,學習效率較低,要合理規劃時間進行有效學習。