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

Posted 白鹿第一帅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新年新玩法,数组“招婿”:老许,你要老婆不要?相关的知识,希望对你有一定的参考价值。

文章目录


前言

随着疫情的放开,在家里闲来无事的我出门放风。电梯里无意间瞥见一张“招婿”启示,寻找一位又高又帅的 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 += arri;

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 += arri;

“招婿”代码分析:在第 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。"事了拂衣去,深藏身与名"我就先走了!


总结

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


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

以上是关于新年新玩法,数组“招婿”:老许,你要老婆不要?的主要内容,如果未能解决你的问题,请参考以下文章

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

应聘女婿,先考代码,你们看我能应聘上吗?

iPhone X免费送!真的不装x!玩法攻略都在这儿,赶紧来参加!

BHG Mall超级宠粉节攻略收藏,商业IP化出圈新玩法

BHG Mall超级宠粉节攻略收藏,商业IP化出圈新玩法

老婆给我推荐了一个副业,现在收入高于我工资,我要不要辞职?