詳解java一維數(shù)組及練習(xí)題實(shí)例
一維數(shù)組
1.一維數(shù)組的定義方式:
int[] array1 = new int[3];//聲明創(chuàng)建一個(gè)包含3個(gè)元素的數(shù)組array1(初始值為0) int[] array2 = {1, 2, 3};//聲明、創(chuàng)建并初始化一個(gè)包含3個(gè)元素的數(shù)組 int[] array3 = new int[] {1, 2, 3};//聲明、創(chuàng)建并初始化一個(gè)包含3個(gè)元素的整型數(shù)組 int[] array4; array[4] = {1, 2, 3}//先聲明一個(gè)數(shù)組array,再進(jìn)行創(chuàng)建及初始化 int[] array5 = new int[3]; array5[0] = 1; array5[1] = 2; array5[2] = 3;//先聲明、創(chuàng)建一個(gè)具有3個(gè)元素的數(shù)組,再用賦值語(yǔ)句進(jìn)行初始化
2.利用一維數(shù)組輸出斐波那契數(shù)列的前20項(xiàng)
public static void fib(int[] array) { array[0] = 1; array[1] = 1; for (int i = 2; i < array.length; i++) { array[i] = array[i - 1] + array[i - 2]; } System.out.println(Arrays.toString(array)); }//記得在主函數(shù)中創(chuàng)建array數(shù)組
題目練習(xí)
1.實(shí)現(xiàn)二分查找算法:有序的數(shù)組
public class TestDemo1 { public static int binary(int[] array, int key) {//key為要查找的數(shù) Arrays.sort(array);//正序排列數(shù)組 System.out.println("由從小到大順序排列數(shù)組:" + Arrays.toString(array)); int left = 0; int right = array.length - 1;//將數(shù)組最小下標(biāo)與最大下標(biāo)分別賦值給left和right int mid = 0;//將中值初始化 while (left <= right) {//“=”條件防止當(dāng)輸入的值為數(shù)組最大下標(biāo)指向的數(shù)時(shí),不進(jìn)入循環(huán),而返回-1的情況 mid = (left + right) / 2;//二分法原理為折半查找,故中間值為左右下標(biāo)之和除以2 if (key == array[mid]) {//如果第一次中間下標(biāo)指向的值正好等于要查找的值,返回該下標(biāo) return mid; } else if (key > array[mid]) {//如果如果輸入的值大于中間下標(biāo)指向的值,則將當(dāng)前中值下標(biāo)作為下一次循環(huán)的左下標(biāo) left = mid + 1;/*“+1”的含義:防止輸入的值為數(shù)組最大下標(biāo)指向的值,當(dāng)進(jìn)行二分查找最后一步時(shí),因?yàn)閙id為int類型,所以會(huì)導(dǎo) 致左邊下標(biāo)不在發(fā)生變化,所以要+1;當(dāng)+1時(shí),左邊下標(biāo)變?yōu)樯弦淮沃兄迪聵?biāo)的后一位,不影響此方法的正確性,還可以減少計(jì)算步驟*/ } else {//只剩下輸入的數(shù)下標(biāo)小于中值下標(biāo)的情況,將當(dāng)前中值下標(biāo)作為下次循環(huán)的右下標(biāo) right = mid - 1;//與“+1”含義類似,防止輸入的數(shù)對(duì)應(yīng)的為最右下標(biāo) } } return -1;//在數(shù)組中找不到輸入的數(shù),返回-1 } public static void main(String[] args) { int[] array = {22, 15, -46, 35, 69, 20}; System.out.println("請(qǐng)輸入你想查找的數(shù)字:"); Scanner scanner = new Scanner(System.in); int key = scanner.nextInt(); System.out.println(binary(array, key)); } }
2.求連續(xù)子數(shù)組的最大和
public class TestDemo1 { public static void sumArray(int[] array) { int sum = array[0];//對(duì)數(shù)組求和的變量 int max = array[0];//求和最大值的變量 for (int i = 1; i < array.length; i++) {//從第一項(xiàng)開(kāi)始循環(huán) if (sum + array[i] < array[i]) {//如果前幾項(xiàng)的和與本項(xiàng)之和小于本項(xiàng),則最大連續(xù)子數(shù)組的和肯定不包括前幾項(xiàng) sum = array[i];//將本項(xiàng)的值賦給sum,之后的循環(huán)求和從本項(xiàng)依次向后相加 } else { sum = sum + array[i];//如果前幾項(xiàng)的和與本項(xiàng)之和大于本項(xiàng),則繼續(xù)向后執(zhí)行遞加操作 } if (sum >= max) {//每次相加之后與初始的max值相比較,如果和大于max的值,則更新max,最后返回的max值即為最大連續(xù)子數(shù)列的和 max = sum; } } System.out.println("連續(xù)子數(shù)組最大和為:" + max); } public static void main(String[] args) { int[] array = {1, -2, 3, 10, -4, 7, 2, -5}; sumArray(array); } }
3.交換兩個(gè)數(shù)
public class TestDemo1 { public static void swap(int a,int b) { int tmp = 0; tmp = a; a = b; b = tmp; } public static void main(String[] args) { int a = 10; int b = 20; swap(a,b); System.out.println(a); System.out.println(b); } }
用上面寫(xiě)的方法在執(zhí)行交換兩個(gè)數(shù)操作數(shù)會(huì)出現(xiàn)錯(cuò)誤,原因:
在主函數(shù)中swap(a,b)操作實(shí)際是將實(shí)參a,b的地址拷貝到swap方法中,即傳址。在swap方法中進(jìn)行數(shù)值交換操作時(shí)只是交換了該方法中形參的地址,而原本實(shí)參的地址并沒(méi)有改變,所以輸出的a,b值沒(méi)有發(fā)生改變。
Java中的基本元素不支持傳址,必須是對(duì)象或者數(shù)組才能傳址
可作如下修改
class MyVlue { int data; } public class TestDemo1 { public static void swap(MyVlue myVlue,MyVlue myVlue2) { int tmp = myVlue.data; myVlue.data = myVlue2.data; myVlue2.data = tmp; } public static void main(String[] args) { MyVlue myVlue = new MyVlue(); myVlue.data = 10; MyVlue myVlue2 = new MyVlue(); myVlue2.data = 20; swap(myVlue,myVlue2); System.out.println(myVlue.data); System.out.println(myVlue2.data); } } //新建對(duì)象進(jìn)行數(shù)值的交換,交換的是實(shí)參
4.逆置數(shù)組
public class TestDemo1 { public static void invertArray(int[] array) { System.out.println("輸出該數(shù)組:" + Arrays.toString(array)); for (int front = 0, end = array.length - 1; front < end; front++, end--) {//循環(huán)將數(shù)組下標(biāo)由第一項(xiàng)遞增,最后一項(xiàng)遞減,當(dāng)遞增的下標(biāo)超過(guò)遞減的下標(biāo)時(shí),結(jié)束循環(huán) int temp = array[front];//將數(shù)組的第一個(gè)元素臨時(shí)賦值給變量temp array[front] = array[end];//將數(shù)組最后的元素賦值到數(shù)組的第一個(gè)元素 array[end] = temp;//將temp的值賦給數(shù)組最后的元素,實(shí)現(xiàn)數(shù)組下標(biāo)不變,但元素的值進(jìn)行倒置的操作 } System.out.println("將該數(shù)組倒置后輸出:" + Arrays.toString(array)); } public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; invertArray(array); } }
以上就是關(guān)于java一維數(shù)組及練習(xí)題的全部知識(shí)點(diǎn)內(nèi)容,感謝大家的閱讀和對(duì)腳本之家的支持。
相關(guān)文章
SpringCloud整合Nacos實(shí)現(xiàn)流程詳解
這篇文章主要介紹了SpringCloud整合Nacos實(shí)現(xiàn)流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09基于Java實(shí)現(xiàn)的Dijkstra算法示例
這篇文章主要介紹了基于Java實(shí)現(xiàn)的Dijkstra算法示例,一個(gè)比較典型的算法示例,需要的朋友可以參考下2014-07-07Spring Boot構(gòu)建系統(tǒng)安全層的步驟
這篇文章主要介紹了Spring Boot構(gòu)建系統(tǒng)安全層的步驟,幫助大家更好的理解和學(xué)習(xí)使用Spring Boot框架,感興趣的朋友可以了解下2021-04-04Java中的System.arraycopy()淺復(fù)制方法詳解
這篇文章主要介紹了Java中的System.arraycopy()淺復(fù)制方法詳解,Java數(shù)組的復(fù)制操作可以分為深度復(fù)制和淺度復(fù)制,簡(jiǎn)單來(lái)說(shuō)深度復(fù)制,可以將對(duì)象的值和對(duì)象的內(nèi)容復(fù)制;淺復(fù)制是指對(duì)對(duì)象引用的復(fù)制,需要的朋友可以參考下2023-11-11SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫(kù)分表
本文主要介紹了SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫(kù)分表,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03在IDEA中配置tomcat并創(chuàng)建tomcat項(xiàng)目的圖文教程
這篇文章主要介紹了在IDEA中配置tomcat并創(chuàng)建tomcat項(xiàng)目的圖文教程,需要的朋友可以參考下2020-07-07Java對(duì)xls文件進(jìn)行讀寫(xiě)操作示例代碼
Java開(kāi)發(fā)項(xiàng)目中經(jīng)常會(huì)碰到處理Excel文件中數(shù)據(jù)的情況,下面這篇文章主要給大家介紹了利用Java對(duì)xls文件進(jìn)行讀寫(xiě)操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-08-08Java中如何將?int[]?數(shù)組轉(zhuǎn)換為?ArrayList(list)
這篇文章主要介紹了Java中將?int[]?數(shù)組?轉(zhuǎn)換為?List(ArrayList),本文通過(guò)示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12Spring Boot實(shí)戰(zhàn)之逐行釋義Hello World程序
spring boot 是基于Spring的一個(gè)框架,Spring boot幫我們集成很多常用的功能,使得整個(gè)配置更加簡(jiǎn)單。這篇文章主要介紹了Spring Boot實(shí)戰(zhàn)之逐行釋義Hello World,需要的朋友可以參考下2017-12-12