黑马程序员_Java基础_04数组

本文深入讲解了Java中数组的声明、创建、初始化、打印、拷贝及排序等核心操作,包括一维数组的声明方式、动态和静态初始化、打印数组长度和元素的方法,以及两种数组拷贝方式和两种常见排序算法的实现。
---------- Android、Java开发期待与您交流----------
一.数组的声明、创建、初始化
        一维数组的声明方式:
                type[] var;
                type var[];
                声明数组不能指定其长度(数组元素的个数)
       Java中使用关键字new创建数组对象,格式为:
       arrayName = new type[数组元素个数];
    初始化:
       1.动态初始化:数组定义与分配空间和赋值操作分开进行;
       2.静态初始化:在定义数组的同时就为数组元素分配空间并赋值;
       3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后每个元素也按照成员变量的规则被隐士初始化。
二.打印数组长度和数组元素
        打印数组元素:for循环和for each循环
        打印数组长度:数组名称.length;
三.数组拷贝:
       1.java.util.Arrays.copyOf(Object src,int lengthlength)
               src代表源数组;length代表拷贝的元素个数,从第角标为零的元素开始复制;该方法的返回类型为和源数组同类型的数组
      2.java.lang.System.arraycopy(Object src,int srcPos,Object dest,int destPos,length);
                Object代表源数组,srcPos代表从源数组的第几个元素开始拷贝,dest代表目标数组,destPos代
       表从源数组拷贝的元素从目标数组的第几个元素位置开始存放,length表示从源数组拷贝的元素个数
四.数组元素排序:
        1.选择排序:第一轮,用数组的第一个元素和其余元素比较,如果其它元素比第一个元素小则互换位置,直到一轮结束,最小的元素排在第一位;第二轮从第二个元素开始  重复之前的动作,直到一轮结束取出次小的元素放在第二个元素的位置;重复操作,直到数组元素顺序排列

    2.冒泡排序:第一轮,从第一个元素开始和相邻元素比较,如果前一个元素大,则交换位置,重复操作直到倒数第二元素和最后一个元素比较完,则最大的元素被交换放在数组最后一个元素的位置;第二轮重复之前的操作,直到找出次大元素;重复操作直到数组元素按升序排列

import java.util.Arrays;

public class ArrayDemo1 {
	
	public static void main(String[] args) {
		String week[];// 声明数组
		int[] score;// 声明数组
		int[] month = new int[12];// 声明并创建数组
		week = new String[] { "Monday", "Tuesday", "Wednesday", "Thursday",
				"Friday", "Saturday", "Sunday" };// 创建数组并赋值
		String[] Dayily = { "Monday", "Tuesday", "Wednesday", "Thursday",
				"Friday", "Saturday", "Sunday" };// 创建数组并赋值
		char[] newYear;
		newYear = new char[] { 'N', 'e', 'w', ' ', 'Y', 'e', 'a', 'r' };// 声明数组、创建数组并为数组赋值
		// 打印数组长度
		int nyLength = newYear.length;
		System.out.println("nyLength:" + nyLength);
		System.out.println("for循环遍历数组:");
		// for循环遍历数组
		for (int i = 0; i < nyLength; i++) {
			System.out.print(newYear[i]);
		}
		System.out.println();
		System.out.println("for each循环遍历数组:");
		// for each循环遍历数组
		for (char ny : newYear) {
			System.out.print(ny);
		}
		System.out.println();
		String[] copy1 = Arrays.copyOf(week, 3);// 数组拷贝
		System.out.println("ArraysArrays.copyOf()数组拷贝结束后的结果:");
		for (int i = 0; i < copy1.length; i++) {
			System.out.print(copy1[i] + "\t");
		}
		char[] copy2 = new char[8];
		System.out.println();
		System.out.println("System.arraycopy()数组拷贝结束后的结果:");
		
		System.arraycopy(newYear, 4, copy2, 0, 4);//数组拷贝
		for (int i = 0; i < copy2.length; i++) {
			System.out.print(copy2[i]);
		}
	}
}
public class ArrayDemo2 {
	// 交换数组元素
	static void swap(int[] arr, int a, int b) {
		int temp;
		temp = arr[a];
		arr[a] = arr[b];
		arr[b] = temp;
	}

