JAVA數(shù)組練習(xí)題實(shí)例講解
1. 數(shù)組轉(zhuǎn)字符串
toString()
:可以將Array 對(duì)象轉(zhuǎn)換為字符串。
//語(yǔ)法格式: arraylist.toString()
實(shí)例1:
import java.util.Arrays;//調(diào)用Arrays類,包含了常用的數(shù)組操作 public class test { public static void main(String[] args) { int[] arr = {1,2,3,4,5,6}; String newArr = Arrays.toString(arr); System.out.println(newArr); } }
?? 運(yùn)行結(jié)果:
實(shí)例2:
import java.util.ArrayList; public class test { public static void main(String[] args) { // 創(chuàng)建一個(gè)動(dòng)態(tài)數(shù)組 ArrayList<String> sites = new ArrayList<>(); sites.add("Runoob"); sites.add("Google"); sites.add("Wiki"); sites.add("Taobao"); System.out.println("網(wǎng)站列表: " + sites); // 將ArrayList轉(zhuǎn)換為String類型 String list = sites.toString(); System.out.println("String: " + list); }
?? 運(yùn)行結(jié)果:
2. 數(shù)組拷貝
實(shí)例1:
import java.util.Arrays; public class test { public static void func(){ // newArr和arr引用的是同一個(gè)數(shù)組 // 因此newArr修改空間中內(nèi)容之后,arr也可以看到修改的結(jié)果 int[] arr = {1,2,3,4,5,6}; int[] newArr = arr; newArr[0] = 10; System.out.println("newArr: " + Arrays.toString(arr)); } public static void main(String[] args) { func(); }
?? 圖解:
?? 運(yùn)行結(jié)果:
實(shí)例2:使用Arrays中copyOf方法完成數(shù)組的拷貝
import java.util.Arrays; public class test { public static void func(){ int[] arr = {1,2,3,4,5,6}; int[] newArr = arr; // copyOf方法在進(jìn)行數(shù)組拷貝時(shí),創(chuàng)建了一個(gè)新的數(shù)組 // arr和newArr引用的不是同一個(gè)數(shù)組 arr[0] = 1; newArr = Arrays.copyOf(arr, arr.length); System.out.println("newArr: " + Arrays.toString(newArr)); } public static void main(String[] args) { func(); } }
?? 圖解:
?? 運(yùn)行結(jié)果:
實(shí)例3:拷貝某個(gè)范圍
import java.util.Arrays; public class test { public static void func(){ int[] arr = {1,2,3,4,5,6}; int[] newArr = arr; int[] newArr2 = Arrays.copyOfRange(arr, 2, 4); System.out.println("newArr2: " + Arrays.toString(newArr2)); } public static void main(String[] args) { func(); } }
注: 數(shù)組當(dāng)中存儲(chǔ)的是基本類型數(shù)據(jù)時(shí),不論怎么拷貝基本都不會(huì)出現(xiàn)什么問(wèn)題,但如果存儲(chǔ)的是引用數(shù)據(jù)類型,拷貝時(shí)需要考慮深淺拷貝的問(wèn)題
模擬拷貝數(shù)組:
import java.util.Arrays; public class test { //copyOf方法拷貝數(shù)組 public static int[] copyOf(int[] arr) { int[] ret = new int[arr.length]; for (int i = 0; i < arr.length; i++) { ret[i] = arr[i]; } return ret; } public static void main(String[] args) { int[] a={1,4,5,6,9}; int[] Array=copyOf(a); for(int i=0;i<Array.length;i++) { System.out.println(Array[i]); } }
?? 運(yùn)行結(jié)果:
3. 求數(shù)組中的元素的平均值
給定一個(gè)整型數(shù)組,求平均值
public class test { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; System.out.println(avg(arr));//輸出:3.0 } public static double avg(int[] arr) { int sum = 0; for (int x : arr) {//遍歷數(shù)組 sum += x; } return (double)sum / (double)arr.length; } }
4. 順序查找數(shù)組中指定元素
給定一個(gè)數(shù)組,再給定一個(gè)元素,找出該元素在數(shù)組中的位置。
import java.util.Scanner; public class test { public static void main(String[] args) { int[] arr = {1,2,3,10,5,6}; Scanner scanner=new Scanner(System.in);//創(chuàng)建一個(gè)Scanner對(duì)象 int num=scanner.nextInt();//讀取用戶輸入 System.out.println(find(arr, num)); } public static int find(int[] arr, int data) { for (int i = 0; i < arr.length; i++) { if (arr[i] == data) { return i;//返回下標(biāo) } } return -1; // 表示沒(méi)有找到 } }
?? 運(yùn)行結(jié)果:
5. 二分查找數(shù)組中指定元素
二分查找僅適用于有序查找
什么是有序數(shù)組?
有序分為 “升序” 和 “降序”
如 1 2 3 4 , 依次遞增即為升序.
如 4 3 2 1 , 依次遞減即為降序
以升序數(shù)組為例,二分查找的思路是先取中間位置的元素,然后使用待查找元素與數(shù)組中間元素進(jìn)行比較:
- 如果相等,即找到了返回該元素在數(shù)組中的下標(biāo)
- 如果小于,以類似方式到數(shù)組左半側(cè)查找
- 如果大于,以類似方式到數(shù)組右半側(cè)查找
代碼示例:
import java.util.Scanner; public class test { public static void main(String[] args) { int[] arr = {1,2,3,4,5,6}; System.out.print("請(qǐng)輸入你要查找的數(shù)字:"); Scanner scanner=new Scanner(System.in);//創(chuàng)建一個(gè)Scanner對(duì)象 int num=scanner.nextInt(); System.out.println(binarySearch(arr, num)); } public static int binarySearch(int[] arr, int toFind) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = (left + right) / 2; if (toFind < arr[mid]) { // 去左側(cè)區(qū)間找 right = mid - 1; } else if (toFind > arr[mid]) { // 去右側(cè)區(qū)間找 left = mid + 1; } else { // 相等, 說(shuō)明找到了 return mid; } } // 循環(huán)結(jié)束, 說(shuō)明沒(méi)找到 return -1; } }
?? 運(yùn)行結(jié)果:
??隨著數(shù)組元素個(gè)數(shù)越多, 二分的優(yōu)勢(shì)就越大
6. 數(shù)組排序(冒泡排序)
給定一個(gè)數(shù)組,讓數(shù)組升序 (降序) 排序
算法思路: 假設(shè)排升序
- 將數(shù)組中相鄰元素從前往后依次進(jìn)行比較,如果前一個(gè)元素比后一個(gè)元素大,則交換,一趟下來(lái)后最大元素就在數(shù)組的末尾
- 依次從上上述過(guò)程,直到數(shù)組中所有的元素都排列好
import java.util.Arrays; public class test { public static void main(String[] args) { int[] arr = {9,5,7,8,6,6,7};; bubbleSort(arr);//調(diào)用方法 System.out.println(Arrays.toString(arr)); } public static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length; i++) { for (int j = 1; j < arr.length-i; j++) { //前一個(gè)與后一個(gè)比較,可能的話需要交換位置 if (arr[j-1] > arr[j]) { int tmp = arr[j - 1]; arr[j - 1] = arr[j]; arr[j] = tmp; } } } } }
?? 運(yùn)行結(jié)果:
但是冒泡排序性能較低。在Java 中內(nèi)置了更高效的排序算法:
import java.util.Arrays; public class test { public static void main(String[] args) { int[] arr = {9,5,7,8,6,6,7}; Arrays.sort(arr);//升序排序 System.out.println(Arrays.toString(arr)); }
7. 數(shù)組逆序
給定一個(gè)數(shù)組,將里面的元素逆序排列
算法思路:設(shè)定兩個(gè)下標(biāo),分別指向第一個(gè)元素和最后一個(gè)元素,交換兩個(gè)位置的元素,然后讓前一個(gè)下標(biāo)自增,后一個(gè)下標(biāo)自減,循環(huán)繼續(xù)即可。
import java.util.Arrays; public class test { public static void main(String[] args) { int[] arr = {1, 2, 3, 4}; reverse(arr); System.out.println(Arrays.toString(arr));//將數(shù)組轉(zhuǎn)化為字符串輸出 } public static void reverse(int[] arr) { int left = 0;//指向首元素 int right = arr.length - 1;//指向最后一個(gè)元素 while (left < right) { //交換元素位置 int tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; //移動(dòng)下標(biāo) left++; right--; } } }
?? 運(yùn)行結(jié)果:
總結(jié)
到此這篇關(guān)于JAVA數(shù)組練習(xí)題的文章就介紹到這了,更多相關(guān)JAVA數(shù)組練習(xí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot延遲執(zhí)行實(shí)現(xiàn)方法
本文介紹了在Spring Boot項(xiàng)目中延遲執(zhí)行方法的實(shí)現(xiàn),以及延遲執(zhí)行下聲明式事務(wù)和編程式事務(wù)的使用情況,感興趣的朋友一起看看吧2020-12-12Struts2學(xué)習(xí)教程之?dāng)r截器機(jī)制與自定義攔截器
這篇文章主要給大家介紹了關(guān)于Struts2學(xué)習(xí)基礎(chǔ)教程之?dāng)r截器機(jī)制與自定義攔截器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05解析Java編程中對(duì)于包結(jié)構(gòu)的命名和訪問(wèn)
這篇文章主要介紹了Java編程中對(duì)于包結(jié)構(gòu)的命名和訪問(wèn),是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-12-12詳解Spring中singleton?bean如何同時(shí)服務(wù)多個(gè)請(qǐng)求
這篇文章主要介紹了詳解Spring中singleton?bean如何同時(shí)服務(wù)多個(gè)請(qǐng)求2023-02-02Java中的NoClassDefFoundError報(bào)錯(cuò)含義解析
這篇文章主要為大家介紹了Java中的NoClassDefFoundError含義詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-11-11Java中List和fastjson的JSONArray相互轉(zhuǎn)換代碼示例
這篇文章主要介紹了如何在Java中將List和JSONArray相互轉(zhuǎn)換,展示了如何將List轉(zhuǎn)換為JSONArray,并且可以直接運(yùn)行這段代碼,需要的朋友可以參考下2025-04-04