【JAVA】數組練習

? 作者:小胡_不糊涂
🌱 作者主頁:小胡_不糊涂的個人主頁
📀 收錄專欄:淺談Java
💖 持續更文,關注博主少走彎路,謝謝大家支持 💖

數組練習

  • 1. 數組轉字符串
  • 2. 數組拷貝
  • 3. 求數組中的元素的平均值
  • 4. 順序查找數組中指定元素
  • 5. 二分查找數組中指定元素
  • 6. 數組排序(冒泡排序)
  • 7. 數組逆序

在這里插入圖片描述

1. 數組轉字符串

toString() :可以將Array 對象轉換為字符串。

//語法格式:
arraylist.toString()

實例1:

import java.util.Arrays;//調用Arrays類,包含了常用的數組操作
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);}
}

🍤 運行結果:

在這里插入圖片描述

實例2:

import java.util.ArrayList;
public class test {public static void main(String[] args) {// 創建一個動態數組ArrayList<String> sites = new ArrayList<>();sites.add("Runoob");sites.add("Google");sites.add("Wiki");sites.add("Taobao");System.out.println("網站列表: " + sites);// 將ArrayList轉換為String類型String list = sites.toString();System.out.println("String: " + list);}

🍤 運行結果:

在這里插入圖片描述

2. 數組拷貝

實例1:

import java.util.Arrays;
public class test {public static void func(){// newArr和arr引用的是同一個數組// 因此newArr修改空間中內容之后,arr也可以看到修改的結果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();}

🍤 圖解:

在這里插入圖片描述

🍤 運行結果:

在這里插入圖片描述
實例2:使用Arrays中copyOf方法完成數組的拷貝

import java.util.Arrays;
public class test {public static void func(){int[] arr = {1,2,3,4,5,6};int[] newArr = arr;// copyOf方法在進行數組拷貝時,創建了一個新的數組// arr和newArr引用的不是同一個數組arr[0] = 1;newArr = Arrays.copyOf(arr, arr.length);System.out.println("newArr: " + Arrays.toString(newArr));}public static void main(String[] args) {func();}}

🍤 圖解:

在這里插入圖片描述

🍤 運行結果:


實例3:拷貝某個范圍

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();}
}

注: 數組當中存儲的是基本類型數據時,不論怎么拷貝基本都不會出現什么問題,但如果存儲的是引用數據類型,拷貝時需要考慮深淺拷貝的問題

模擬拷貝數組:

import java.util.Arrays;
public class test {//copyOf方法拷貝數組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]);}}

🍤 運行結果:

在這里插入圖片描述

3. 求數組中的元素的平均值

給定一個整型數組,求平均值

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) {//遍歷數組sum += x;}return (double)sum / (double)arr.length;}
}

4. 順序查找數組中指定元素

給定一個數組,再給定一個元素,找出該元素在數組中的位置。

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);//創建一個Scanner對象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;//返回下標}}return -1; // 表示沒有找到}
}

🍤 運行結果:

在這里插入圖片描述

5. 二分查找數組中指定元素

二分查找僅適用于有序查找

什么是有序數組?
有序分為 “升序” 和 “降序”
如 1 2 3 4 , 依次遞增即為升序.
如 4 3 2 1 , 依次遞減即為降序

以升序數組為例,二分查找的思路是先取中間位置的元素,然后使用待查找元素與數組中間元素進行比較:

  • 如果相等,即找到了返回該元素在數組中的下標
  • 如果小于,以類似方式到數組左半側查找
  • 如果大于,以類似方式到數組右半側查找

代碼示例:

import java.util.Scanner;
public class test {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};System.out.print("請輸入你要查找的數字:");Scanner scanner=new Scanner(System.in);//創建一個Scanner對象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]) {// 去左側區間找right = mid - 1;} else if (toFind > arr[mid]) {// 去右側區間找left = mid + 1;} else {// 相等, 說明找到了return mid;}}// 循環結束, 說明沒找到return -1;}
}

🍤 運行結果:

在這里插入圖片描述

🍩隨著數組元素個數越多, 二分的優勢就越大

二分查找–圖文詳解 - 這篇文章是用C語言介紹的二分查找,雖然語言不同,但思想都是一樣的,而且是以圖的形式詳細描述二分查找的過程,大家可以去看看~

6. 數組排序(冒泡排序)

給定一個數組,讓數組升序 (降序) 排序

算法思路: 假設排升序

