C#使用随机数获取数组时,遇到了取空的情况,经过遍历得到数组的每一位均有值,但是会取空
随机数部分代码
int j = Random.Range(0, ArrayX.Length);
int k = Random.Range(0, ArrayX[j].Length);
Debug.Log(j);
Debug.Log(k);
Debug.Log(ArrayX[j][k]);
输出的值大部分为空:

全部代码:
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Answer_four : MonoBehaviour
{
//读取文档
string[][] ArrayX;
string[] lineArray;
public int topicMax = 3;//最大题数
private List<bool> isAnserList = new List<bool>();//存放是否答过题的状态
//加载题目
Button[] Buttonlist = new Button[27];//答题Button
public Text indexText;//当前第几题
public Text TM_Text;//当前回答
public List<Text> DA_TextList;//选项
private int topicIndex = 0;//第几题
public Text tipsText;//提示信息
public List<int> Qarray;//存放现有题目数组
int PosFlag = 0; //位置
string[] ArrayA = new string[9];//答题数组
void Start()
{
GameObject BtnGroup = GameObject.Find("ButtonGroup");
//赋值各个按钮
for(int i=0;itransform.childCount;i++)
{
Buttonlist[i] = BtnGroup.transform.GetChild(i).GetComponent
该回答内容部分引用GPT,GPT_Pro更好的解决问题
C#使用随机数获取数组时,遇到了取空的情况。这是一个比较常见的问题,在使用Random.Range()获取随机数的情况下可能出现取空的情况。原因通常是由于Random.Range()返回的是一个介于指定范围之间的整数,但是如果数组长度不够,可能导致某些位置为空。
下面给出一个例子,以便更好地理解这个问题:假设我们有一个包含4个元素的int[]类型的数组,那么当我们使用Random.Range(0,4)获取随机数时,返回值可能是0,1,2和3中的任意一个,但是不会大于3,所以当我们试图访问索引4时就会得到一个空值。
为了解决这个问题,我们可以使用一个while循环来遍历数组中的每一位元素,直到找到一个不为null的元素。例如:
int[] array = new int[4];
// 假设已有4个元素全部不为null
int index = Random.Range(0, array.Length);
// 获取随机数 0、1、2、3中的任意一个
while (array[index] == null)
{
index = Random.Range(0, array.Length);
}
// 如果当前位置的元素为null则重新获取随机数并重新检查
Debug.Log(array[index]);
// 输出不为null的元素
如果回答有帮助,望采纳。
以下答案引用自GPT-3大模型,请合理使用:
示例:
因为有取空的情况,所以我们要做出一些修改。随机数每次不仅要取到数组中的正确值,同时也要避免重复,代码如下:
int j = Random.Range(0, ArrayX.Length);
int k = Random.Range(0, ArrayX[j].Length);
//先进行判断,如果当前随机取出来是空,则跳过
while (ArrayX[j][k] == "" || ArrayX[j][k] == "\r" || ArrayX[j][k] == " ")
{
j = Random.Range(0, ArrayX.Length);
k = Random.Range(0, ArrayX[j].Length);
}
Debug.Log(ArrayX[j][k]);
如果我的回答解决了您的问题,请采纳我的回答