为啥我的数组长度表达式只返回 1?
Posted
技术标签:
【中文标题】为啥我的数组长度表达式只返回 1?【英文标题】:Why is my Expression for Array Length Just Returning 1?为什么我的数组长度表达式只返回 1? 【发布时间】:2018-04-10 09:09:13 【问题描述】:我正在使用 Unity 开发一款游戏,只是注意到有时会出现一个奇怪的错误。发生的情况是我正在实例化的字符串数组创建得太短,即使我正在编写的日志消息确认表达式应该创建一个更大的数组。
下面是相关的sn-p代码:
Debug.Log("hero.power = " + hero.power.ToString());
Debug.Log("allyPower = " + allyPower.ToString());
Debug.Log("opponent.power = " + opponent.power.ToString());
int max = Mathf.Max(hero.power + allyPower, opponent.power);
report.flips[hero.name] = new string[hero.power + allyPower];
report.flips[opponent.name] = new string[opponent.power];
Debug.Log("max = " + max.ToString());
Debug.Log("report.flips[hero.name].Length = " + report.flips[hero.name].Length.ToString());
在 Unity 中创建的输出:
这表明hero.power
是3
,allyPower
是0
,但不是创建string[3]
,而是创建string[1]
。
关于使用表达式来确定导致问题的数组长度有什么问题吗?我暂时改成这样:
int heroArrayLength = hero.power + allyPower;
report.flips[hero.name] = new string[heroArrayLength];
它似乎有所帮助,虽然这个错误以前是不稳定的,所以我不完全确定它是否已修复。即使是这样,我仍然不清楚真正的原因是什么。
有人知道这里发生了什么吗?
【问题讨论】:
hero.name==opponent.name
有机会吗?在这种情况下,您将设置相同的“翻转”两次,第二次将设置为长度 1(opponent.power
为 1)
@MarcGravell ...哦,天哪,你是对的。该名称是根据用户输入设置的,因此我只需将按键组合在一起即可快速输入值并继续前进,而无需考虑它。因此,在某些情况下,我绝对有可能只是不小心输入了两次相同的内容。
“asdf”进入系统的次数令人惊讶:)
【参考方案1】:
如果hero.name
与opponent.name
相同,则:
report.flips[hero.name] = new string[hero.power + allyPower];
report.flips[opponent.name] = new string[opponent.power];
都将设置相同的“翻转”(无论“翻转”是什么),并且第二次“获胜”。由于opponent.power
是1
,最终数组的长度为1
,这意味着report.flips[hero.name]
的长度为1
。
【讨论】:
以上是关于为啥我的数组长度表达式只返回 1?的主要内容,如果未能解决你的问题,请参考以下文章
C语言数组初始化的问题?为啥我初始化了,数组长度还为0啊,如图
Angular 为啥这个 HTTP 请求响应数组的长度未定义?
2021-09-20:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O