JavaSE—Tips(2)

本文深入探讨了Java中的高级特性,包括带标签的break和continue语句的使用方法,BigInteger和BigDecimal类的操作,数组的便捷输出及拷贝技巧,日期与时间处理的最佳实践,以及集合的高效遍历方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、java提供了一种带标签的 break ,可以用于任何可以用break跳出的地方,标签必须放在希望跳出的最外层语句之前,后面以冒号结尾,例如:

//a就是标签,有了这个标签,该循环就不会是死循环
a:
while(true) {
	System.out.println(1);
	while(true) {
		System.out.println(2);
		break a;
	}
}
==========================================================================
int i = 0;
a: 
if (true) {
	switch (i) {
		case 0:
			System.out.println(i);
			break a;
		}
		System.out.println("if语句内!");
	}
	System.out.println("if语句外!");
}

2、同样的,还有一种带标签的continue语句,将跳到与标签匹配的循环首部,例如:

a: 
	for (int k = 0; k < 5; k++) {
		System.out.println("k:"+k);
			  for (int i = 0; i < 5; i++) {
				  if (i == 2) {
					  continue a;
				  }
		System.out.println("i:" + i);
	}
}
//i只能输出0和1,因为当i=2的时候,会返回最外层循环

3、当时用BigInteger或者BigDecimal类的时候,无法使用 '+','-',' * ',' / ',' % ' 这五种运算符,java除了对字符串的拼接重载了 '+' 运算符之外,并没有为其他运算符提供重载,也没有给java程序员在自己的类中重载运算符的机会,对应的在上述两个类中提供了 add,subtract,multiply,divide,mod 方法来提供五种运算方法;

BigInteger a=BigInteger.valueOf(6);
BigInteger b=BigInteger.valueOf(2);

System.out.println("加法:"+a.add(b));
System.out.println("减法:"+a.subtract(b));
System.out.println("乘法:"+a.multiply(b));
System.out.println("除法:"+a.divide(b));
System.out.println("求余:"+a.mod(b));
//BigDecimal中的方法类似上述例子
//BigDecimal中divide方法中的舍入方式请看博客Tips1

4、有个更加简单的便利数组的方式:

int[] arr= {12,23,4,5,6,16};
System.out.println(Arrays.toString(arr));
//输出:[12, 23, 4, 5, 6, 16]

int[][] arr={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
System.out.println(Arrays.deepToString(arr));
//输出:[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

5、Arrsys类中有一个用于拷贝数组的方法,copyOf( ),第一个参数是需要拷贝的数组,第二个是新数组的长度,通过此方法拷贝的数组是一个全新的数组,通过此方法可以实现数组的扩容,也就是实现长度可变的数组,实际上集合底层就是这么做的,而用 '=' 拷贝的数组只是传递的引用,如果原本数组中的元素改变,新数组中的元素也会跟着改变;

6、Date,SimpleDateFormat,LocalDate

		//Date类一般用来表示全球通用的公历日期,侧重表示是时间点
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		Date date = new Date();
		System.out.println(format.format(date));
		//LocalDate类用来表示日期
		//获得当前日期
		System.out.println(LocalDate.now());
                //使用指定的日期构造一个对象
		LocalDate birthday = LocalDate.of(1992, 10, 10);
		//plusDays方法会得到一个距当前日期对象指定天数的一个新的日期
		LocalDate plusDays = birthday.plusDays(1000);
		//获得plusDays的年月日
		System.out.println(plusDays.getYear());
		System.out.println(plusDays.getMonthValue());
		System.out.println(plusDays.getDayOfMonth());
		//获得周几
		System.out.println(plusDays.getDayOfWeek());
		//获得是一年当中的第几天
		System.out.println(plusDays.getDayOfYear());

7、实际上Date类也有getDay,getYear以及getMonth等方法,但是并不推荐大家使用,因为这些方法曾经或者已经被标记为废弃不用或者已过时,因为类库的设计者已经意识到,应该提供单独的类来处理日期,虽然目前仍然可以使用,但有可能在将来某个版本的类库版本会彻底删除这些方法,难道到时候你要重新设计你的程序吗?

8、

9、日历

		//获取当前时间,获得当前月与日
		LocalDate now = LocalDate.now();
		int month = now.getMonthValue();
		int today = now.getDayOfMonth();
		/**
		 * 获得距当前日-1天之前的日期
		 * 之后再获得date当天是周几
		 * 周一对应1,周日对应7,以此类推
		 */
		LocalDate date = now.minusDays(today-1);
		DayOfWeek dayOfWeek = date.getDayOfWeek();
		int value = dayOfWeek.getValue();
		//打印日历表头
		System.out.println("Mon\tTue\tWed\tThu\tFri\tSat\tSun");
		for(int i=1;i<value;i++) {
			System.out.print("   \t");
		}
		/**
		 * 开始循环,迭代条件是当月第一天累加1,循环条件是累加1之后的日期在当月内
		 */
		while(date.getMonthValue()==month) {
			//如果日期为当天,则以x代替,否则打印日期
			if(date.getDayOfMonth()==today) {
				System.out.printf("%3s\t","x");
			}else {
				System.out.printf("%3d\t",date.getDayOfMonth());
			}
			//星期日之后执行换行
			if(date.getDayOfWeek().getValue()==7) {
				System.out.println();
			}
			date=date.plusDays(1);
		}

10、集合的遍历推荐使用foreach或迭代器,foreach隐式的使用了迭代器,不推荐使用get方法,因为效率太低下;

11、可变长参数列表实际上就是数组,可以用asList方法,将可变长参数列表放入一个线性表内,或者可以用toArray方法,将线性表转换为数组;

12、Comparable接口用于比较实现了该接口,并重写了compareTo方法的对象;

       Comparator接口比较的是没有实现Comparable接口,但实现了Comparator接口,并重写了compare方法的对象;

       Comparable接口比较被称为自然顺序比较,Comparator接口比较被称为比较器比较;

 

 

 

 

 

 

 

 

 

 

 

 

内容概要:本文档详细介绍了一个基于MATLAB实现的跨尺度注意力机制(CSA)结合Transformer编码器的多变量时间序列预测项目。项目旨在精准捕捉多尺度时间序列特征,提升多变量时间序列的预测性能,降低模型计算复杂度与训练时间,增强模型的解释性和可视化能力。通过跨尺度注意力机制,模型可以同时捕获局部细节和全局趋势,显著提升预测精度和泛化能力。文档还探讨了项目面临的挑战,如多尺度特征融合、多变量复杂依赖关系、计算资源瓶颈等问题,并提出了相应的解决方案。此外,项目模型架构包括跨尺度注意力机制模块、Transformer编码器层和输出预测层,文档最后提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,尤其是熟悉MATLAB和深度学习的科研人员、工程师和研究生。 使用场景及目标:①需要处理多变量、多尺度时间序列数据的研究和应用场景,如金融市场分析、气象预测、工业设备监控、交通流量预测等;②希望深入了解跨尺度注意力机制和Transformer编码器在时间序列预测中的应用;③希望通过MATLAB实现高效的多变量时间序列预测模型,提升预测精度和模型解释性。 其他说明:此项目不仅提供了一种新的技术路径来处理复杂的时间序列数据,还推动了多领域多变量时间序列应用的创新。文档中的代码示例和详细的模型描述有助于读者快速理解和复现该项目,促进学术和技术交流。建议读者在实践中结合自己的数据集进行调试和优化,以达到最佳的预测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值