从零开始学java(16)--- 数组

本文是Day 6的学习笔记,主要讲解Java中的数组。内容涵盖数组的定义、赋值方法,强调数组的数据类型一致性、大小固定及数据连续存储的特点,并探讨了数组遍历的两种方式及其适用场景。此外,还提供了几道涉及数组操作的练习题,如找重复元素、升序输入、双色球随机数生成和数组包含判断等。
摘要由CSDN通过智能技术生成

Day 6

今天学习数组

数组:

1.定义

所谓数组,是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。 这些无序排列的同类数据元素的集合称为数组。
数组是用于储存多个相同类型数据的集合。

2.赋值方式

datatype[] arrayname; //推荐写法
datatype arrayname[]; //C语言风格,Java不推荐

  1. int[] test1 = new int[数组长度];
    test1[0] = “数组0”;
    test1[1] = “数组1”;
 		int[] nums=new int[10]; // 在数组中存储10个int数据,在内存中分配空间,默认数据是0
 		nums[0]=1;
 		nums[1]=2;
 		.........

  1. int[] test2 = {“数组0”,“数组1”,“数组2”,"…"};
 		int[] nums={1,2,3,4,5,6,7,8,9,10};
  1. int[] test3 = new int[]{“数组0”,“数组1”,“数组2”,"…"};
 		int[] nums=new int[]{1,2,3,4,5,6,7,8,9,10};

3. 特点

1.数组中的数据其数据类型一样
2.数组在初始化时,大小是确定的,且不可修改
3.数据是连续存储的,每一个数据分配的空间一样
4.查找数据效率高(来自于数组在内存中的存储特点)

索引:数组的索引从0开始,以(数组长度-1)结束

4.数组遍历:

  //方式1:
  for (int i = 0; i < nums.length; i++) {}
  //方式2:
  for(int num : nums12) { }

区别:语法上方式2简洁,方式2的foreach循环,只能获取元素的值而不能修改
使用上的选择:
仅仅是输出数组里的元素值,推荐使用foreach循环
如果需要改变元素的值或者循环时与索引有关,只能使用方式1

5.几道有特点的练习题

有一些地方没有优化略显复杂,大致思路是一样的,如果有更好的思路欢迎大家在评论中指出。
1.找出数组中重复出现的元素, 如{{ 3, 3, 44, 44, 3, 44, 33,55,88,3,44},找出3,44两个。

public class Array9 {
	public static void main(String[] args) {
		int[] num1s = { 3, 3, 44, 44, 3, 44, 33, 55, 88, 3, 44 };
		int[] num2s = new int[num1s.length];
		int count = 0;// 计数器判断有几个数重复
		for (int i = 0; i < num1s.length; i++) {

			for (int j = i + 1; j < num1s.length; j++) {
				if (num1s[i] == num1s[j]) {
					boolean a = true;// 判断标志
					// 判断重复的值是否已经存在于数组之中
					// 如果存在,就改变标志
					for (int k = 0; k < num2s.length; k++) {
						if (num2s[k] == num1s[i]) {
							a = false;
							break;
						}
					}
					// 如果标志为true将重复的值存入数组
					if (a) {
						num2s[count++] = num1s[i];
					}
				}
			}
		}

		for (int i = 0; i < count; i++) {
			System.out.println(num2s[i]);
		}
	}
}

2.从键盘依次输入10个正整数, 要求每次存储到数组中时,保证其顺序为升序(从小到大)
一般思路是先将十个数输入数组再进行排序,如冒泡排序等。
下面程序思路是在输入同时按照数的大小进行插入。

public class Array10 {
	public static void main(String[] args) {
		int[] nums = new int[10];
		Scanner sc = new Scanner(System.in);
		int c = 1;//控制计算下标位置的循环次数
		for (int i = 0; i < nums.length; i++) {
			System.out.println("请输入第"+(i+1)+"个元素:");
			int a = sc.nextInt();
			int count = 0;//count为应该插入的位置
			for (int j = 0; j < c; j++) {
				if (a > nums[j]) {
					count++;
				}
			}
			count=count-1;//第一个应该在位置0
			c++;
			int b = 0;
			//整体向后移直到count
			for (int j = nums.length - 2; j >= count; j--) {
				nums[j + 1] = nums[j];
			}
			//插入
			nums[count] = a;
			System.out.println(Arrays.toString(nums));//为了更直观将每一步的排序结果显示
		}
			System.out.println(Arrays.toString(nums));
	}
}

即:
在这里插入图片描述3.产生双色球的数列,规则如下:前6位是1-33之间不重复的随机数, 第7位是1-16之间的一个随机数。

public class Array11 {
	public static void main(String[] args) {
		int[] nums = new int[7];
		c: for (int i = 0;i<nums.length; i++) {
				int b = (int) (Math.random() * 33) + 1;
				// 如果产生随机数等于之前存入数组的数跳过此次循环
				for (int j = 0; j < nums.length - 1; j++) {
					if (b == nums[j]) {
						continue c;
					}
				}
			nums[i] = b;
		}
		nums[6] = (int) (Math.random() * 16) + 1;
		System.out.println(Arrays.toString(nums));
	}
}

4.判断一个数组是否包含另一个数组,如{1,2,3,4,5} 包含 {2,3,4},不包含{3,5}

public class Array12 {
	public static void main(String[] args) {
		int[] num1s = { 1, 2, 3, 4, 5, 8, 9 };
		int[] num2s = { 4, 5, 9 };
		int[] num3s = new int[num2s.length];
		// 循环比较数组二和数组三
		for (int i = 0; i < num1s.length - num2s.length + 1;) {
			// 将数组二长度的值从数组一中赋给数组三
			for (int j = 0; j < num2s.length; j++, i++) {
				num3s[j] = num1s[i];
			}
			i--;
			// 比较数组二和数组三是否相等
			if (Arrays.equals(num2s, num3s)) {
				System.out.println("包含。");
				break;
			} else if (i == num1s.length - num2s.length) {
				System.out.println("不包含。");
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值