黑马程序员_JAVA之API(Object,Scanner,数组高级,包装等类)

本文详细介绍了Java和Android开发的关键技术,包括Object类、Scanner、数组高级、包装类、Math、Random、System、Date、Calendar等核心概念及其应用。通过实际代码实现,深入探讨了这些技术的实现细节与最佳实践。

------- android培训java培训、期待与您交流!----------

Object类:

Object是所有类的超类。内含许多本地方法。

主要方法:

public final Class getClass()   返回此运行时类。

public int hashCode()  根据地址与hash算法计算出来的一个int类型的整数   两个对象的hashCode值不一样,则一定不是同一个对象

代码实现:

package cn.itcast2;

public class Demo5 {

	public static void main(String[] args) {
		Object o = method();
		//其他方法使用o
		Class clazz = o.getClass();
		System.out.println(clazz);
		
		String s = "键盘敲烂,薪资过万!";
		Class clazz2 = s.getClass();
		System.out.println(clazz2);
		System.out.println("================");
		Object o2 = new Object();
		System.out.println(o2);
		int[] arr = new int[]{12,32,43,5,6};
		System.out.println(arr);
		System.out.println("================");
		
		//获取o2与arr的hashcode值与地址对比
		int o2hash = o2.hashCode();
		System.out.println(o2hash);
		int arrhash = arr.hashCode();
		System.out.println(arrhash);
	}
	
	public static Object method(){
		return new Object();
	}
}

public String toString()

Object 类的 toString 方法返回一个字符串

使用打印语句System.out.println();打印某对象时,是先调用该对象的toString方法,再将返回的字符串打印出来

代码实现:

package cn.itcast2;

public class Demo6 {

	public static void main(String[] args) {
		
		Object o = new Object();
//		String string = o.toString();
//		System.out.println(string);
		System.out.println(o);
		
//		Person p = new Person();
		Object o2 = new Person();
		System.out.println(o2.toString());
		System.out.println(o2);
	}

}

public boolean equals(Object obj)  如果没有被重写的话,比较的是地址值

为了使Person类符合我们"正确的需求(只要年龄姓名都相同就是一个人,就应该相同,就应该返回true)",这里重写equals即可

注意:==号只比较地址值。

代码实现(这里省略了Person类代码)

package cn.itcast2;

public class Demo7 {

	public static void main(String[] args) {
		
		int a = 10;
		int b = 20;
		System.out.println(a==b);
		
		Person p = new Person();
		Person p2 = new Person();
		System.out.println(p.hashCode());
		System.out.println(p2.hashCode());
		System.out.println(p==p2);
		
		String s = "努力到感动自己";
		String s2 = "坚持到无能为例";
		System.out.println("=====================");
		
		System.out.println(s==s2);
		System.out.println(s.equals(s2));
		
		
		Person p3 = new Person("悟能", 18);
		Person p4 = new Person("悟能", 18);
		
		System.out.println(p3==p4);
		System.out.println(p3.equals(p4));
	}

}

Scanner:

常用于控制台录入。完成获取数据的功能。

构造方法:

public Scanner(InputStream source)  构造一个新的 Scanner,它生成的值是从指定的输入流扫描的

普通方法:

public int nextXXX()  将读取到的内容转成指定类型。

public String next()  查找并返回来自此扫描器的下一个完整标记。

public String nextLine()  此扫描器执行当前行,并返回跳过的输入信息。  即 输入一行。

代码实现:

package cn.itcast;

import java.util.Scanner;

public class Demo {

	public static void main(String[] args) {
		
		//创建Scanner对象
		Scanner scanner = new Scanner(System.in);

		//从键盘录入int信息
//		int nextInt = scanner.nextInt();
//		System.out.println(nextInt);
//		System.out.println("===================");
		//从键盘录入字符串信息
		String next = scanner.next();
		System.out.println(next);
		
		//从键盘录入一行内容
		String nextLine = scanner.nextLine();
		System.out.println(nextLine);
	}
}

数组高级:

数组排序:

