Java開發筆記(二十)一維數組的用法

来源:https://www.cnblogs.com/pinlantu/archive/2018/11/07/9926226.html
-Advertisement-
Play Games

之前介紹的各類變數都是單獨聲明的,倘若要求定義相同類型的一組變數,則需定義許多同類型的變數,顯然耗時耗力且不宜維護。為此,編程語言引入了數組的概念,每個數組都由一組相同類型的數據構成,對外有統一的數組名稱,對內通過序號區分每個數據元素。數組類型由基本的變數類型擴展而來,在基本類型後面加上一對方括弧, ...


之前介紹的各類變數都是單獨聲明的,倘若要求定義相同類型的一組變數,則需定義許多同類型的變數,顯然耗時耗力且不宜維護。為此,編程語言引入了數組的概念,每個數組都由一組相同類型的數據構成,對外有統一的數組名稱,對內通過序號區分每個數據元素。
數組類型由基本的變數類型擴展而來,在基本類型後面加上一對方括弧,便形成了該類型對應的數組類別。在Java代碼中聲明數組變數有兩種形式,一種是在變數名稱後面添加方括弧,例如“int primeNumbers[]”;另一種是在類型後面添加方括弧,例如“int[] primeNumbers”。兩種形式表達的涵義完全一致,都是聲明一個名叫primeNumbers的整型數組,只是書寫習慣上存在區別。
聲明完數組變數,還得給它分配存儲空間。一個數組有多長,包含幾個元素,這需要程式員事先予以指定。分配數組空間的途徑有三種,說明如下:
1、利用語句“new 變數類型[數組長度]”分配空間,比如希望數組primeNumbers能夠容納四個元素,則可通過下麵這行語句實現:

		// 在方括弧內填入數字,表示數組有多大
		primeNumbers = new int[4];

 

其中關鍵字new的意思是創建一塊存儲空間,方括弧內部的數字表示該數組的元素個數。
2、在分配存儲空間的時候立即對數組進行初始化賦值,此時方括弧中間不填數字,而在方括弧後面添加花括弧,並且花括弧內部是以逗號分隔的一組數值。此時初始化賦值的代碼如下所示:

		// 方括弧內留空,然後緊跟花括弧,花括弧內部是以逗號分隔的一組數值
		primeNumbers = new int[]{2, 3, 5, 7};

 

3、上面的第二種寫法,之所以方括弧內沒填數字,是因為花括弧里已經確定了具體的元素數量。既然程式能夠自動推導元素的數量,那麼從元素值也能推知該元素的變數類型,如此一來花括弧前面的“new int[]”完全是冗餘的,於是就形成了以下的簡化寫法:

		// 以下是分配數組空間的第三種形式:賦值等號右邊直接跟著花括弧
		primeNumbers = {2, 3, 5, 7};

 

以上的賦值等號右邊直接跟著花括弧,花括弧裡面有四個整型數字,這便告訴編譯器:該數組需要分配四個元素大小,並且每個元素都是整型數值。

現在數組變數總算占據一塊地盤,根據數組名稱加上元素序號,即可訪問對應位置的數組元素。獲取某個數組元素的格式形如“數組名稱[元素序號]”,譬如primeNumbers[0]表示獲取下標為0的數組元素,Java代碼里的下標0對應日常生活中的第一個,因此primeNumbers[0]指的就是第一個數組元素。這個數組元素的用法跟普通變數一樣,既能對它賦值,也能把它列印出來。若要列印數組內部的所有元素數值,則可通過迴圈語句實現,通過“數組名稱.length”獲取該數組的長度,然後依次列印長度範圍之內的所有元素。下麵是聲明一個整型數組,並對每個數組元素賦值,最後遍歷列印各元素的完整代碼例子:

		// 以下是聲明數組的第一種形式:“變數類型 數組名稱[]”
		int primeNumbers[];
		// 以下是分配數組空間的第一種形式
		// 在方括弧內填入數字,表示數組有多大
		primeNumbers = new int[4];
		// 數組名稱後面的“[數字]”,就是數組元素的下標,表示當前操作的是第幾個數組元素
		primeNumbers[0] = 2; // 給下標為0的數組元素賦值,下標0對應日常生活中的第一個
		primeNumbers[1] = 3; // 給下標為1的數組元素賦值,下標0對應日常生活中的第二個
		primeNumbers[2] = 5; // 給下標為2的數組元素賦值,下標0對應日常生活中的第三個
		primeNumbers[3] = 7; // 給下標為3的數組元素賦值,下標0對應日常生活中的第四個
		// 下麵通過迴圈語句依次讀出數組中的所有元素
		// “數組名稱.length”表示獲取該數組的長度(數組大小)
		for (int i=0; i<primeNumbers.length; i++) {
			// 列印下標為i的數組元素
			System.out.println("prime number = "+primeNumbers[i]);
		}

  

數組的一個應用方向為數學上的數列運算,比如常見的斐波那契數列。話說數學家斐波那契養了一對兔子,他發現兔子出生兩個月後就有繁殖能力,並且一對兔子每個月能生產一對小兔子,那麼一年過後,總共有多少對兔子?這個兔子問題看起來得一個月一個月去數,第一個月只有一對小兔子;第二個月小兔子長成大兔子,但總共仍是一對兔子;第三個月大兔子生下一對小兔子,加起來有兩對兔子;第四個月大兔子又生下一對新的小兔子,上個月的小兔子長成大兔子,這下共有三對兔子……這麼一路數到第十二個月,把每個月的兔子數量情況整理為下麵的一張表格。

