数组之Arrays

本文介绍了Java中数组的多种操作方法,包括使用Arrays.toString输出数组、System.arraycopy复制数组、Math.random生成随机数、Arrays.copyOfRange复制数组、Arrays.sort排序、Arrays.binarySearch搜索、Arrays.fill填充,还给出了用随机数填充二维数组并排序的思路。

1.Arrays.toString(数组名)

public static void main(String[] args) {
		int [] a=new int[] {18,62,68,82,65,9};
		int [] b=new int[3];//分配了长度是3的空间,但是没有赋值
		//方法一  通过for循环
		for(int i=0;i<b.length;i++) {
			b[i]=a[i];      //把数组a的前三位赋值给数组b
//			System.out.println(b[i]);
		}
//		for(int i=0;i<b.length;i++) {
//			System.out.println(b[i]);
//		}
		System.out.println(Arrays.toString(b));
  }
}

直接以整体输出数组    这里定义b数组长度为3  数值没有   把数组a的前三个赋值给了数组b

输出结果:[18,62,68]      

注意:(a.length代表二维数组的行数 a[i].legth代表二维数组的第i行的长度)

2.  System.arraycopy(src,srcPos,dest,destPos,length)

解释://src: 源数组
        //srcPos: 从源数组复制数据的启始位置
        //dest: 目标数组
        //destPos: 复制到目标数组的启始位置
        //length: 复制的长度  

import java.util.Arrays;


public static void main(String[] args) {
    int [] a=new int[] {18,62,68,82,65,9};
		int [] b=new int[3];
        System.arraycopy(a, 0, b, 0, 3);
		//打印出来
		System.out.println(Arrays.toString(b));
	}
}

和第一个一样的第二种方法   直接赋值给数组b 无需再通过for循环

3.随机数Math.random();

  Math.random()代表0-1之间的随机数   是浮点类型   如果用它赋值为int型  则需要强制转换 即int a[i]=(int)(Math.random());

取0-100的随机整数:(int)(Math.random()*100);

取5-10的随机整数:(int)(Math.random()*6+5);                 乘以前面数加1加上后面数和前面数的差值

4.  数组复制 Arrays.copyOfRange(int[] original, int from, int to)

使用System.arraycopy进行数组复制类似的, Arrays提供了一个copyOfRange方法进行数组复制。
不同的是System.arraycopy,需要事先准备好目标数组,并分配长度。 copyOfRange 只需要源数组就就可以了,通过返回值,就能够得到目标数组了。
除此之外,需要注意的是 copyOfRange 的第3个参数,表示源数组的结束位置,是取不到的。 

一开始输入Arrays然后按Alt+/键 原本以为它会自动生成Arrays.copyOfRange(int[] original, int from, int to);方法

 结果一直有编译错误,Arrays和copyOfRange底下都有红色下划线 我按Ctrl+1他说需要定义一个copyOfRange()的静态方法

 然后我也快捷键定义了一个,然后再点main方法中的copyOfRange()此时还有红线报错 然后惊喜的发现显示copyOfRange() 后  面提示方法中的参数定义成什么样子的 比如第一个参数是定义整形数组还是浮点型数组;选好以后写进参数;再在Arrays底下的波浪线导入import.java.until.Arrays;的包,然后运行成功。

当我第二次再试一次的时候,结果输入完int [] b=Arrays. 后直接有了Arrays.copyOfRange();的方法

 // 第一个参数表示源数组

 // 第二个参数表示开始位置(取得到)

 // 第三个参数表示结束位置(取不到)

package part5;

import java.util.Arrays;

/**  
* <p>Title: Arrays</p>  
* <p>Description: </p>  
* @author 	Mr.chen  
* @date 2018年8月24日  
*/
public class Arrayse {
	private static int[] copyOfRange() {
		// TODO Auto-generated method stub
		return null;
	}

	public static void main(String[] args) {
		int[] a = new int[] { 18, 62, 68, 82, 65, 9 };
		int[] b = Arrays.copyOfRange(a, 0, 3);
		for (int i = 0; i < b.length; i++) {
			System.out.println(b[i]+" ");
		}
	}

}

5.排序  Arrays.sort()

在前面章节学习了 选择法排序 和 冒泡法排序,Arrays工具类提供了一个sort方法,只需要一行代码即可完成排序功能

6.搜索  Arrays.binarySearch(数组名,数组元素值)

定位数组中数值出现在数组的位置Arrays.binarySearch(数组名,数组元素值)

注意:使用binarySearch进行查找之前,必须使用sort进行排序,如果数组中有多个相同的元素,查找结果是不确定的