将数组的元素按照某种规则从小到大或者从大到小排列。

冒泡排序:

使用相邻的两个元素依次比较

代码实现:

package cn.itcast;

public class MaoPao {

	public static void main(String[] args) {

		int[] arr = new int[]{3,2,8,9,15,10};
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = 0; j < arr.length - 1 - i; j++) {
				if(arr[j]>arr[j+1]){
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		
		method2(arr);
		System.out.println("===============");
		method(arr);
	}
	public static void method2(int[] arr){
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}
	public static void method(int[] arr){
		StringBuffer sb = new StringBuffer();
		sb.append("{");
		for (int i = 0; i < arr.length; i++) {
			int j = arr[i];
			if(i == arr.length - 1){
				sb.append(j);
			}else{
				sb.append(j).append(",");
			}
		}
		sb.append("}");
		System.out.println(sb);
	}

}

选择排序:

使用一个元素,一次与后边的元素进行比较

代码实现:

package cn.itcast2;

public class Demo2 {

	public static void main(String[] args) {
		int[] arr = new int[]{12,3,5,87,9};
		
		for(int i=0;i<arr.length-1;i++) {
			for(int j=i+1; j<arr.length ; j++) {
				if(arr[i]>arr[j]) {
					int temp = arr[i];
					arr[i]= arr[j];
					arr[j]= temp;
				}
			}
		}
		
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

}

二分法查找:

依次将所查找数据与中心数据对比,根据大小调整数据边界

代码实现:

package cn.itcast2;

public class Demo3 {

	public static void main(String[] args) {
		int[] arr = new int[]{3,5,9,12,87,100,156};
		int number = 90;
		
		int index = method(arr,number);
		System.out.println(index);
	}
	public static int method(int[] arr,int number) {
		//定义索引
		//定义开始索引
		int start = 0;
		//定义结束索引
		int end = arr.length-1;
		//定义中间的索引
		int mid = (start+end)/2;
		//只要mid不等于number,就继续判断
		while(arr[mid]!=number) {
			if(number<arr[mid]) {
				//如果要查找的数,比中间的数小,就将最后的索引变为中间的索引-1,后边的素有元素都不再判断了
				end = mid-1;
			}else {
				//如果要查找的数,比中间的数大,就将开始的索引变为中间的索引+1,前边的素有元素都不再判断了
				start = mid+1;
			}
			//如果出现开始的索引大于最后的索引,则说明数组中没有这个元素,直接返回-1
			if(start>end) {
				return -1;
			}
			//如果arr[mid]==number,则说明在数组中找到了这个数,直接返回mid即可。
			mid = (start+end)/2;
		}
		return mid;
	}

}

包装类:

对应每一种基本数据类型

以Integer为例,调用基本类型包装类对象的方法

构造方法:

public Integer(int value)

public Integer(String s)throws NumberFormatException

public static int parseInt(String s)throws NumberFormatException   将字符串转成int

public static Integer valueOf(int i)    将int转成字符串

public int intValue()  将Integer对象转成int值

代码实现:

package cn.itcast2;

public class Demo6 {

	public static void main(String[] args) {

		Integer integer = new Integer(1000);
		Integer integer2 = new Integer("1000");
		
		System.out.println(integer == integer2);
		System.out.println(integer.equals(integer2));
		
		System.out.println(integer);
		
		int parseInt = Integer.parseInt("10204");
		System.out.println(parseInt);
		
		System.out.println(100+"");
	}

}

基本类型包装类:自动装箱拆箱

以Integer为例:

装箱:使用引用数据类型的时候,可以给基本类型。  即将基本数据类型提升成基本数据类型包装类对象

拆箱:使用基本数据类型时候,可以直接使用基本数据类型包装类对象。即将基本数据类型包装类对象向下转为基本数据类型

代码实现:

package cn.itcast2;

public class Demo7 {

