前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >新年新玩法,数组“招婿”:老许,你要老婆不要?

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

作者头像
白鹿第一帅
发布2023-01-05 15:40:45
5600
发布2023-01-05 15:40:45
举报

文章目录


前言

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

在这里插入图片描述
在这里插入图片描述

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

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

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

在这里插入图片描述
在这里插入图片描述

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

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

代码语言:javascript
复制
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、数组声明存在的语法错误

代码语言:javascript
复制
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 时没有声明数组类型,其报错具体如下图所示:

在这里插入图片描述
在这里插入图片描述

正确代码应修改为:

代码语言:javascript
复制
int[] arr = new int[] { 1, 5, 6, 0, 7, 4, 9, 3 };

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

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

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

代码语言:javascript
复制
elementType[] arrayRefVar;(元素类型[] 数组引用变量;)

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

代码语言:javascript
复制
elementType arrayRefVar[];(元素类型 数组引用变量[];)

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

代码语言:javascript
复制
int[] arr = new int[] { 1, 2, 3 };
代码语言:javascript
复制
int arr[] = new int[] { 1, 2, 3 };

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

代码语言:javascript
复制
int[] arr = { 1, 2, 3 };

或者

代码语言:javascript
复制
int arr[] = { 1, 2, 3 };

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

代码语言:javascript
复制
String tel = "";

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

3.1、基本数据类型

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

代码语言:javascript
复制
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);
	}
}

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

代码语言:javascript
复制
基本类型: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++ 中的指针,指向的是一个对象,指向对象的变量被称为引用变量。这些变量在声明的时候被指定为一个特定的类型,例如:

代码语言:javascript
复制
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 循环对于数组的处理

代码语言:javascript
复制
for(int i:index) {
	tel += arr{i};
}

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

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

代码语言:javascript
复制
for(int i:index) {
	tel += arr[i];
}

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

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

代码语言:javascript
复制
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。也要注意线性表和数组的区别。人家“招婿”都没犯的错误,我们更不能犯哦。

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

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

代码语言:javascript
复制
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。"事了拂衣去,深藏身与名"我就先走了!

在这里插入图片描述
在这里插入图片描述

总结

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

在这里插入图片描述
在这里插入图片描述

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 一、电梯“招婿”启示风波
    • 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、谨防数组下标越界
                      • 五、完整的“招婿”代码及验证
                      • 总结
                      相关产品与服务
                      腾讯云代码分析
                      腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档