	// 选择排序
	static void selectSort(int[] score) {
		for (int i = 0; i < score.length; i++) {
			for (int j = i + 1; j < score.length; j++) {
				if (score[i] > score[j]) {
					swap(score, i, j);
				}
			}
		}
	}

	// 冒泡排序
	static void bubbleSort(int[] score) {
		for (int i = 0; i < score.length; i++) {
			for (int j = 0; j < score.length - 1; j++) {
				if (score[j] > score[j + 1])
					swap(score, j, j + 1);
			}
		}
	}

	public static void main(String[] args) {
		int[] score = new int[] { 78, 35, 55, 92, 49, 36 };
		System.out.println("选择排序:");
		selectSort(score);
		for (int grade : score) {
			System.out.print(grade + "\t");
		}
		score = new int[] { 35, 78, 49, 36, 55, 92 };
		System.out.println("冒泡排序:");
		bubbleSort(score);
		for (int grade : score) {
			System.out.print(grade + "\t");
		}
	}
}

public class ArrayDemo3 {

	// 查找某个元素在数组中第一次出现的索引位置
	static int getIndex(int[] arr, int x) {
		int index = 0;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == x) {
				index = i;
				break;
			} else {
				index = -1;// 在数组arr中找不到x元素
			}
		}
		return index;
	}

	// 进制转换
	static String toBinary(int num) {

		return trans(num, 1, 1);
	}

	static String toOctonary(int num) {

		return trans(num, 7, 3);
	}

	static String toHexadecimal(int num) {

		return trans(num, 15, 4);
	}

	// 数组元素交换位置
	static String trans(int num, int base, int offset) {
		String str = "";
		if (num != 0) {
			StringBuffer sb = new StringBuffer();

			char[] table = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
					'a', 'b', 'c', 'd', 'e', 'f' };
			while (num != 0) {
				int temp = num & base;
				num = num >>> offset;

				sb.append(table[temp]);
				str = sb.reverse().toString();
			}
		} else {
			str = "0";
		}
		System.out.println(str);
		return str;

	}

	// 二分查找
	static int halfSearch_2(int[] arr, int num) {
		int min, max, mid;
		min = 0;
		max = arr.length - 1;
		mid = (min + max) / 2;
		while (num != arr[mid]) {
			if (num > arr[mid]) {
				min = mid + 1;
			} else {
				max = mid - 1;
			}
			if (min > max) {
				return -1;
			}
			mid = (min + max) / 2;
		}
		return mid;
	}

	public static void main(String[] args) {

		int[] hs = { 3, 5, 7, 9, 12, 23, 43, 53 };
		System.out.println(getIndex(hs, 7));
		toHexadecimal(60);
		toOctonary(60);
		toBinary(60);
		System.out.println(halfSearch_2(hs, 7));

	}
}