	public static void main(String[] args) {

		Integer integer = new Integer(100);
		
		int i = 100;
		System.out.println(100-20);
		System.out.println(integer-20);
		
		integer = 108;
		System.out.println(integer);
		
//		引用类型的对象不能使用运算符运算
//		String s = "100";
//		System.out.println(s-20);
		
//		Object o = new Object();
//		System.out.println(o+100);
		
		//自动装箱:将int类型的1提升成Integer对象
		Integer x = 1;
		//自动拆箱:将Integer对象向下转成int值1
		//自动装箱:将int类型的2提升成Integer对象
		x = x + 1;
		
		Integer integer2 = null;
		//滤空判断
		//System.out.println(integer2+100);
		
	}

}

Math:

数学方法类,所有方法均为静态方法

主要方法:

public static double abs(double a)  取绝对值

public static double ceil(double a)  天花板  向上取整 

public static double floor(double a)  地板   向下取整

public static double max(double a,double b) 取大值

public static double min(double a,double b) 取小值

public static double pow(double a, double b)  爆炸    取第一个数第二个数次幂

代码实现:

package cn.itcast;

public class Demo {

	public static void main(String[] args) {

		System.out.println(Math.E);
		System.out.println(Math.PI);
		
		System.out.println(Math.abs(-125));
		
		System.out.println(Math.ceil(100.1));
		System.out.println(Math.ceil(100.9));
		System.out.println(Math.ceil(-100.1));
		System.out.println(Math.ceil(-100.9));
		System.out.println("=============================================");
		System.out.println(Math.floor(100.1));
		System.out.println(Math.floor(100.9));
		System.out.println(Math.floor(-100.1));
		System.out.println(Math.floor(-100.9));
		System.out.println("=============================================");
		System.out.println(Math.max(100, 200));
		System.out.println(Math.min(100, 200));
		System.out.println("=============================================");
		System.out.println(Math.pow(100, 2));
		System.out.println("=============================================");
		System.out.println(Math.round(100.1));
		System.out.println(Math.round(100.9));
		System.out.println(Math.round(-100.1));
		System.out.println(Math.round(-100.9));
	}

}

Random:

伪随机数生成类

伪随机原理:

通过不同的种子完成随机数的生成

构造方法:

public Random()  创建一个种子为独一无二的随机数对象

public Random(long seed)  使用单个 long 种子创建一个新的随机数生成器。

普通方法:

public int nextXX() 产生某种类型的随机数

public int nextInt(int n)  产生int类型的随机数  范围[0,n)

代码实现:

package cn.itcast;

import java.util.Random;

public class Demo3 {

	public static void main(String[] args) {

		Random random = new Random();
		
		for (int i = 0; i < 100; i++) {
//			System.out.println(random.nextInt());
			System.out.println(random.nextInt(100));
		}
	}

}

System:

System类为系统相关类,不能被实例化。

主要方法:

public static void gc()  暗示垃圾回收

public static void exit(int status)  退出java程序

public static long currentTimeMillis()  获取当前时间

public static Properties getProperties()  获取系统属性

代码实现:

package cn.itcast;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Random;

public class Demo2 {

	public static void main(String[] args) {

		int x = 0;
		long currentTimeMillis = System.currentTimeMillis();
		
		while(true) {
			
			if(x==100000) {
				//System.exit(0);
				break;
			}
			
			Map<String,Random> map = new HashMap<String, Random>();
			map.put("abc", new Random());
			map.put("sadf", new Random());
			map.put("absdfc", new Random());
			System.out.println(map+"============"+x);
			x++;
		}
		
		long currentTimeMillis2 = System.currentTimeMillis();
		System.out.println(currentTimeMillis2-currentTimeMillis);
		System.out.println(currentTimeMillis2);
		
		Properties properties = System.getProperties();
		System.out.println(properties);
	}

}

Date:

日期类  表示一个瞬间,一个时刻

构造方法:

public Date()  创建一个日期对象,现在

public Date(long date)  创建一个指定毫秒值的日期对象

public long getTime()  获取该日期对象的毫秒值

public void setTime(long time)  设置改日期对象的毫秒值

代码实现:

package cn.itcast2;

import java.util.Date;

public class Demo {

