java中一維數組如何使用,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
一維數組
1.一維數組的定義方式:
int[] array1 = new int[3];//聲明創建一個包含3個元素的數組array1(初始值為0)int[] array2 = {1, 2, 3};//聲明、創建并初始化一個包含3個元素的數組int[] array3 = new int[] {1, 2, 3};//聲明、創建并初始化一個包含3個元素的整型數組int[] array4;array[4] = {1, 2, 3}//先聲明一個數組array,再進行創建及初始化int[] array5 = new int[3];array5[0] = 1;array5[1] = 2;array5[2] = 3;//先聲明、創建一個具有3個元素的數組,再用賦值語句進行初始化
2.利用一維數組輸出斐波那契數列的前20項
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));}//記得在主函數中創建array數組
題目練習
1.實現二分查找算法:有序的數組
public class TestDemo1 { public static int binary(int[] array, int key) {//key為要查找的數 Arrays.sort(array);//正序排列數組 System.out.println("由從小到大順序排列數組:" + Arrays.toString(array)); int left = 0; int right = array.length - 1;//將數組最小下標與最大下標分別賦值給left和right int mid = 0;//將中值初始化 while (left <= right) {//“=”條件防止當輸入的值為數組最大下標指向的數時,不進入循環,而返回-1的情況 mid = (left + right) / 2;//二分法原理為折半查找,故中間值為左右下標之和除以2 if (key == array[mid]) {//如果第一次中間下標指向的值正好等于要查找的值,返回該下標 return mid; } else if (key > array[mid]) {//如果如果輸入的值大于中間下標指向的值,則將當前中值下標作為下一次循環的左下標 left = mid + 1;/*“+1”的含義:防止輸入的值為數組最大下標指向的值,當進行二分查找最后一步時,因為mid為int類型,所以會導 致左邊下標不在發生變化,所以要+1;當+1時,左邊下標變為上一次中值下標的后一位,不影響此方法的正確性,還可以減少計算步驟*/ } else {//只剩下輸入的數下標小于中值下標的情況,將當前中值下標作為下次循環的右下標 right = mid - 1;//與“+1”含義類似,防止輸入的數對應的為最右下標 } } return -1;//在數組中找不到輸入的數,返回-1 } public static void main(String[] args) { int[] array = {22, 15, -46, 35, 69, 20}; System.out.println("請輸入你想查找的數字:"); Scanner scanner = new Scanner(System.in); int key = scanner.nextInt(); System.out.println(binary(array, key)); }}
2.求連續子數組的最大和
public class TestDemo1 {public static void sumArray(int[] array) { int sum = array[0];//對數組求和的變量 int max = array[0];//求和最大值的變量 for (int i = 1; i < array.length; i++) {//從第一項開始循環 if (sum + array[i] < array[i]) {//如果前幾項的和與本項之和小于本項,則最大連續子數組的和肯定不包括前幾項 sum = array[i];//將本項的值賦給sum,之后的循環求和從本項依次向后相加 } else { sum = sum + array[i];//如果前幾項的和與本項之和大于本項,則繼續向后執行遞加操作 } if (sum >= max) {//每次相加之后與初始的max值相比較,如果和大于max的值,則更新max,最后返回的max值即為最大連續子數列的和 max = sum; } } System.out.println("連續子數組最大和為:" + max); } public static void main(String[] args) { int[] array = {1, -2, 3, 10, -4, 7, 2, -5}; sumArray(array); }}
3.交換兩個數
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); }}
用上面寫的方法在執行交換兩個數操作數會出現錯誤,原因:
在主函數中swap(a,b)操作實際是將實參a,b的地址拷貝到swap方法中,即傳址。在swap方法中進行數值交換操作時只是交換了該方法中形參的地址,而原本實參的地址并沒有改變,所以輸出的a,b值沒有發生改變。
Java中的基本元素不支持傳址,必須是對象或者數組才能傳址
可作如下修改
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); }}//新建對象進行數值的交換,交換的是實參
4.逆置數組
public class TestDemo1 { public static void invertArray(int[] array) { System.out.println("輸出該數組:" + Arrays.toString(array)); for (int front = 0, end = array.length - 1; front < end; front++, end--) {//循環將數組下標由第一項遞增,最后一項遞減,當遞增的下標超過遞減的下標時,結束循環 int temp = array[front];//將數組的第一個元素臨時賦值給變量temp array[front] = array[end];//將數組最后的元素賦值到數組的第一個元素 array[end] = temp;//將temp的值賦給數組最后的元素,實現數組下標不變,但元素的值進行倒置的操作 } System.out.println("將該數組倒置后輸出:" + Arrays.toString(array)); } public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; invertArray(array); }}
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。