新年新玩法,数组“招婿”:老许,你要老婆不要?

news2024/9/28 1:17:33

文章目录

  • 前言
  • 一、电梯“招婿”启示风波
    • 1.1、寻找“一位又高又帅的 IT 同行人员”
    • 1.2、数组“招婿”核心代码
    • 1.3、代码全是错误,水平不高
  • 二、Java 声明、创建、初始化数组
    • 2.1、数组声明存在的语法错误
    • 2.2、数组声明、创建、初始化的正确方式
  • 三、Java 中对于不同数据类型的处理
    • 3.1、基本数据类型
    • 3.2、引用数据类型
    • 3.3、类型默认值
  • 四、foreach 循环对于数组的处理
    • 4.1、foreach 循环怎么处理数组?
    • 4.2、谨防数组下标越界
  • 五、完整的“招婿”代码及验证
  • 总结


前言

随着疫情的放开,在家里闲来无事的我出门放风。电梯里无意间瞥见一张“招婿”启示,寻找一位又高又帅的 IT 同行人员当女婿,女不女婿什么的无所谓,“一位又高又帅的 IT 同行人员”这说的不就是我吗?定睛一看,还是 Java 语言写的,简单分析了一下:为了排除掉非 IT人员的骚扰,对口寻人,通过数组来获取联系方式,这年头不懂点技术还不能结婚是吧?这更不是术业有专攻吗?来劲了,我都不想出去玩了,这条件,被人捷足先登了怎么办!为了兄弟们的老婆,作为新时代雷锋,我来为你们打下第一关。

在这里插入图片描述


一、电梯“招婿”启示风波

1.1、寻找“一位又高又帅的 IT 同行人员”

随着疫情的放开,在家里闲来无事的我出门放风。电梯里无意间瞥见一张“招婿”启示,寻找一位又高又帅的 IT 同行人员当女婿,女不女婿什么的无所谓,“一位又高又帅的 IT 同行人员”这说的不就是我吗?“招婿”启示具体如下图所示:

在这里插入图片描述

1.2、数组“招婿”核心代码

定睛一看,还是 Java 语言写的,简单分析了一下:为了排除掉非 IT人员的骚扰,对口寻人,通过数组来获取联系方式,这年头不懂点技术还不能结婚是吧?这更不是术业有专攻吗?来劲了,我都不想出去玩了,这条件,被人捷足先登了怎么办,马上将核心代码摘抄如下:

int[] arr = new [] {1,5,6,0,7,4,9,3};
int[] index = new int[] {0,1,2,3,4,0,5,1,2,6,7};
String tel = "";
for(int i:index) {
	tel += arr{i};
}
System.out.println("联系方式:" + tel);

1.3、代码全是错误,水平不高

显而易见的,这招婿题目里有很多语法错误,月薪两万的程序媛哪能这么拉?IDE 满满的全是报错,具体如下图所示:

在这里插入图片描述
所以我猜测这题可能是老丈人自个儿出的,算是一个“抛出去的绣球”,留个心眼,接下来我们对于核心代码进行逐行分析。

在这里插入图片描述

二、Java 声明、创建、初始化数组

2.1、数组声明存在的语法错误

int[] arr = new [] {1,5,6,0,7,4,9,3};
int[] index = new int[] {0,1,2,3,4,0,5,1,2,6,7};

“招婿”代码分析:第一行和第二行代码,分别声明、创建和初始化了两个 int 型的数组 arr 与 index,arr 中包含 1,5,6,0,7,4,9,3 八个元素,index 中包含 0,1,2,3,4,0,5,1,2,6,7 十一个元素。

第一行代码包含有严重的语法错误,创建数组 arr 时没有声明数组类型,其报错具体如下图所示:

在这里插入图片描述
正确代码应修改为:

int[] arr = new int[] { 1, 5, 6, 0, 7, 4, 9, 3 };

2.2、数组声明、创建、初始化的正确方式