	public static void main(String[] args) {

		Date date = new Date();
		System.out.println(date);
		
		Date date2 = new Date(System.currentTimeMillis()+1000);
		System.out.println(date2);
		
		long time = date.getTime();
		long time2 = date2.getTime();
		System.out.println(time);
		System.out.println(time2);
		
		date.setTime(1000000000000L);
		System.out.println(date);
	}	

}

格式化日期:

DateFormat:DateFormat 是日期/时间格式化子类的抽象类

SimpleDateFormat:日期事件格式化类的子类具体对象

代码实现:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo2 {

	public static void main(String[] args) throws ParseException {
		
		//将日期修改为:XXXX年XX月XX日    XX-XX-XX
		Date date = new Date();
		
		//指定格式化的格式
		String pattern = "yyyy年MM月dd日 HH-mm-ss";
		
		//创建格式化类的对象
		DateFormat df = new SimpleDateFormat(pattern);
		//调用格式化类对象的方法,格式化日期对象
		String format = df.format(date);
		System.out.println(format);
		//Mon Jun 22 11:34:05 CST 2015
		
		System.out.println("====================================");
		//给定日期的字符串
		String s = "1949年02月01日  10-10-10";
		//指定格式化的格式
		String pattern2 = "yy年MM月dd日  HH-mm-ss";
		//创建格式化类的对象
		DateFormat df2 = new SimpleDateFormat(pattern2);
		//调用格式化类对象的方法,将字符串转成Date对象
		Date parse = df2.parse(s);
		System.out.println(parse);
		
	}

}

Calendar:

日历类。

构造方法:

一般不使用子类构造,而是通过父类返回实例对象的方法创建对象

Calendar rightNow = Calendar.getInstance();

普通方法:

public int get(int field)  获取指定字段的值   字段中的月份是从0-11

public final void set(int year,int month, int date)  设置年月日

public abstract void add(int field, int amount)  为某个字段添加某个量

public final Date getTime()  给我一个日历对象  还你一个日期对象

代码实现:

package cn.itcast2;

import java.util.Calendar;

public class Demo3 {

