欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java学习第五章

程序员文章站 2022-04-02 23:05:27
...

第五章:数组

一.数组是什么?

我们原来用普通变量例如int、double、char定义变量的时候,会遇到不知道到底定义几个变量,定义变量太多的情况,不好区分,而且复杂,所以在Java中我们引用了数组来解决这个问题。数组的本质是空间大小相等,地址连续的一篇储存空间,在同一个数组中,所有元素的类型必须是统一的,如果数组的类型是int,那么这个数组中所有元素都必须为int类型。

数组的长度定义时可为变量,但定义后不可改变。

 二.一维数组的定义。

  1. 数据类型[] 数组名=new 数据类型[长度];
  2. 数据类型[] 数组名=new 数据类型[]{1,2,3,4,5};
  3. 数据类型[] 数组名={1,2,3,4,5};

例如我们定义一个长度为10的数组:

public class test{
	public static void main(String []args) {
		int []num = new int[10];
	}
}

在这个数组中,如果要访问数组中的某一个元素,我们只需要访问这个元素对应的下标即可。

数组元素下标是从0开始的,数组最后一个元素的下标是数组的长度-1

数组的遍历输出一般使用循环,我们来看一下这个数组没有被初始化任何数值它输出的是什么?

public class test{
	public static void main(String []args) {
		int []num = new int[10];
		for(int i = 0;i<num.length;i++) {
			System.out.println(num[i]);
		}
	}
}

 我们发现输出的结果为十个0。这是因为在Java中我们定义的元素是默认被赋予初值的。他们分别为:

  • int类型:0
  • double类型:0.0
  • 布尔类型:false
  • 引用数据类型:null

我们使用数组名.length来读取数组的长度

 我们对数组进行输入赋值:

import java.util.Scanner;
public class test{
	public static void main(String []args) {
		int []num = new int[10];
		Scanner in = new Scanner(System.in);
		for (int i = 0;i<10;i++) {
			num[i] = in.nextInt();
		}
		for (int i = 0;i<10;i++) {
			System.out.println(num[i]);
		}
	}
}

我们读取用户输入的数值对数组进行赋值。最后输出结果。

数组通过角标来访问元素的具体计算方式是 所要访问数据的地址=首元素地址+角标*数据类型大小

三.数组的最大值最小值问题

我们读取数组的最大值最小值依然采用便利的方法来判断,例如我们先给数组赋值,然后调用函数求最大值:

import java.util.Scanner;
public class test{
	public static int max(int []a){
		int max = a[0];
		for (int i =0;i<a.length;i++) {
			if (a[i]>max) max = a[i];
		}
		return max;
	}
	public static void main(String []args) {
		int []num = new int[]{1,2,3,4,5,6,7,8,9,10};
		Scanner in = new Scanner(System.in);
		int max= max(num);
		System.out.println(max);
	}
}

 我们通过函数将num数组中最大值通过遍历找出来,最后返回主函数输出。

调用函数求最小值:

import java.util.Scanner;
public class test{
	public static int min(int []a){
		int min = a[0];
		for (int i =0;i<a.length;i++) {
			if (a[i]<min) min = a[i];
		}
		return min;
	}
	public static void main(String []args) {
		int []num = new int[]{1,2,3,4,5,6,7,8,9,10};
		Scanner in = new Scanner(System.in);
		int min= min(num);
		System.out.println(min);
	}
}

方法同求最小值。

四.数组的查找

1.线性查找

import java.util.Scanner;
public class test{
	public static void main(String []args) {
		int []num = new int[]{1,2,3,4,5,6,7,8,9,10};
		Scanner in = new Scanner(System.in);
		int key = 11;
		int m = 0 ;
		boolean find = false;
		for (int i = 0;i<num.length;i++) {
			if (num[i]==key) {
				find = true;
				m = i+1;
			}
		}
		if(find) {
			System.out.println("第"+m+"个");
		}else {
			System.out.println("没找到");
		}
	}
}

线性查找,就是把数组遍历一遍,看数组中有没有需要查找的数值,如果有,就输出第几个,否则输出没找到。

这个很简单,但是效率很低,在数据量很大的时候不适用。我们采用二分查找实现。

2.二分查找

二分查找就是每次取数组中间的数值,数组的可以取到的数值随查找的进行而改变。

Java学习第五章

比如我们要查找8这个元素,第一次先找中间是5,比8小,第二次我们找5右半部分的中间,是8就找到了。

具体代码如下:

import java.util.Scanner;
public class test{
	public static void main(String []args) {
		int []num = new int[]{1,2,3,4,5,6,7,8,9,10};
		Scanner in = new Scanner(System.in);
		int key = 2;
		int left = 0;
		int right = num.length-1;
		int mid = (left+right)/2;
		boolean flag = true;
		while (num[mid]!=key) {
			if (num[mid]>key) {
				right = mid-1;
				mid = (left+right)/2;
			}
			if (num[mid]<key) {
				left = mid+1;
				mid = (left+right)/2;
			}
			if (left>right) {
				flag = false ;
				break;
			}			
		}
		if (flag) {
			System.out.print(mid);
		}else {
			System.out.print("no find");
		}
	}
}

 二分查找大大提高了查找效率,适用于数据较多时的查找。

相关标签: java