C#使用随机数获取数组时,遇到了取空的情况

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]);

输出的值大部分为空:

img


全部代码:

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); 
// 获取随机数 0123中的任意一个

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]);

如果我的回答解决了您的问题,请采纳我的回答