新年新玩法,数组“招婿”:老许,你要老婆不要?
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、类型默认值
八大基本数据类型和引用数据类型的默认值具体如下表所示:
数据类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | ‘u0000’ |
boolean | false |
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。"事了拂衣去,深藏身与名"我就先走了!
总结
现在干啥的门槛都提高了,“招婿”都得对口了,兄弟们要努力提高自己啊。小小一道招婿题,里面的学问和暴露出来的问题也不少,在开发中要养成规范代码书写的好习惯,不然是真容易被人看笑话;也不要“好高骛远”,基本功要扎实,我们可能没有那么多造航母的机会,把螺丝打好不出错就是优秀了。另外,有哪位兄弟出手成功的,记得来给我送包喜糖!我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!
以上是关于新年新玩法,数组“招婿”:老许,你要老婆不要?的主要内容,如果未能解决你的问题,请参考以下文章