	public static void main(String[] args) {

		Calendar rightNow = Calendar.getInstance();
		System.out.println(rightNow);
		
		rightNow.set(2015, 5, 22);
		rightNow.add(Calendar.YEAR, 1);
		
		int i = rightNow.get(Calendar.YEAR);
		int j = rightNow.get(Calendar.MONTH);
		int k = rightNow.get(Calendar.DAY_OF_MONTH);
		
		System.out.println(i+"年"+(j+1)+"月"+k+"日");
		
		//找到rightNow变量的毫秒值
		long time = rightNow.getTime().getTime();
		System.out.println(time);
	}

}

内容概要:本文围绕“基于分布式模型预测控制的多个固定翼无人机一致性控制”展开,利用Matlab代码实现相关算法的仿真,旨在通过分布式控制策略实现多架固定翼无人机在复杂动态环境中的协同飞行与一致性控制。研究结合模型预测控制(MPC)方法,构建适用于多无人机系统的分布式优化框架,重点解决了通信受限、信息延迟及无中心化指挥条件下的协同稳定性问题。内容涵盖固定翼无人机的动力学建模、分布式MPC优化求解机制、一致性协议设计、通信拓扑结构分析以及仿真验证全过程,确保多机系统在保持队形一致的同时完成协同任务。; 适合人群:具备自动控制理论、无人机系统建模或多智能体协同控制基础,从事智能无人系统、集群控制、自动化与机器人等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多无人机协同编队飞行、集群侦察、分布式任务执行等实际工程场景;②为分布式MPC算法在多智能体系统中的一致性控制提供可复现的Matlab仿真案例,推动先进控制理论向工程实践转化;③服务于科研论文复现、算法验证、控制系统课程设计与毕业课题参考。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块运行与调试,重点关注分布式MPC在不同通信拓扑下对一致性收敛性能的影响,并可通过调整预测时域、权重矩阵与噪声参数等方式深化对算法鲁棒性与适应性的理解。
内容概要:本文提出了一种基于变分模态分解(VMD)、麻雀搜索算法(SSA)优化与长短期记忆网络(LSTM)相结合的光伏功率预测模型(VMD-SSA-LSTM),旨在提升光伏发电预测的精度与鲁棒性。该方法首先利用VMD对原始非平稳光伏功率序列进行自适应分解,获得一系列具有更稳定特征的本征模态分量(IMFs),有效降低数据复杂性与噪声干扰;随后引入麻雀搜索算法(SSA)对LSTM网络的关键超参数(如学习率、隐层节点数等)进行全局寻优,克服传统试凑法效率低、易陷入局部最优的问题,显著提升模型收敛速度与泛化能力;最后,构建多个LSTM子模型分别预测各模态分量,并将结果重构得到最终的光伏功率预测值。该混合模型充分融合了VMD在信号预处理中的优异分解性能、SSA在参数优化中的高效搜索能力以及LSTM在捕捉时间序列长期依赖关系上的强大建模优势,实现了对复杂气象因素影响下光伏出力波动的高精度拟合与预测。; 适合人群:具备一定电力系统、新能源发电或时间序列预测基础知识,熟悉MATLAB编程环境,从事光伏功率预测、智能电网调度、可再生能源集成、负荷预测等领域研究的科研人员、工程技术人员及高校研究生。; 使用场景及目标:①应用于光伏电站的短期与超短期功率预测,为电网安全调度、电力市场交易、储能系统配置及需求侧响应提供精准数据支撑;②解决传统单一预测模型(如ARIMA、BPNN、单一LSTM)在处理非平稳、强波动性光伏数据时存在的精度不足、稳定性差等问题;③为风电、负荷等其他非平稳时序预测问题提供一种有效的“分解-优化-预测”混合建模范式与技术实现路径。; 阅读建议:建议读者结合文中提供的完整MATLAB代码,深入理解VMD信号分解、SSA优化算法流程及LSTM网络构建的每一个技术环节,通过实际历史数据进行模型复现与对比实验(如与VMD-LSTM、SSA-LSTM等模型比较),掌握参数调优技巧与模型性能评估方法,从而真正掌握该先进混合预测模型的核心思想与应用精髓。
代码转载自:https://pan.quark.cn/s/a4b39357ea24 在当代信息技术行业,深度学习技术的应用已经全面渗透到众多实际情境中,其中生成对抗网络(GAN)以及深度卷积生成对抗网络(DCGAN)被视为促进人工智能领域发展的核心技术之一。接下来将具体阐述如何借助Pytorch框架与MNIST数据集来完成基础GAN和DCGAN的开发,并解析过程中涉及的关键概念。 ### Pytorch框架与MNIST数据集概述 **Pytorch** 被视为一种广受欢迎的开源机器学习平台,其具备动态计算图与高度适应性等特性,因此在学术研究领域备受推崇,能够支持多种型的深度学习架构。 **MNIST数据集** 是一个包含手写数字的图像集合,常用于训练各图像识别系统,涵盖从0至9的数字图像,每张图像的尺寸为28x28像素。由于其入门级难度,MNIST数据集特别适合用于教学演示和实验操作。 ### 基础生成对抗网络(GAN)核心概念 **基础GAN** 是一种由生成器(Generator)和判别器(Discriminator)构成的无监督学习框架。生成器的核心任务是创造足以乱真的图像数据,而判别器的关键职责在于精确辨别真实图像与生成图像之间的差异。 1. **生成器**:该模块以随机噪声为输入,通过深度神经网络进行转换,最终输出接近真实图像的数据。其根本目的在于迷惑判别器。 2. **判别器**:对输入数据(无论是真实图像还是生成图像)进行评估,并输出其属于真实样本的概率。判别器的训练重点在于提升识别的精确度。 3. **训练机制**:GAN的训练过程涉及两个网络之间的交替训练,即在锁定一个网络参数的情况下对另一个网络进行训练。首先优化判别器以增强其区分能力...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值