  1. 將數組中相鄰元素從前往后依次進行比較,如果前一個元素比后一個元素大,則交換,一趟下來后最大元素就在數組的末尾
  2. 依次從上上述過程,直到數組中所有的元素都排列好
    在這里插入圖片描述
import java.util.Arrays;public class test {
public static void main(String[] args) {int[] arr = {9,5,7,8,6,6,7};;bubbleSort(arr);//調用方法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++) {//前一個與后一個比較,可能的話需要交換位置if (arr[j-1] > arr[j]) {int tmp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = tmp;}}} }
}

🍤 運行結果:

在這里插入圖片描述

但是冒泡排序性能較低。在Java 中內置了更高效的排序算法:

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. 數組逆序

給定一個數組,將里面的元素逆序排列

算法思路:
設定兩個下標,分別指向第一個元素和最后一個元素,交換兩個位置的元素,然后讓前一個下標自增,后一個下標自減,循環繼續即可。

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));//將數組轉化為字符串輸出}public static void reverse(int[] arr) {int left = 0;//指向首元素int right = arr.length - 1;//指向最后一個元素while (left < right) {//交換元素位置int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;//移動下標left++;right--;}}
}

🍤 運行結果:

在這里插入圖片描述


在這里插入圖片描述

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

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

相關文章

arm-linux-gnueabihf-g++ gcc編譯、優化命令 匯總

gcc優化選項&#xff0c;可在編譯時間&#xff0c;目標文件長度&#xff0c;執行效率三個維度&#xff0c;進行不同的取舍和平衡。 gcc 常用編譯選項 arm-linux-gnueabihf-g -O3 -marcharmv7-a -mcpucortex-a9 -ftree-vectorize -mfpuneon -mfpuvfpv3-fp16 -mfloat-abihard -…

js的FileSaver.saveAs()方法:監聽保存進度,進度條等方法

在使用FileSaver.saveAs保存表格到本地時&#xff0c;如果想要獲取導出/保存進度可以如下操作 FileSaver.js的saveAs()方法是一個異步操作&#xff0c;它將文件保存到用戶設備上。在調用saveAs()方法后&#xff0c;可以通過使用回調函數、Promise、或監聽相關事件來確定saveAs(…

在vue中使用swiper輪播圖(搭配watch和$nextTick())

在組件中使用輪播圖展示圖片信息&#xff1a; 1.下載swiper,5版本為穩定版本 cnpm install swiper5 2.在組件中引入swiper包和對應樣式&#xff0c;若多組件使用swiper&#xff0c;可以把swiper引入到main.js入口文件中&#xff1a; import swiper/css/swiper.css //引入swipe…

SpringBoot系列---【SpringBoot在多個profiles環境中自由切換】

SpringBoot在多個profiles環境中自由切換 1.在resource目錄下新建dev&#xff0c;prod兩個目錄&#xff0c;并分別把dev環境的配置文件和prod環境的配置文件放到對應目錄下&#xff0c;可以在配置文件中指定激活的配置文件&#xff0c;也可以默認不指定。 2.在pom.xml中最后位置…

07微服務的事務管理機制

一句話導讀 在單體應用程序中&#xff0c;事務通常是在單個數據庫或單個操作系統中管理的&#xff0c;而在微服務架構中&#xff0c;事務需要跨越多個服務和數據庫&#xff0c;這就使得事務管理變得更加復雜和困難。 目錄 一句話導讀 一、微服務事務管理的定義和意義 二、微…

Layui列表表頭去掉復選框改為選擇

效果&#xff1a; 代碼&#xff1a; // 表頭復選框去掉改為選擇 $(".layui-table th[data-field"0"] .layui-table-cell").html("<span>選擇</span>");

做好以下幾點,可以讓我們延長周末體驗感,好好放松!!!

工作以后常常容易感到疲于奔命&#xff0c;讓我們找到適合自己方式&#xff0c;來讓我們度過一個充實放松的周末! 方向一&#xff1a;分享你周末的時間規劃 我們可以把每個月當做一個周期&#xff0c;制定一個簡單的計劃&#xff0c;如&#xff1a;第一周&#xff0c;鍛煉身體…

基于Prometheus監控Kubernetes集群

目錄 一、環境準備 1.1、主機初始化配置 1.2、部署docker環境 二、部署kubernetes集群 2.1、組件介紹 2.2、配置阿里云yum源 2.3、安裝kubelet kubeadm kubectl 2.4、配置init-config.yaml 2.5、安裝master節點 2.6、安裝node節點 2.7、安裝flannel、cni 2.8、部署測…

Go 1.21新增的內置函數(built-in functions)詳解

