Java0608-node

Java0608-node

1 数组

1.1概念

数组是指内存中一块连续的空间,数量固定存储类型相同
特点:

  • 长度:指数组中最多可以存储几个数据
  • 数组名:链接到数组第一个值的存储地址,可以据此快速找到数组中的数据
  • 元素:数组中存储的数据
  • 数组的数据类型:数组中所存储的数据的数据类型
  • 下标:索引数组内下标位置的值(从0开始到数组长度-1),若超过数组长度,会引发数组下标越界异常

1.2 数组的使用

/**
* 声明数组
*/
//数据类型[] 数组名
int[] names;//推荐
//数据类型 数组名[]
String strs[];

//申请空间
names = new int[7];//长度从0~6
strs = new String[3];

//边声明,边申请空间
char[] char1 = new char[2];

/**
* 数组的使用
*/
//获取长度(name.length)
int len = char1.length;
System.out.println(len);//2

//获取元素(name[下标])
//系统会给素组分配默认值:int——0、double——0.0、
//boolean——false、String——null(null是引用类型的默认值)
int num1 = names[0];
System.out.println(num1);//0

//存储数据——赋值
//单个赋值
names[0] = 123;
names[2] = 124;
//简便赋值(长度根据具体值量给定)——只能写在一行
int[] array = {1,2,3,4,5};
System.out.println(array.length);//5
System.out.println(array[3]);//4
//可以写在多行
char[] char2;
char2 = new char[]{'1','b'};
//通过键盘输入输入
Scanner input = new Scanner(System.in);
for(int i=0;i<=array.length-1;i++){
	System.out.print("请输入:");
	array[i] = input.nextInt();
}
//增强for foreach
//依次从array内取值,赋值给n
//优点:没有数组下标,不会越界(ArrayIndexOutOfBoundsException)
//局限:为遍历而生,不能修改数组内值
for(int n:array){
	System.out.print(n+" ");
}

//int[] a
//int[] b都是引用类型的变量
a = b;//将b里存的数组的地址,赋值给a,对a进行修改时,会影响b查找时的值

1.3使用场景

多个相同类型的数组的存储

1.4应用

  1. 查找
    12、23、34、45、56——34
    二分查找
    Arrays.binarySearch(数组名,需要查找的值/变量);
    找不到时,返回的值不固定
//二分查找实现
import java.util.Scanner;
public class Test04 {
	public static void main(String[] args) {
	int[] array = new int[100];
	int left = 0;//数组最左边
	int len = array.length;//数组长度
	int right = len-1;//数组最右边
	int mid = (left+right)/2;//数组中间
	Scanner input = new Scanner(System.in);
	System.out.print("输入您要找的值:");
	int num = input.nextInt();
	
	for(int i=0;i<len;i++) {
		array[i]=i*i-34;//y=x*x-34的值输入数组
	}
	for(int n:array) {
		System.out.print(n+" ");//数组的值输出
	}
	
	while(left<=right) {
		if(array[mid]==num) {
			System.out.println("已找到"+num);
			break;
		}else if(array[mid]>num){
			right = mid-1;
			mid = (left+right)/2;
		}else {
			left = mid+1;
			mid = (left+right)/2;
		}
	}
	
	if(left>right) {
		System.out.println("未找到"+num);
	}
  }
}
  1. 求最值

  2. 冒泡排序(升序)
    相邻两数比较,小的在前,大的在后,不符合时,交换,直到不需要交换为止

//冒泡排序实现
import java.util.Scanner;
public class Test01 {
	public static void main(String[] args) {
	Scanner input = new Scanner(System.in);
	System.out.println("请输入10个数:");
	int[] nums = new int[10];
	int len = nums.length;//数组长度
	int frequency = len-1;//比较趟数
	
	for (int i = 0; i < len; i++) {//向数组输入数据
		nums[i] = input.nextInt();
	}
	
	//升序
	for(int i=0;i<frequency;i++) {//范围:[0,len-2]及比较1~len-1趟
		boolean flag = false;//true:交换过、false:没有交换过
		for(int j=0;j<frequency-i;j++) {//范围:[0,(len-2)-i]及比较1~len-1-i次
			if(nums[j]>nums[j+1]) {
				int temp = nums[j];
				nums[j] = nums[j+1];
				nums[j+1] = temp;
				flag = true;
			}
		}
		System.out.println("执行趟数:"+(i+1));
		if(!flag) {//若某一趟没有交换过数据,就是有序的,退出
			break;
		}
	}
	
	for (int i : nums) {//输出排序结果
		System.out.print(i+" ");
	}
	
	System.out.println("--------------------------");
	
	//降序
	for(int i=0;i<frequency;i++) {
		boolean flag = false;//true:交换过数据、false:为交换过
		for(int j=0;j<frequency-i;j++) {
			if(nums[j]<nums[j+1]) {
				int count = nums[j];
				nums[j] = nums[j+1];
				nums[j+1] = count;
				flag = true;
			}
		}
		System.out.println("执行趟数:"+(i+1));
		if(!flag) {
			break;
		}
	}
	
	for (int i : nums) {//输出排序结果
		System.out.print(i+" ");
	}
  }
}
  1. 插入

  2. 选择排序

  3. 插入排序

  4. java提供的现成方法
    Arrays.sort(nums);//升序

2 二维数组

2.1二维数组的创建

//方法一:为每一维分配空间
int[][] num1 = new int[5][5];
for(int i=0;i<nums.length;i++) {
 	for(int j=0;j<nums[i].length;j++) {
 	nums[i][j] = input.nextInt();
	}
}
 
//方法二:直接赋值
//先定义每一维的数组,然后创建二位数组
int[] nums1 = new int[5];
int[] nums2 = new int[5];
int[] nums3 = {0,0,1,1,1};
int[] nums4 = {4,5,6,7,8};
int[] nums5 = {4,5,6,7,8};
int[][] num2 = {nums1,nums2,nums3,nums4};

//NullPointerExecption空指针异常
int[][] num = new int[4][];	
 
//Arrays的常用方法
int[] nums6 = {0,1,2};
int[] nums7 = {3,4,5};
int[] nums8 = {6,7,8};
int[][] num3 = {nums6,nums7,nums8};

//toString()
System.out.println(Arrays.toString(nums6));//[0, 1, 2]
System.out.println(num3);//[[I@15db9742
System.out.println(Arrays.toString(num3));//[[I@6d06d69c, [I@7852e922, [I@4e25154f]

//deepToString()
System.out.println(Arrays.deepToString(nums));//[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值