---------- Android、Java开发期待与您交流----------
内容概要:本文系统研究了基于豪猪优化算法(CPO)的多无人机协同集群在三维空间中的避障路径规划问题,聚焦于实现以最低成本为目标的航迹优化,综合考虑路径长度、飞行高度、威胁规避及转弯角度等多个关键因素。通过构建精细化的三维环境模型与多无人机协同机制,采用Matlab平台实现CPO算法的仿真与验证,充分展示了该算法在复杂动态障碍环境下的高效搜索能力与全局优化性能。研究不仅涵盖了路径规划的数学建模与目标函数设计,还深入探讨了算法的收敛特性与鲁棒性,为智能群体系统在实际场景中的应用提供了理论依据与技术支撑。; 适合人群:具备一定编程基础和优化算法背景,从事无人机系统控制、智能路径规划、群体协同、人工智能与自动化等相关领域的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于多无人机协同执行侦察、灾害监测、应急救援、区域巡检等复杂任务中的自主路径规划;②为智能优化算法在三维动态环境下的路径决策问题提供可复现的技术范例;③支持研究人员对CPO算法与其他主流群智能算法(如PSO、GWO、WOA等)进行性能对比与改进研究,推动路径规划技术的发展。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解目标函数的多维度建模方式与CPO算法的迭代优化流程,可通过调整环境参数与约束条件进行仿真实验,对比不同算法在相同场景下的路径质量与收敛速度,从而深入掌握其优势与适用边界。
内容概要:本文围绕电动汽车参与电力系统运行备用的能力评估展开深入研究,利用Matlab代码实现对电动汽车集群提供运行备用服务的建模与仿真分析。研究重点在于量化电动汽车作为分布式灵活资源参与电网辅助服务的潜力,通过构建精细化的数学模型,分析其可调功率容量、响应速度、时空分布特性及聚合能力,并采用多面体聚合、内近似模型与闵可夫斯基和等先进方法精确刻画其可调度能力边界。研究进一步结合大规模电动汽车接入场景,探讨其在多时间尺度调度框架下参与调峰、调频等辅助服务的优化策略,评估其对提升高比例可再生能源电网灵活性与稳定性的贡献,最终通过仿真验证所提模型与方法的有效性与实用性。; 适合人群:具备电力系统分析、智能电网、新能源汽车或优化调度等相关专业背景,熟悉Matlab/Simulink仿真工具,从事科研、工程应用的高校研究生、科研人员及电力行业工程师。; 使用场景及目标:①精确评估大规模电动汽车集群在不同约束条件下可提供的运行备用容量;②研究电动汽车在日前、日内及实时调度中的动态响应能力与优化调度策略;③为高渗透率新能源电力系统提供基于移动储能的灵活性资源解决方案,支撑电网安全经济运行。; 阅读建议:建议结合Matlab代码与技术文档同步学习,重点关注多面体聚合建模、能力边界计算及优化调度算法的设计与实现,可进一步拓展至V2G(车辆到电网)、需求响应等互动场景进行二次开发与应用验证。
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 OpenCV(开源计算机视觉库)中的DNN(Deep Neural Network)模块是一种功能强大的工具,其目的是用于深度学习模型的操作。该模块使得开发人员能够在OpenCV环境中直接运用已经训练好的深度学习网络,以执行图像识别、目标检测、图像分割等多种功能。DNN模块能够兼容多种深度学习框架的模型,包括TensorFlow、Caffe、ONNX等。 一、DNN模块概述 OpenCV的DNN模块是为了简化深度学习模型的集成过程而专门设计的,它允许开发人员加载预先训练好的神经网络模型,并在图像数据上执行前向传播操作。借助这个模块,用户可以选用GPU或者CPU来提升计算效率,从而构建出高效的应用程序。 二、目标检测案例 在OpenCV的DNN模块中,目标检测是一个常见的应用情形。例如,可以选用SSD(Single Shot Multibox Detector)、YOLO(You Only Look Once)或者 Faster R-CNN 等模型进行实时的目标检测。这些模型能够识别并定位图像中的多个对象,并返回每个对象的类别和边界框坐标。 三、模型转换:PB到PBTXT 在OpenCV中运用TensorFlow模型时,通常需要处理的是`.pb`格式的模型文件,这是TensorFlow的二进制模型文件格式。然而,为了能够读取模型的结构信息,我们需要`.pbtxt`格式的文本文件。转换过程涉及解析`.pb`文件并将其结构信息导出为`.pbtxt`格式,这样做可以让人清晰地了解网络层和参数的配置。在OpenCV中,可以使用`tf.train.write_graph()`函数将.pb...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值