为啥我的数组长度表达式只返回 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.power3allyPower0,但不是创建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.nameopponent.name 相同,则:

report.flips[hero.name] = new string[hero.power + allyPower];
report.flips[opponent.name] = new string[opponent.power];

都将设置相同的“翻转”(无论“翻转”是什么),并且第二次“获胜”。由于opponent.power1,最终数组的长度为1,这意味着report.flips[hero.name] 的长度为1

【讨论】:

以上是关于为啥我的数组长度表达式只返回 1?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 char 数组长度不正确?

C语言数组初始化的问题?为啥我初始化了,数组长度还为0啊,如图

为啥零长度 VLA 是 UB?

Angular 为啥这个 HTTP 请求响应数组的长度未定义?

数组长度返回0

2021-09-20:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O