Go 1.21新增的內置函數分別是 min、max 和 clear&#xff0c;接下來看下這幾個函數的用途和使用示例。 在編程過程中&#xff0c;需要知道一組值中的最大或最小值的場景是很常見的&#xff0c;比如排序、統計等場景。之前都需要自己寫代碼來實現這個功能&#xff0c;現在 Go 1…

低成本無刷高速吹風機單片機方案

高速吹風機的轉速一般是普通吹風機的5倍左右。一般來說&#xff0c;吹風機的電機轉速一般為2-3萬轉/分鐘&#xff0c;而高速吹風機的電機轉速一般為10萬轉/分鐘左右。高轉速增加了高風速。一般來說&#xff0c;吹風機的風力只有12-17米/秒&#xff0c;而高速吹風機的風力可以達…

安卓獲取當前的IP地址

文章目錄 獲取IP地址完整示例代碼 獲取IP地址 在安卓中&#xff0c;我們使用靜態方法NetworkInterface.getNetworkInterfaces() 來獲取當前設備上所有的網絡接口。 網絡接口是指設備上用于進行網絡通信的硬件或軟件。這些接口可以是物理接口&#xff08;如以太網接口、無線網…

使用Docker搭建MySQL主從復制(一主一從)

Docker安裝MySQL docker pull mysql:5.7 docker images mysql安裝步驟 1.新建主服務器容器實例3307 docker run -p 3307:3306 --name mysql-master -v /usr/local/docker/mysql5.7/data/mysql-master/logs:/var/log/mysql -v /usr/local/docker/mysql5.7/data/mysql-master/…

Day 31 C++ STL常用算法(下)

文章目錄 常用拷貝和替換算法copy——容器內指定范圍的元素拷貝到另一容器中函數原型注意——利用copy算法在拷貝時&#xff0c;目標容器要提前開辟空間示例 replace——將容器內指定范圍的第一個舊元素修改為新元素函數原型注意——replace只會替換區間內滿足條件的第一個舊元…

cve-2016-7193:wwlib 模塊堆數據結構溢出

簡介 漏洞編號&#xff1a;cve-2016-7193漏洞類型&#xff1a;堆溢出軟件名稱&#xff1a;Office模塊名稱&#xff1a;wwlib歷史漏洞&#xff1a;較多影響的版本 攻擊利用&#xff1a;APT 攻擊利器-Word 漏洞 CVE-2016-7193 原理揭秘 操作環境 系統&#xff1a;Win10 1607軟…

C++ 動態內存

C 動態內存 C 程序中的內存分為兩個部分&#xff1a; 棧&#xff1a;在函數內部聲明的所有變量都將占用棧內存堆&#xff1a;這是程序中未使用的內存&#xff0c;在程序運行時可用于動態分配內存 很多時候&#xff0c;無法提前預知需要多少內存來存儲某個定義變量中的特定信…

【Docker報錯】docker拉取鏡像時報錯:no such host

報錯信息 [rootSoft soft]# docker pull mysql Using default tag: latest Error response from daemon: Head "https://registry-1.docker.io/v2/library/mysql/manifests/latest": dial tcp: lookup registry-1.docker.io on 192.168.80.2:53: no such host解決方法…

3D模型格式轉換工具如何與Parasolid集成?

概述 HOOPS Exchange包括一個 Parasolid 連接器&#xff0c;它允許 Parasolid 開發人員輕松地將 CAD 數據導入到活動的 Parasolid 會話中。如果源數據基于 Parasolid&#xff08;NX、Solid Edge 或 SolidWorks&#xff09;&#xff0c;則數據將按原樣導入。 這意味著您可以假…

主數據管理案例-某政務

1、 背景介紹及難點分析 近年來&#xff0c;我國在大數據發展方面持續發力&#xff0c;取得了明顯成效。但也要看到&#xff0c;目前我國大數據發展還存在“孤島化”“碎片化”等問題&#xff0c;無序參與過度與創新參與不足并存&#xff0c;導致大數據資源配置統籌不&#xff…

【C++】list容器

1.list基本概念 2.list構造函數 #include <iostream> using namespace std;#include<list> //鏈表list容器構造函數//輸出list鏈表 void printList(const list<int>& L) {for (list<int>::const_iterator it L.begin(); it ! L.end(); it){cout &…

STM32入門學習之定時器PWM輸出

1.脈沖寬度調制PWM(Pulse Width Modulation)是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。PWM可以理解為高低電平的占空比&#xff0c;即輸出高電平時間與低電平時間的比值。PWM的應用是否廣泛&#xff0c;比如在步進電機的控制中&#xff0c;可以通過P…