package part5;

import java.util.Arrays;

/**  
* <p>Title: Arraysbinaryseach</p>  
* <p>Description: </p>  
* @author 	Mr.chen  
* @date 2018年8月26日  
*/
public class Arraysbinaryseach {
	public static void main(String[] args) {
		int [] a = new int [] {18, 62, 68, 82, 65, 9};
		Arrays.sort(a);
		System.out.println("排序后"+Arrays.toString(a));
		System.out.println("68在数组a的第"+Arrays.binarySearch(a, 68)+"位置");
	}
}

如果数组中有多个相同的元素,查找结果是不确定的

7.填充 Arrays.fill(数组名,数值);

package part5;

import java.util.Arrays;

/**  
* <p>Title: Arrayfill</p>  
* <p>Description: Arrays.fill(数组名,填重值) 方法填充数组 </p>  
* @author 	Mr.chen  
* @date 2018年8月26日  
*/
public class Arrayfill {
	public static void main(String[] args) {
		int [] a = new int [10];	 //定义一个长度为10 的空数组
		
		Arrays.fill(a, 5);     	     //向数组a中填重 数值为5的元素
		
		System.out.println("填充后"+Arrays.toString(a));
	}
}

结果:

 

8. 将一个5x8的二维数组,用随机数填满,借助Arrays的方法对二维数组进行排序

参考思路:将一个二维数组复制给一个事先声明长度的一维数组中

                  然后对这个一维数组用Arrays.sort(b);进行自增排序

                  然后再将排好序的一维数组通过for循环(二维数组行的for循环)复制回二维数组

package part5;

import java.util.Arrays;

/**  
* <p>Title: shuzulianxi</p>  
* <p>Description: Array 部分练习
* 首先定义一个5X8的二维数组,然后使用随机数填充满。
* 借助Arrays的方法对二维数组进行排序。
* </p>  
* 参考思路:先把二维数组使用System.arraycopy进行数组复制到一个一维数组
* 			然后使用sort进行排序
* 			最后再复制回到二维数组。
* 
* @author 	Mr.chen  
* @date 2018年8月26日  
*/
public class shuzulianxi {
	public static void main(String[] args) {
		int[][] a=new int[5][8];           //定义了一个5x8二维的数组
		int [] b=new int[40];			   //事先声明一个长度为40的一维数组 以供将二维数组的数据复制到一维数组
		for (int i = 0; i < 5; i++) {	   //a.length 代表二维数组多少行
			for (int j = 0; j < a[i].length; j++) {    //a[i].length代表 第i行的长度
				a[i][j]=(int)(Math.random()*100);  //通过双重for循环进行0-100随机数的填重
				System.out.print(a[i][j]+"	");    //打印二维数组的随机数
			}
			System.out.println(Arrays.toString(a[i])); //打印出第i行的一维数组  (怪不得二维数组称一维数组的一维数组)
			System.arraycopy(a[i], 0, b, i*8, 8); //用System.arraycopy将前5行的一维数组的所有数据复制到事先声明的一维数组b中
		}                                          
		 System.out.println(Arrays.toString(b));	//所以二维数组转化为一维数组b
		Arrays.sort(b);								//对一维数组b进行排序从小到大即 Arrays.sort()排序
		System.out.println(Arrays.toString(b));     //输出对一维数组排序后的结果
		for (int i = 0; i < 5; i++) {				//通过对前5行for循环
			System.arraycopy(b, i*8, a[i], 0, 8);	//将排序好的一维数组b在转化回二维数组
			System.out.println(Arrays.toString(a[i])); //从数组b的起始位置i*8 复制到数组a[i]起始位置为0的地方  长度为8
		}
	}
}

 

输出结果:

内容概要:本文围绕基于分布鲁棒优化的风电不确定性机组组合问题展开研究,提出了一种能够有效应对风电出力不确定性的数学模型与求解方法。通过构建分布鲁棒优化模型,充分考虑风电预测误差的概率分布特征及其不确定性集合的数学表达,在保障电力系统安全运行的前提下,优化发电机组的启停计划与出力分配,从而提升调度方案的经济性与鲁棒性。文中系统阐述了模型的理论基础、不确定性集合的构造方式、目标函数与约束条件的设计,并结合Matlab代码实现了算法仿真与案例验证,展示了该方法在不同场景下的适应能力与性能优势。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力,从事新能源并网调度、电力系统运行优化、能源系统建模等方向的研究人员、高校研究生以及相关领域的工程技术开发者。; 使用场景及目标:①应用于高比例可再生能源接入背景下的电力系统机组组合决策,增强调度方案对风电波动的抵御能力;②为电力市场环境中的发电计划编制与日前调度提供科学依据和技术支持;③作为分布鲁棒优化理论在能源系统不确定性建模中应用的教学与科研案例,推动相关算法的推广与改进。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解流程,重点关注不确定性集的设定逻辑、鲁棒性参数的选择以及算法实现细节,可进一步拓展至多能源耦合系统或多时间尺度调度场景的研究。
内容概要:本文提出了一种结合蒙特卡洛模拟与拉格朗日松弛法的分散式优化方法,用于解决电动汽车充电站在分时电价机制下的有序充电调度问题。通过蒙特卡洛方法模拟电动汽车充电行为的随机性,生成多场景充电负荷数据,并构建以降低电网负荷波动和用户充电成本为目标的优化模型。采用拉格朗日松弛法对问题进行解耦,实现各电动汽车在保护用户隐私的前提下自主参与调度决策,有效提升了计算效率与实际应用可行性。仿真实验验证了该方法在削峰填谷、减少用户电费支出以及增强电网运行稳定方面的优越性能; 适合人群:具备电力系统优化、智能交通系统、运筹学或能源管理等相关背景的研究生、科研人员及工程技术人员; 使用场景及目标:①应用于城市规模化充电站集群的分散式调度系统设计与优化;②研究分时电价政策下用户充电行为与电网负荷之间的互动响应关系;③为高比例电动汽车接入场景下的电网协同控制提供算法支持与仿真验证平台; 阅读建议:读者应结合提供的Matlab代码,深入理解蒙特卡洛场景生成与拉格朗日松弛算法的实现逻辑,建议在复现过程中调整电价策略、用户数量等关键参数,观察其对调度效果的影响,并可进一步拓展至多目标优化框架或引入可再生能源出力不确定性进行联合建模研究。
内容概要:本文针对高渗透率分布式光伏与储能变流器接入配电网所带来的运行挑战,深入研究了传统跟网型(GFL)逆变器在电网故障、弱电网及孤岛工况下易失稳脱网,以及构网型(GFM)虚拟同步发电机(VSG)逆变器在并网状态下缺乏同步调节能力的技术瓶颈,提出了一种可实现GFL与GFM双向平滑切换的先进控制策略。研究首先构建了GFL与GFM共用的硬件平台与内环控制基础,继而系统性地设计了基于关键电气量实时监测的切换判据、精确的双向切换时序逻辑,并创新性地引入了过渡过程的平滑抑制策略,以有效抑制切换瞬间的有功功率冲击、电压闪变与频率突变。全文在Matlab/Simulink环境中搭建了完整的仿真模型,通过对并网转孤岛、孤岛转并网等多种工况的动态仿真,全面验证了所提策略的有效性,结果表明该方法能确保系统在模式切换过程中电压、电流与频率的平稳过渡,显著提升了微电网在复杂运行条件下的韧性、稳定性与供电可靠性。; 适合人群:从事电力电子、新能源并网、微电网控制、智能配电网等领域的高校研究生、科研院所研究人员及电力系统相关企业的工程技术人员。; 使用场景及目标:① 解决高比例可再生能源接入引发的电网稳定性与电能质量问题;② 实现微电网在并网与孤岛两种运行模式间的无缝、可靠切换,保障重要负荷的不间断供电;③ 为构网型与跟网型逆变器的协同运行、新型电力系统构建提供先进的控制理论依据与可落地的技术解决方案。; 阅读建议:建议结合文中提供的Simulink仿真模型进行深入学习,重点剖析切换逻辑模块的设计原理与参数整定方法,通过反复观察和分析不同工况下的仿真波形,深刻理解平滑切换过程中的动态响应机理与控制思想。
内容概要:本文系统对比了GEO优化与传统SEO在律所获客中的底层机制与实际效果差异,指出两者并非替代关系,而是基于不同信任传导机制的获客模式。GEO依托大模型的“AI预筛选”和“权威背书转移”机制,虽流量规模较小,但用户意向浓度高,转化率可达4.8%-8.7%,显著优于传统SEO的1.2%-3.5%。文章提出“信任-转化”双轴模型(TCDA),强调提升信任前置程度比缩短转化路径更能有效提升转化效率,并通过27家律所6个月的实测数据验证GEO在签约数、签约周期、客户满意度等方面的综合优势。同时提供GEO+SEO组合落地的五步法及七大常见陷阱规避策略。; 适合人群:中小型律所管理者、法律行业市场营销人员、数字化转型负责人,以及对AI时代获客策略感兴趣的专业服务机构从业者;尤其适用于希望突破传统SEO瓶颈、寻求高质量线索转化的团队。; 使用场景及目标:①理解GEO与传统SEO在转化逻辑上的本质区别;②制定律所获客渠道组合策略,实现“SEO打底量、GEO提质量”的协同效应;③指导GEO优化的具体实施步骤,避免常见执行误区;④构建以信任前置为核心的长期品牌影响力。; 阅读建议:此资源以实证数据与理论框架结合,深入剖析AI搜索时代的获客变革,建议读者结合自身律所发展阶段与业务特点,从小范围试点入手,重点关注信息一致性、第三方引用建设与高采信内容生产,持续监测AI推荐频次等过程指标,而非仅关注短期咨询量变化。
内容概要:本文研究了一种可实现构网型与跟网型运行模式双向平滑切换的逆变器控制策略,并通过Simulink进行仿真实现。文章首先深入分析了构网型(Grid-Forming)与跟网型(Grid-Following)逆变器的基本工作原理及其适用场景:构网型逆变器具备自主建立电压和频率的能力,适用于弱电网或孤岛运行等缺乏坚强电网支撑的场景;而跟网型逆变器则依赖外部电网提供的电压相位进行同步并网,适用于强电网环境下的稳定并网运行。针对两种模式切换过程中易引发的电流冲击、功率振荡、频率失稳甚至系统失步等关键问题,提出了一种基于模式切换判据与过渡控制策略相结合的解决方案。该方案通过设计合理的切换逻辑、控制架构的动态重构机制以及瞬态补偿环节,有效抑制了模式转换过程中的暂态扰动,实现了两种运行模式之间的无缝、平滑过渡。Simulink仿真结果充分验证了该控制策略在不同电网强度和工况下的有效性与鲁棒性,显著提升了逆变器在复杂多变电网环境下的适应能力、运行灵活性与系统整体可靠性。; 适合人群:具备电力电子、自动控制理论及新能源发电系统相关专业知识,从事逆变器控制算法开发、微电网系统集成、新型电力系统稳定性研究的技术研发人员、高校研究生及工程实践人员。; 使用场景及目标:①应用于需要在并网与离网(孤岛)模式间灵活切换的微电网、光储一体系统及应急电源系统;②提升新能源发电系统在电网故障、弱网条件下的运行韧性与自治能力;③为构网型逆变器技术的工程化应用提供可靠的模式切换控制方案与完整的仿真验证平台。; 阅读建议:建议结合提供的Simulink仿真模型进行同步学习与调试,重点理解模式切换的触发条件判断、控制环路的重构逻辑以及瞬态补偿器的设计原理,可进一步拓展至多逆变器并联运行下的协同切换策略研究。
内容概要:本文系统研究了基于线性决策规则(LDR)的分布鲁棒机组组合模型,旨在应对高比例风电接入背景下电力系统调度中的不确定性挑战。通过构建两阶段分布鲁棒优化框架,采用模糊集刻画风电出力的不确定分布,并引入线性决策规则对实时调整变量进行仿射表示,有效缓解了传统鲁棒优化保守性强和随机规划场景依赖性高的问题。文中详细阐述了模糊集构造方法,并利用对偶理论将原始复杂的min-max-min形式问题转化为可被标准求解器处理的混合整数线性规划(MILP)模型,显著提升了计算可行性与求解效率。研究进一步通过算例对比分析了不同建模方法在经济性、安全性与计算性能方面的表现,验证了所提方法在兼顾系统鲁棒性与运行经济性方面的优越性。; 适合人群:具备电力系统优化、运筹学理论基础,熟悉Matlab编程及YALMIP建模工具,从事新能源并网调度、电力系统经济运行、鲁棒优化算法开发等相关领域的研究生、科研人员及工程技术从业者。; 使用场景及目标:①解决高维不确定性下机组组合问题建模难、求解复杂度高的瓶颈;②为科研人员提供一套完整的分布鲁棒优化与线性决策规则相结合的技术实现路径;③支撑电力系统日前调度决策,提升电网对风电波动的适应能力与安全裕度。; 阅读建议:建议结合文末提供的Matlab代码深入学习,重点掌握模糊集构建、两阶段模型结构设计、对偶化推导过程等关键环节,推荐配合YALMIP与高性能求解器(如CPLEX或Gurobi)开展仿真实验,以全面理解分布鲁棒优化机制及其工程应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值