上表所示的每月兔子對數就構成了斐波那契數列,它的前12個數字依次為:1、1、2、3、5、8、13、21、34、55、89、144。仔細觀察發現該數列有個規律,從第三個數字開始,每個數字都是前兩個數字之和,如3=2+1、5=3+2、8=5+3等等。於是大可不必絞盡腦汁去計算每個月的兔子生育情況,完全可以把這項工作交給電腦程式,讓Java代碼幫助我們求解斐波那契數列。為此先聲明一個大小為12的整型數組,接著迴圈遍歷該數組,依次填入每個元素的數值。按照上述思路編寫的程式代碼示例如下:

		// 聲明一個兔子數量(多少對)的數組變數
		int rabbitNumbers[];
		// 一年有12個月,故兔子數組大小為12
		rabbitNumbers = new int[12];
		// 迴圈計算兔子數組在每個月的兔子對數
		for (int i=0; i<rabbitNumbers.length; i++) {
			if (i < 2) { // 數列的頭兩個元素都是1
				rabbitNumbers[i] = 1;
			} else { // 從第三個元素開始,每個元素都等於它的前面兩個元素之和
				rabbitNumbers[i] = rabbitNumbers[i-2] + rabbitNumbers[i-1];
			}
			int month = i+1;
			// 列印當前的月份和兔子對數
			System.out.println("第"+month+"個月,兔子對數="+rabbitNumbers[i]);
		}

 

最後運行這段整型數組的運算代碼,得到下列的日誌記錄,從中可見斐波那契數列的前12個數字。

第1個月,兔子對數=1
第2個月,兔子對數=1
第3個月,兔子對數=2
第4個月,兔子對數=3
第5個月,兔子對數=5
第6個月,兔子對數=8
第7個月,兔子對數=13
第8個月,兔子對數=21
第9個月,兔子對數=34
第10個月,兔子對數=55
第11個月,兔子對數=89
第12個月,兔子對數=144

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近看了很多我周圍的同學,也都是剛開始接觸Eclipse,但是都頭疼於eclipse的漢化問題。 好在的是,Eclipse的漢化比較簡單,不用到網上自己下載漢化包,而且關於這個軟體的漢化也非常的多,所以我也就寫一下我這邊的Eclipse版本的漢化。 步驟 版本:Eclipse Photon(2018 ...
  • 恢復內容開始 在Spring IOC模塊中Bean是非常重要的。在這裡我想給大家講講關於Bean對象實例化的三種註入方式: 首先,我先講一下關於Bean對象屬性值的兩種註入方式:set註入 和 構造註入 constructor-arg:通過構造函數註入。 property:通過setter對應的方法 ...
  • 這個demo是基於springboot項目的。 名詞介紹: ShiroShiro 主要分為 安全認證 和 介面授權 兩個部分,其中的核心組件為 Subject、 SecurityManager、 Realms,公共部分 Shiro 都已經為我們封裝好了,我們只需要按照一定的規則去編寫響應的代碼即可… ...
  • 函數 函數的定義 1.什麼是函數? 函數就是定義在類中的具有特定功能的一段獨立小程式。函數也稱為方法。 2.函數的格式: 修飾符 返回值類型 函數名(參數類型 形式參數1,參數類型 形式參數2,.. ) { 執行語句; return返回值; } 返回值類型:函數運行後的結果的數據類型。 參數類型:是 ...
  • 進程、線程 ​ 進程(Process) 是程式的運行實例。例如,一個運行的 Eclipse 就是一個進程。進程是程式向操作系統申請資源(如記憶體空間和文件句柄)的基本單位。線程(Thread)是進程中可獨立執行的最小單位。一個進程可以包含多個線程。進程和線程的關係,好比一個營業中的飯店與其正在工作的員 ...
  • about 演算法 項目介紹 工作之餘,代碼敲多了,停下來思考思考,會有異常不到的收穫。。。只為更好的自己 如何用棧實現隊列? 提示下:用一個棧肯定是沒辦法實現隊列,但如果我們有兩個棧呢? 分析:棧和隊列的特性 棧是先進後出,FILO 出入元素都是在同一端(棧頂) 入棧 1540432924606.p ...
  • 一、 性能往往是特定情景下的評價,泛泛地說性能“好”或者“快”,往是具有誤導性的。通過引入基準測試,我們可以定義性能對比的明確條件、具體的指標,進而保證得到定量的、可重覆的對比數據,這是工程中的實際需要。 不同的基準測試其具體內容和範圍也存在很大的不同。如果是專業的性能工程師,更加熟悉的可能是類似S ...
  • 公司推進Jenkins自動化部署,因為web站點都是集群部署,部署需要測試指定伺服器web服務是否成功啟動,頁面是否正常訪問,經過不斷baidu發現,python的request模塊可以很好的解決這一問題。本文記錄瞭解決這一問題的過程。 安裝包管理工具pip 安裝requests模塊 請求http資 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...