目录
1.数组的作用
能让我们批量创建相同类型的变量
2.数组的创建
下面这三种创建方式都是可以的
int[] arr1=new int[] {1,2,3,4};
int[] arr2={1,2,3,4};
int[] arr3=new int[4];
3.数组的使用
①获取长度(使用.length)
public class Pra0104 {
public static void main(String[] args) {
int[] arr={1,2,3,4};
System.out.println(arr.length);
}
}
②访问元素
通过取下标的方式访问数组中的元素,注意下标不能越界。
for循环遍历数组
public class Pra0104 {
public static void main(String[] args) {
int[] arr={1,2,3,4};
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
for each遍历数组,如下
public class Pra0104 {
public static void main(String[] args) {
int[] arr={1,2,3,4};
for(int x:arr){
System.out.println(x);
}
}
}
运行结果:
4.数组作为方法的参数
举例:
public class Pra0104 {
public static void main(String[] args) {
int[] arr={1,2,3,4};
printArr(arr);
}
public static void printArr(int[] arr) {
for(int x:arr){
System.out.println(x);
}
}
}
运行结果:
5.数组作为方法的返回值
示例:将数组中每个元素乘2
public class Pra0104 {
public static void main(String[] args) {
int[] arr1={1,2,3,4};
int[] arr2=transform(arr1);
for(int x:arr2){
System.out.println(x);
}
}
public static int[] transform(int[] arr1) {
int[] arr2=new int[arr1.length];
for(int i=0;i< arr1.length;i++){
arr2[i]=arr1[i]*2;
}
return arr2;
}
}
运行结果:
6.数组的相关练习
①整型数组转字符串
代码
import java.util.Arrays;
public class Pra0104 {
public static void main(String[] args) {
int[] arr={1,2,3,4};
String str= Arrays.toString(arr);
System.out.println(str);
}
}
运行结果
②二分法查找有序数组中某一元素
具体思路,在之前C语言专栏中有写过
import java.util.Scanner;
public class Pra0104 {
public static void main(String[] args) {
int[] arr={2,4,6,8,10};
find(arr);
}
public static void find(int[] arr) {
System.out.println("请输入要查找的数字");
Scanner sc=new Scanner(System.in);
int find=sc.nextInt();
int left=0;
int right=arr.length-1;
while(left<=right){
int mid=(left+right)/2;
if(find<arr[mid]){
right=mid-1;
}else if(find>arr[mid]){
left=mid+1;
}else{
System.out.println("找到了!下标是:"+mid);
break;
}
}
if(left>right){
System.out.println("找不到!");
}
}
}
运行结果:
③数组逆序
设定两个下标,left和right
public class Pra0104 {
public static void main(String[] args) {
int arr[]={1,2,3,4};
reverseArr(arr);
//输出逆序后的数组
for(int x:arr){
System.out.println(x);
}
}
public static void reverseArr(int[] arr) {
int left=0;
int right=arr.length-1;
while(left<right){
int temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
left++;
right--;
}
}
}
运行结果:
④检查数组的有序性
这里检查数组是否为升序,返回true或者false
public class Pra0104 {
public static void main(String[] args) {
int[] arr={1,2,3,4};
System.out.println(isOrder(arr));
}
public static boolean isOrder(int[] arr) {
for(int i=0;i<arr.length-1;i++){
if(arr[i]>arr[i+1]){
return false;
}
}
return true;
}
}
运行结果:
⑤数组拷贝
实现自己的拷贝方法
public class Pra0104 {
public static void main(String[] args) {
int[] arr={1,2,3,4};
int[] newArr=copy(arr);
for(int x:newArr){
System.out.println(x);
}
}
public static int[] copy(int[] arr) {
int[] ret=new int[arr.length];
for(int i=0;i<arr.length;i++){
ret[i]=arr[i];
}
return ret;
}
}
运行结果:
使用库中的
import java.util.Arrays;
public class Pra0104 {
public static void main(String[] args) {
int[] arr={1,2,3,4};
int[] newArr=Arrays.copyOf(arr,arr.length);
System.out.println(Arrays.toString(newArr));
}
}
运行结果:
注意:在拷贝的时候,可能还会存在疑问,为什么不直接int[] newArr=arr呢?这是因为这样直接赋值相当于,给原本的数组又起了一个别名,newArr指向arr指向的数组,所以实际还是同一个数组,并没有达到拷贝的效果,如下图