本着普及知识的原则,进一步给“老丈人”扫盲,我们回忆一下:在 Java 中我们有两种常见的对于数组的声明、创建和初始化的方法

第一种方法是我们在 Java 中最为常用的,其基本格式如下:

elementType[] arrayRefVar;(元素类型[] 数组引用变量;

第二种方法这种风格来自于 C/C++,其基本格式如下:

elementType arrayRefVar[];(元素类型 数组引用变量[];

如声明并创建一个 int 型的数组 arr,初始化包含三个元素 1,2,3,对应的两种形式的实现代码如下:

int[] arr = new int[] { 1, 2, 3 };
int arr[] = new int[] { 1, 2, 3 };

当然我们也可以使用如下的形式:

int[] arr = { 1, 2, 3 };

或者

int arr[] = { 1, 2, 3 };

三、Java 中对于不同数据类型的处理

String tel = "";

“招婿”代码分析:在第三行代码中,定义并初始化了一个字符串的对象 tel 用于存放手机号,默认值由空值代替 null。

3.1、基本数据类型

对于 Java 中的八大基本数据类型、包装类、最小值、最大值在这里我们写个小 demo 简单回忆一下。

package com.bailu.test;

public class PrimitiveTypeTest {
	public static void main(String[] args) {
		// byte
		System.out.println("基本类型:byte 二进制位数 " + Byte.SIZE);
		System.out.println("包装类:java.lang.Byte");
		System.out.println("最小值:Byte.MIN_VALUE " + Byte.MIN_VALUE);
		System.out.println("最大值:Byte.MAX_VALUE " + Byte.MAX_VALUE);
		System.out.println("-----------------------------------");
		// short
		System.out.println("基本类型:short 二进制位数 " + Short.SIZE);
		System.out.println("包装类:java.lang.Short");
		System.out.println("最小值:Short.MIN_VALUE " + Short.MIN_VALUE);
		System.out.println("最大值:Short.MAX_VALUE " + Short.MAX_VALUE);
		System.out.println("-----------------------------------");
		// int
		System.out.println("基本类型:int 二进制位数 " + Integer.SIZE);
		System.out.println("包装类:java.lang.Integer");
		System.out.println("最小值:Integer.MIN_VALUE " + Integer.MIN_VALUE);
		System.out.println("最大值:Integer.MAX_VALUE " + Integer.MAX_VALUE);
		System.out.println("-----------------------------------");
		// long
		System.out.println("基本类型:long 二进制位数 " + Long.SIZE);
		System.out.println("包装类:java.lang.Long");
		System.out.println("最小值:Long.MIN_VALUE " + Long.MIN_VALUE);
		System.out.println("最大值:Long.MAX_VALUE " + Long.MAX_VALUE);
		System.out.println("-----------------------------------");
		// float
		System.out.println("基本类型:float 二进制位数 " + Float.SIZE);
		System.out.println("包装类:java.lang.Float");
		System.out.println("最小值:Float.MIN_VALUE " + Float.MIN_VALUE);
		System.out.println("最大值:Float.MAX_VALUE " + Float.MAX_VALUE);
		System.out.println("-----------------------------------");
		// double
		System.out.println("基本类型: double 二进制位数 " + Double.SIZE);
		System.out.println("包装类:java.lang.Double");
		System.out.println("最小值:Double.MIN_VALUE " + Double.MIN_VALUE);
		System.out.println("最大值:Double.MAX_VALUE " + Double.MAX_VALUE);
		System.out.println("-----------------------------------");
		// char
		System.out.println("基本类型:char 二进制位数 " + Character.SIZE);
		System.out.println("包装类:java.lang.Character");
		System.out.println("最小值:Character.MIN_VALUE " + (int) Character.MIN_VALUE);
		System.out.println("最大值:Character.MAX_VALUE " + (int)Character.MAX_VALUE);
	}
}

下面是我们得到的结果,简简单单是不是?

基本类型:byte 二进制位数 8
包装类:java.lang.Byte
最小值:Byte.MIN_VALUE -128
最大值:Byte.MAX_VALUE 127
-----------------------------------
基本类型:short 二进制位数 16
包装类:java.lang.Short
最小值:Short.MIN_VALUE -32768
最大值:Short.MAX_VALUE 32767
-----------------------------------
基本类型:int 二进制位数 32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE -2147483648
最大值:Integer.MAX_VALUE 2147483647
-----------------------------------
基本类型:long 二进制位数 64
包装类:java.lang.Long
最小值:Long.MIN_VALUE -9223372036854775808
最大值:Long.MAX_VALUE 9223372036854775807
-----------------------------------
基本类型:float 二进制位数 32
包装类:java.lang.Float
最小值:Float.MIN_VALUE 1.4E-45
最大值:Float.MAX_VALUE 3.4028235E38
-----------------------------------
基本类型: double 二进制位数 64
包装类:java.lang.Double
最小值:Double.MIN_VALUE 4.9E-324
最大值:Double.MAX_VALUE 1.7976931348623157E308
-----------------------------------
基本类型:char 二进制位数 16
包装类:java.lang.Character
最小值:Character.MIN_VALUE 0
最大值:Character.MAX_VALUE 65535

3.2、引用数据类型

在 Java 中除去八大基本数据类型,数组、对象都是引用数据类型,类似于 C/C++ 中的指针,指向的是一个对象,指向对象的变量被称为引用变量。这些变量在声明的时候被指定为一个特定的类型,例如:

Boy boy = new Boy("bailu");

变量一旦被声明,类型就不能被改变了,所有引用类型的默认值都是 null。

3.3、类型默认值

八大基本数据类型和引用数据类型的默认值具体如下表所示:

数据类型默认值
byte0
short0
int0
long0L
float0.0f
double0.0d
char‘u0000’
booleanfalse
String (or any object)null

四、foreach 循环对于数组的处理

for(int i:index) {
	tel += arr{i};
}

“招婿”代码分析:在第 4~6 行间引入了一个 foreach 循环,定义了一个 int 变量 i 来遍历数组 index。遍历次数即为 index 数组中元素的个数,也就是我们需要得到的手机号包含的位数,故 index 数组中必须要包含 11 位数字。通过对遍历 index 数组下标的形式将对应的元素组合成一个 11 位数字的字符串,即完整的“招婿”手机号,所以这就要求数据的下标是不能越界的,即在数组 index 中的任意一个元素值都不能大于 arr 数组的长度,即满足 int 型且小于等于 7。

故上面代码存在语法错误,正确的应该为:

for(int i:index) {
	tel += arr[i];
}

4.1、foreach 循环怎么处理数组?

foreach 循环属于 for 循环,可以在不使用数组下标变量的情况下顺序地遍历整个数组,例如显示数组 arr 的所有元素就可以使用如下代码:

int[] arr = new int[] { 0, 1, 2, 4, 4, 5, 9 };
for (int i : arr) {
	System.out.println(i);
}

运行结果具体如下图所示:

在这里插入图片描述
在使用 foreach 循环我们需要注意:定义的变量 i 必须声明为与被遍历数组 arr 中相同的数据类型

“招婿”代码分析:根据 foreach 循环对于数组的处理原则,我们按照 index 数组{ 0, 1, 2, 3, 4, 0, 5, 1, 2, 6, 7 }的下标顺序,我们在对应数组 arr 中寻找对应元素,分别为:1,5,6,0,7,1,4,5,6,9,3,即得到的 tel 为 15607145693。

4.2、谨防数组下标越界

越界访问数组是在 Java 中经常出现的程序设计错误,它会抛出一个运行错误 ArrayIndexOutOfBoundsException。为了尽量避免这个错误的发生,在使用数组的时候我们应该确保使用下标不超过 arrayRefVar.ength-1。也要注意线性表和数组的区别。人家“招婿”都没犯的错误,我们更不能犯哦。

五、完整的“招婿”代码及验证

经过我们的一波分析,现在完整代码浮出水面,即:

package com.bailu.test;

public class Zhaoxu {
	public static void main(String[] args) {
		int arr[] = new int[] { 1, 5, 6, 0, 7, 4, 9, 3 };
		int[] index = new int[] { 0, 1, 2, 3, 4, 0, 5, 1, 2, 6, 7 };
		String tel = "";
		for (int i : index) {
			tel += arr[i];
		}
		System.out.println("联系方式为:" + tel);
	}
}

我们运行一下结果,看看对不对,具体如下图所示:

在这里插入图片描述
没毛病,简简单单拿下!查了一下归属地,湖北武汉的嗷!把我这篇文章解题思路背会,上门女婿非你莫属。

在这里插入图片描述
兄弟们可以上了,但是现在网络诈骗盛行,要谨防电信诈骗,记得先下载国家反诈中心 APP。"事了拂衣去,深藏身与名"我就先走了!

在这里插入图片描述


总结

现在干啥的门槛都提高了,“招婿”都得对口了,兄弟们要努力提高自己啊。小小一道招婿题,里面的学问和暴露出来的问题也不少,在开发中要养成规范代码书写的好习惯,不然是真容易被人看笑话;也不要“好高骛远”,基本功要扎实,我们可能没有那么多造航母的机会,把螺丝打好不出错就是优秀了。另外,有哪位兄弟出手成功的,记得来给我送包喜糖!

在这里插入图片描述


我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

尚医通-医院详情-科室接口-显示科室前端整合(二十四)

目录: (1)医院详情-功能 实现 (2)医院排班-需求分析 (3)医院排班-科室接口开发 (4)医院排班-显示科室前端整合 (1)医院详情-功能 实现 在Ho…

基于KT6368A芯片开发SOP8蓝牙自拍杆方案记录总结

一、简介给客户开发一款蓝牙自拍杆的方案芯片,使用KT6368A单芯片解决。两种实现逻辑1、由客户的遥控MCU来控制蓝牙芯片的开启和关闭 2、由KT6368A蓝牙芯片自己完成所有的事情,分两个按键,一个按键短按开机,短按关机。第二个按键实…

【SPI实验--数码管】

SPI实验--数码管一、SPI概念二、SPI硬件连接三、SPI总线通信协议四、SPI四种通信模式五、代码实现数码管一、SPI概念 1.SPI总线是Motorola首先提出的全双工三线制/四线制同步串行总线 2.采用主从模式(Master Slave)架构,支持多slave模式应用…

预测2023年Web3的9大发展趋势

Crypto 和 DeFi 在 2022 年深陷熊市,但 Web3 方面的需求刚刚才开始获得关注。在过去的 12 个月里,Web3 相关的搜索与 2021 年底的峰值相比,一直保持在 30% 以内,下一个上升趋势可能正在到来。下面我列出了目前势头正旺的 9 个 Web…

PIPE接口基本描述

信号名方向描述TxDataIN并行数据输入总线TxDataValidIN1:表示cycle数据有效;0:表示cycle数据无效RxDataOUT并行数据输出总线RxValidOUT1:表示符号锁及当RxDataValid有效时,数据有效 PHY MODEINPHY STATUSOUT SerDesA…

java swing电子商务系统

一、项目简介 本项目是一套基于java swing的电子商务系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,ec…

opencv案例实战——银行卡模式匹配识别

系列文章目录 1.图像读取及其通道与灰度 2.图像填充与图像融合 3.图像滤波 4.图像阈值 5.腐蚀与膨胀 6.图像梯度 7.边缘检测 8.轮廓与轮廓特征 银行卡模式匹配识别系列文章目录前言案例介绍划分模板1.思路2.获取边缘3.获取外接矩形图像预处理切割礼帽操作分割数字块sobel算子膨…

LeetCode题解 二叉树(十):654 最大二叉树;617合并二叉树

654 最大二叉树 medium 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构…

RHCEansible 编写playbook---yaml

YAML 语言特性 YAML的可读性好 YAML和脚本语言的交互性好 YAML使用实现语言的数据类型 YAML有一个一致的信息模型 YAML易于实现 YAML可以基于流来处理 YAML表达能力强,扩展性好YAML的三种数据结构 对象: 键值对的集合,又称为映射、哈希、字典…

Map数据结构详解

Map Object本质上是键值对的集合(Hash结构),但Object只能将字符串当做键,这就给Object带来了很大的限制。 let data {} let s {name : 东方不败} data[s] 西方求败// 如果键传入非字符串的值,会自动为字符串 cons…

思科路由器DHCPv6服务配置

配置如下 Router>ena Router#conf t Router(config)#host R1 R1(config)#ipv6 unicast-routing R1(config)#int g0/0 R1(config-if)#ipv6 add 2001:1::1/64 R1(config-if)#no sh R1(config-if)#exit R1(config)#service dhcp R1(config)#ipv6 local pool v6pool …

CTF中的PHP特性函数(中)

前言 上篇文章给大家带来了PHP中最基本的特性,不知道大家学习的怎样了,回顾上文,我们讲了MD5强弱碰撞以及正则匹配的绕过,总体来看还是很简单的,下面给大家带来新的PHP特性讲解,会稍微比上一篇难一些。 i…

开源工作流引擎如何支撑企业级 Serverless 架构?

作者:董天欣(雾雾) Serverless 应用引擎(SAE)是一款底层基于 Kubernetes,实现了 Serverless 架构与微服务架构结合的云产品。作为一款不断迭代的云产品,在快速发展的过程中也遇到了许多挑战。如…

2022年统一大市场研究报告

第一章 行业概况 国内统一大市场指的是在全国范围内,在充分竞争以及由此形成的社会分工基础上,各地区市场间、各专业市场间形成了相互依存、相互补充、相互开放、相互协调的有机的市场体系。在这种市场体系下,商品和要素能够按照价格体系的调…

干货 | 在Docker 上搭建持续集成平台 Jenkins

Docker是一个开源的应用容器引擎,基于 Go 语言开发,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的系统。Docker 是世界领先的软件容器平台,Docker 官方的口号是”调试你的应用&…

Three.js学习(二)three.js的一些基本操作

文章目录1.鼠标操作三维场景旋转、移动和缩放2.场景中添加新的三维图形3.设置材质效果4.光源效果1.鼠标操作三维场景旋转、移动和缩放 使用THREE的OrbitControls控件,可以实现鼠标控制三维图形的操作。主要是通过监听鼠标操作,控制相机的三维参数。 imp…

python数据分析-matplotlib、numpy、pandas

数据分析概述数据分析就是用适当的方法对收集来的大量数据进行分析,帮助人们在一处判断,以便采取适当行动数据分析流程jupyter notebook说明matplotlib:Matplotlib — Visualization with Python基本要点能将数据进行可视化,更直观…

docker基本命令演示

docker拉取redis镜像演示首先前往:https://hub.docker.com找到需要的redis镜像然后 点击之后使用命令 docker pull redis 拉取redis 成功之后使用命令 docker images 查看本地的镜像使用命令导出镜像到指定文件 docker save -o redis.tar redis:latestdocker save…

Android13适配

遇到的一些问题 1.WebChromeClient的 API onReachedMaxAppCacheSize 没了 onReachedMaxAppCacheSize overrides nothing // 扩充缓存的容量override fun onReachedMaxAppCacheSize(spaceNeeded: Long, totalUsedQuota: Long, quotaUpdater: QuotaUpdater) {quotaUpdater.upda…

QT学习笔记(下)

项目实践 前言 本项目的实践主要是以翻金币的项目为例,进行QT项目的实践。游戏分为3个场景,分别是mainscene主场景、chooselevelscene选择关卡场景、playscene游戏场景,以上的三个场景是按顺序实现的。并且定义了两个自定义的QPushButton按…