Java03 二維數組|方法

一、聲明數組和初始化(掌握)

數據類型[]  數組名 ;
數據類型  數組名[] ;

靜態初始化

數據類型[]  數組名 = {元素1,元素2,元素3};

動態初始化

數據類型[]  數組名 = new 數據類型[5];
數組名[0] = 元素1;

二、數組的內存結構(掌握)

package com.hl.array;public class ArrrayDemo1 {public static void main(String[] args) {//局部變量//基本數據類型int i = 1;//引用數據類型int[] array = new int[5];System.out.println(i);//棧區的值System.out.println(array);//堆區的內存地址}
}

package com.hl.array;public class ArrrayDemo1 {public static void main(String[] args) {//局部變量//基本數據類型int i = 1;//引用數據類型int[] array = new int[5];System.out.println(i);//棧區的值System.out.println(array);//堆區的內存地址int[] array2 = array;array2[0] =  1;System.out.println(array2[0]);//1System.out.println(array[0]);//0 1}
}

三、使用數據

1、數據的復制 (深拷貝和淺拷貝)

int[] array1 = new int[5];
int[] array2 = array1;  //內存地址的copy 淺拷貝深拷貝拷貝的是數組的值
package com.hl.array;import java.util.Arrays;public class ArrayDemo2 {public static void main(String[] args) {int[] array1 = new int[10];int[] array2 = new int[array1.length];for (int i = 0; i < array2.length; i++) {array2[i] = array1[i];}array1[0] = 1;array2[0] = 2;System.out.println(Arrays.toString(array1));System.out.println(Arrays.toString(array2));}
}

2、數組的插入和刪除

數組插入,刪除:效率低,牽涉到擴容和數據元素移動。

數據:查詢|修改效率高 ,內存空間連續,有索引下標,可以快速定位。

3、算法(了解)

排序:冒泡、選擇排序

查找:二分查找

沒有二分查找時,是遍歷所有元素 數組長度100,最快1次,最慢100次,平均50次

前提條件是 數組是有序的。

int[]? array = {1,2,3,4,5,6,7}

123 4 567

mid = 4

num 10 num>mid [5,6,7]

min = mid+1 max=length-1

mid = 6

min=max=mid mid==10

四、二維數組

二維數組本質上就是一個一維數組,每一個元素又是一個一維數組。

int[] array = {1,2,3,4};
int[][] array = {{1,2,3,4},{5,6,7,8}
};//索引坐標    從二維數組中獲取數據int[] arr2 = array[0];
sout(arr2[0] + arr2[1])sout(arr[0][0])

二維數組的定義和初始化

靜態初始化:
int[][] array = {{1,2,3,4},{5,6,7,8}
};動態初始化:
int[][] array = new int[2][4];
//2行 4列
0  0  0  0
0  0  0  0
array[0][0]  ... [0][3]
array[1][0]  ... [1][3]

二維數組的遍歷

package com.hl.array2;public class Demo1 {public static void main(String[] args) {int[][] array = {{1,2,3},{4,5,6},{7,8,9,10}};//遍歷查詢//求二維數組長度System.out.println(array.length);for(int i=0;i<array.length;i++){//一維數組int[] array2 = array[i]; // {1,2,3}//遍歷每一個一維數組for (int j = 0; j < array2.length; j++) {System.out.print(array2[j]+"  ");}System.out.println();//換行符}}
}

package com.hl.array2;public class Demo2 {public static void main(String[] args) {int[][] a = {{1,2,3},{4,5,6},{7,8,9,10}};//作為二維數組,通過平面圖形,利用坐標遍歷for (int i = 0; i < a.length; i++) {//外層循環行for (int j = 0; j < a[i].length; j++) {//內層循環列System.out.print(a[i][j] +"  ");}System.out.println();}}
}

內存空間分配

使用二維數據

需求:生成10注雙色球

//生成10注雙色球
int[][] tickets = new int[10][7];
for (int i = 0; i < tickets.length; i++) {for (int j = 0; j < tickets[i].length; j++) {if(j < 6){//前6次,生成紅色球tickets[i][j] = random.nextInt(33)+1;}else{//生成一次藍色球tickets[i][j] = random.nextInt(16)+1;}}
}
//得到的二維數據
System.out.println(tickets);

改造需求:要求前6個球不能重復

//生成10注雙色球
int[][] tickets = new int[20][7];
for (int i = 0; i < tickets.length; i++) {for (int j = 0; j < tickets[i].length; j++) {if(j < 6){//前6次,生成紅色球tickets[i][j] = random.nextInt(33)+1;//解決數字重復問題for (int k = 0; k < j; k++) {if(tickets[i][j] == tickets[i][k]){j--;break;}}}else{//生成一次藍色球tickets[i][j] = random.nextInt(16)+1;}}
}
//得到的二維數據
System.out.println(Arrays.deepToString(tickets));

五、方法

1、了解方法的作用

什么是方法?

方法是具有特定功能的代碼塊。

簡單的理解就是:把一段完整的代碼,看成一個整體,并給這段代碼起個名字,以后在用的時候,使用這個名字就相當于執行了這一段代碼。

方法必須先創建才可以使用,創建只需要進行一次創建,使用可以多次。方法的創建過程稱為方法的定義。

2、聲明方法(定義方法)

方法的定義

方法隸屬于類,因此方法要定義在類中,且方法不能定義在別的方法內。---類后面會詳細講。

方法定義的格式

public static 返回值類型 方法名(參數列表){方法體
}public static void 方法名(){  //無參方法}public static 返回值(基本數據|引用類型) 方法名(){  //無參方法return 10;
}

public、static在講類和對象的時候會詳細講,此處先固定這么寫。

方法名的命名規范和變量名的命名規范相同。

返回值、參數列表 下面專門講解

方法的分類

方法按有沒有參數,有沒有返回值可以分為以下4類:

  1. 無參數無返回值方法

  2. 無參數有返回值方法

  3. 有參數無返回值方法

  4. 有參數有返回值方法

3、調用方法

package com.hl.methodDemo1;public class MethodDemo2 {//main方法 入口方法public static void main(String[] args) {//調用方法//調用無參方法  方法名()printHello();printHello();//調用有參方法  方法名(值,值)   實參sum(1,2);int num = sum2(10,12);System.out.println(num);}//創建一個方法,在方法內打印helloworldpublic static void printHello(){System.out.println("hello world!");}//創建一個方法,在方法內打印兩個數字的和(傳入兩個參數)//sum(int i,int j) 形參(一個變量,一個占位符)public static void sum(int i,int j){System.out.println(i+j);}//創建一個方法,返回兩個數字的和(返回 --->要求有返回值)public static int sum2(int i,int j){return i+j;}
}

4、方法的值傳遞

基本類型的值傳遞(傳遞的是數值)

package com.hl.methodDemo1;public class MethodDemo3 {public static void main(String[] args) {//調用方法int i = 1;m1(i);System.out.println("main...."+i);}//聲明方法public static void m1(int i){i++;System.out.println("m1...."+i);}
}

package com.hl.methodDemo1;public class MethodDemo3 {public static void main(String[] args) {//調用方法int i = 1;
//        m1(i);
//        System.out.println("main...."+i);int j = m2(i);System.out.println(i);System.out.println(j);}//聲明方法public static void m1(int i){i++;System.out.println("m1...."+i);}public static int m2(int i){i++;return i;}
}

引用類型的值傳遞(堆區內存地址)

package com.hl.methodDemo1;public class MethodDemo4 {public static void main(String[] args) {//調用方法int[] array = {6,5,4,3,2,1};m1(array);System.out.println(array[0]);//6  1System.out.println(array[1]);//5  2System.out.println(array[2]);//4  4}//定義方法public static void m1(int[] array){array[0] = 1;array[1] = 2;System.out.println(array[0]);//1System.out.println(array[1]);//2System.out.println(array[2]);//4}
}

package com.hl.methodDemo1;public class MethodDemo5 {public static void main(String[] args) {int i = 1;int[] array = new int[10];i = m1(i,array);System.out.println(i);//8、  1   3   4System.out.println(array[0]);//9、 2}public static int m1(int i ,int[] array){i++;array[0] = i++;return ++i;}//    public static void m1(int i ,int[] array){
//        i++;
//        array[0] = i++;
//        System.out.println(array[0]);//15、2
//        System.out.println(i);//16、3
//    }}

5、方法的重載

同一個類中,方法名稱相同,參數列表不同,稱為方法重載。

package com.hl.methodDemo1;import java.util.Random;/*
Overload 和 Override 的區別?
方法重載 和 方法重寫 的區別?同一個類中,方法名稱相同,參數列表不同,稱為方法重載。(跟返回值無關)參數列表不同:參數個數不同,類型不同  或者  類型順序不同max(int i,int j);max(int j,int i);max(int i,double j); //重載max(double i;int j) //重載*/
public class MethodOverload {public static void main(String[] args) {Math.max(1,3);Math.max(1.0,3.0);Random r = new Random();r.nextInt();r.nextInt(100);}//方法名---變量名 見名知意public static void add() {System.out.println("........");}public static int add(int a, int b){return a+b;}public static double add(double a, double b){return a+b;}public static double add(double a, int b){return a+b;}public static double add(int a, double b){return a+b;}}

6、不定參數方法

package com.hl.methodDemo1;
/*
不定參數注意事項:int...變量名 不定參數(0到多個變量),底層是數組一個方法中最多只能有一個不定參數,并且不定參數必須是最后一個參數*/
public class MethodDemo6 {public static void main(String[] args) {
//        int sum = sum();
//        System.out.println(sum);int[] array = {1,2,3};//調用者int sum = sum2(null);System.out.println(sum);}//自定義一個方法,求多個int變量的和//int...變量名 不定參數(0到多個變量),底層是數組public static int sum(int...num){int sum = 0;for (int i = 0; i < num.length; i++) {sum += num[i];}return sum;}
//    public static int sum(int[] array){
//        return 0;
//    }//定義方法public static int sum2(int[] num){int sum = 0;if(num != null){  //避免空指針異常for (int i = 0; i < num.length; i++) {//num 為null,出現空指針異常sum += num[i];}}return sum;}//自定義方法public static void sum3(double d1,double d2,int...args){}}

7、方法練習

1. 需求:設計一個方法,自定義數據范圍(最小值和最大值),根據鍵盤錄入獲取用戶輸入的數據。
要求用戶必須輸入num1~num2之間的數,如果不是,讓用戶重新輸入,直到用戶輸入的內容合法。

package com.hl.homework;import java.util.Scanner;public class WorkDemo1 {//1. 需求:設計一個方法,獲取用戶輸入的數據。// 要求用戶必須輸入0~9之間的數,如果不是,讓用戶重新輸入,直到用戶輸入的內容合法。public static int input(){Scanner scanner = new Scanner(System.in);int num = -1;do{System.out.println("請錄入0-9的數字:");num = scanner.nextInt();if(num >= 0 && num <= 9){break;}else{System.out.println("錄入錯誤,請重新錄入");}}while(true);return num;}//2. 需求:設計一個方法,自定義數據范圍,獲取用戶輸入的數據。// 要求用戶必須輸入num1~num2之間的數,如果不是,讓用戶重新輸入,直到用戶輸入的內容合法。public static int input(int num1,int num2){Scanner scanner = new Scanner(System.in);int num = -1;do{System.out.println("請錄入"+num1+"-"+num2+"的數字:");num = scanner.nextInt();if(num >= num1 && num <= num2){break;}else{System.out.println("錄入錯誤,請重新錄入");}}while(true);return num;}public static void main(String[] args) {
//        int num =  input();
//        System.out.println("接收到:"+num);int num = input(5,10);System.out.println("接收到:"+num);}
}

關于return關鍵字:

package com.hl.homework;public class WorkDemo2 {public static void main(String[] args) {//調用方法double money = getMoney();System.out.println(money);}//方法定義//返回值的方法,必須使用return關鍵字返回結果給調用者public static double getMoney(){int i = 1;
//        if(i > 1){
//            return 1000;
//        }else{
//            return 10000;
//        }//        while(true){
////            break;
//            return 100000;
//        }boolean flag = true;while(flag){return 1;//返回到方法調用位置//System.out.println("----不可達---");}System.out.println("-----while 外------");return 10000;}
}

需求2:定義一個方法,接收一個二維數組,求二維數組中元素的最大值和最大值的索引下標。

package com.hl.homework;public class WorkDemo3 {
//    需求2:定義一個方法,接收一個二維數組,求二維數組中元素的最大值。public static int getMax(int[][] array){int max = array[0][0];int x = 0;int y = 0;for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {
//                System.out.print(array[i][j] + " ");if(array[i][j] >= max){max = array[i][j];x = i;y = j;}}}System.out.println("最大值索引下標"+x+"--"+y);return max;}//定義一個方法, 編寫代碼, 求二維數組中,第2行的平均值。public static double getAvg(int[][] array){int sum = 0;for (int i = 0; i < array[1].length; i++) {sum += array[1][i];}return sum*1.0/array[1].length;}public static void main(String[] args) {int[][] array = {{1,22,3},{4,55,6},{7,8,9}};
//        int max = getMax(array);
//        System.out.println("最大值是:"+max);double avg = getAvg(array);System.out.println("第二行的平均值為:"+avg);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88599.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88599.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1. JVM介紹和運行流程

1. jvm是什么JVM&#xff08;Java Virtual Machine&#xff09;是 Java 程序的運行環境&#xff0c;它是 Java 技術的核心組成部分&#xff0c;負責執行編譯后的 Java 字節碼&#xff08;.class文件&#xff09;。jvm 說白了就是虛擬機&#xff0c;一個專門運行java字節碼文件的…

Spring Cloud Gateway 的路由和斷言是什么關系?

1. 基本概念 路由是 Spring Cloud Gateway 的基本組成單元。它定義了從客戶端接收到的請求應該被轉發到哪個目標服務。一個完整的路由通常包含以下幾個要素&#xff1a; ID (id)&#xff1a;路由的唯一標識符。目標 URI (uri)&#xff1a;請求最終要被轉發到的后端服務地址。斷…

線程屬性設置全攻略

目錄 一、線程屬性的概念 二、線程屬性的核心函數 1. 初始化與銷毀線程屬性對象 2. 常用屬性設置函數 三、線程屬性的設置示例 1. 設置線程為分離狀態 2. 設置線程棧大小 3. 設置線程調度策略和優先級 四、線程屬性的關鍵注意事項 1. 分離狀態&#xff08;Detached S…

蒼穹外賣-day06

蒼穹外賣-day06 課程內容 HttpClient微信小程序開發微信登錄導入商品瀏覽功能代碼 學習目標 能夠使用HttpClient發送HTTP請求并解析響應結果 了解微信小程序開發過程 掌握微信登錄的流程并實現功能代碼 了解商品瀏覽功能需求 功能實現&#xff1a;微信登錄、商品瀏覽 1. H…

安卓定制功能

未解決的定制功能 1.創建自定義分區 2.通過服務啟動應用進程 3.應用白名單 4.網絡白名單 5.應用鎖 6.默認launcher 7.多主頁動態切換 8.禁止狀態欄下拉/鎖屏頁面禁止下拉狀態欄&#xff08;兩種一起&#xff09; 9.導航欄動態打開關閉 10.固件默認是手勢還是導航欄 11.狀態欄動…

【項目】GraphRAG基于知識圖譜的檢索增強技術-實戰入門

GraphRAG—基于知識圖譜的檢索增強技術&#xff08;一&#xff09;GraphRAG入門介紹&#xff08;二&#xff09;GraphRAG基本原理回顧&#xff08;三&#xff09;GraphRAG運行流程3.1 索引&#xff08;Indexing&#xff09;過程3.2 查詢&#xff08;Query&#xff09;過程3.3 P…

Zookeeper添加SASL安全認證 修復方案

#作者&#xff1a;任少近 文章目錄1修復背景2 修復方案說明3 配置流程3.1停止zookeeper服務3.2Zookeeper添加SASL參數3.3配置jaas密碼文件3.4 添加啟動參數3.5啟動zookeeper服務3.6訪問測試4 Kafka連接zookeeper服務端配置4.1未配置身份認證4.2停止kafka服務4.3配置身份認證4.4…

AI進化論07:第二次AI寒冬——AI“改頭換面”,從“AI”變成“機器學習”

書接上回&#xff0c;上回咱們聊了神經網絡在第一次寒冬中的“蟄伏”與“萌動”。但別高興太早&#xff0c;AI很快就迎來了它的第二次“寒冬”&#xff08;大概從20世紀80年代末到90年代中期&#xff09;。這次寒冬啊&#xff0c;比第一次還“冷”&#xff0c;還“漫長”。AI這…

基于開源AI智能名片鏈動2+1模式與S2B2C商城小程序的渠道選擇策略研究

摘要&#xff1a;在數字化商業環境下&#xff0c;品牌與產品的渠道選擇對其市場推廣和運營成功至關重要。本文聚焦于如何依據自身品牌和產品特性&#xff0c;結合開源AI智能名片鏈動21模式與S2B2C商城小程序&#xff0c;運用科學的渠道選擇方法&#xff0c;慎重挑選1 - 2個適宜…

開源 C# .net mvc 開發(八)IIS Express輕量化Web服務器的配置和使用

文章的目的為了記錄.net mvc學習的經歷。本職為嵌入式軟件開發&#xff0c;公司安排開發文件系統&#xff0c;臨時進行學習開發&#xff0c;系統上線3年未出沒有大問題。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接: 開源 C# .net mvc 開…

PostgreSQL安裝及簡單應用

下載地址&#xff1a;EDB: Open-Source, Enterprise Postgres Database Management 安裝 注意&#xff1a;端口號默認是5432 配置dbeaver應用&#xff0c;創建數據庫和表 -- 創建模式&#xff08;如果不存在&#xff09; CREATE SCHEMA IF NOT EXISTS bbbase;-- 創建序列&…

wedo智能車庫-----第31節(免費分享圖紙)

夸克網盤&#xff1a;https://pan.quark.cn/s/10302f7bbae0 高清圖紙源文件&#xff0c;需要的請自取

【springboot】IDEA創建SpringBoot簡單工程(有插件)

需求 使用SpringBoot開發一個web應用&#xff0c;瀏覽器發起請求/hello后&#xff0c;給瀏覽器返回字符串 hello world~ 步驟 1.創建Maven工程 2.導入spring-boot-stater-web起步依賴 3.編寫controller 4.提供啟動類 pom.xml文件了解 啟動類 新建包 創建類 package com.zw…

python正則表達式re(Regular Expression)

目錄 正則表達式&#xff1a; match()函數&#xff1a; search()函數&#xff1a; findall()函數&#xff1a; 正則表達式的參數&#xff1a; 表示字符范圍的參數&#xff1a; 表示字符出現的次數的參數&#xff1a; 表示同一類字符的參數&#xff1a; 貪婪和非貪婪模式…

事件驅動設計:Spring監聽器如何像咖啡師一樣優雅處理高并發

架構哲學&#xff1a;當咖啡店面對洶涌客流時&#xff0c;真正的優雅不是更快的動作&#xff0c;而是科學的協作機制。Spring事件驅動正是通過發布-訂閱模式&#xff0c;讓系統像頂級咖啡師般從容應對突發流量。一、從咖啡店看監聽器本質&#xff1a;3大核心組件拆解 場景還原&…

C++ const 關鍵字解析

const 是 C 中用于定義常量或指定不可變性的關鍵字&#xff0c;它在不同上下文中有不同的含義和用法。下面是對 const 的全面解析&#xff1a;1. 基本用法定義常量const int MAX_SIZE 100; const double PI 3.14159;這些值在程序運行期間不能被修改必須在定義時初始化與指針結…

[es自動化更新] Updatecli編排配置.yaml | dockerfilePath值文件.yml

鏈接&#xff1a;https://github.com/elastic/elasticsearch/tree/main/build-conventions elasticsearch自動化更新 本專欄使用updatecli實現自動化版本更新與依賴管理。 其配置通過編排文件&#xff08;updatecli-compose.yaml&#xff09;實現&#xff0c;該文件羅列了稱…

新手向:使用Python將多種圖像格式統一轉換為JPG

本文將詳細解析一個專業的Python腳本&#xff0c;它能夠將指定文件夾中的所有非JPG格式圖像批量轉換為JPG格式。這個腳本雖然代碼量不大&#xff0c;但包含了文件操作、圖像處理、異常處理等多個重要編程概念&#xff0c;非常適合初學者系統學習。環境準備在開始之前&#xff0…

深入剖析C++ RPC框架原理:有棧協程與分布式系統設計

深入剖析C RPC框架原理&#xff1a;有棧協程與分布式系統設計 &#x1f6e0;? 第一部分&#xff1a;RPC框架核心原理與技術架構 &#x1f310; 1.1 RPC在分布式系統中的核心地位 遠程過程調用&#xff08;RPC&#xff09;是現代分布式系統的基石&#xff0c;它實現了&#xf…

基于springboot+Vue的二手物品交易的設計與實現

基于springbootVue的二手物品交易的設計與實現 作者&#xff1a; Mr順 | 某大廠全棧開發工程師 | CSDN新星計劃導師 | Java領域優質創作者 技術棧&#xff1a; SpringBoot, JavaWeb, 數據庫等。精通Java、微信小程序開發。 項目亮點&#xff1a; 完整可運行&#xff1a; 提供…