Unity中如何调试输出自定义类内的二维数组?
解决二维数组输出到控制台的问题
首先咱们先把你代码里的语法错误和逻辑小问题修正掉——这些问题会导致代码连编译都通不过,更别说输出数组内容了:
第一步:修正CustomClass.cs的问题
using System.Text; // 要引入这个才能用StringBuilder class ScoreBoard { // 把arrTmp改成类的私有字段,这样方法执行完后数组不会被销毁,还能被其他方法访问 private int[,] arrTmp; private int m_lastCnt; // 构造函数修正:补全括号 public ScoreBoard() { m_lastCnt = 0; } public void makeBoard(string history) { // 处理history里的空格:分割时去掉空元素和多余空格 string[] arrPartStr = history.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries); int[] arrPart = new int[arrPartStr.Length]; for (int c = 0; c < arrPart.Length; c++) { // 先把每个元素的空格去掉,避免索引访问出错 string part = arrPartStr[c].Trim(); int temp = 0; // 加长度判断,防止字符串过短导致索引越界 if (part.Length >= 1 && part[0] == 'P') temp = 100; else if (part.Length >= 1 && part[0] == 'B') temp = 200; else temp = 300; if (part.Length >= 2 && part[1] == 'P') temp += 10; if (part.Length >= 3 && part[2] == 'P') temp += 1; arrPart[c] = temp; } // 初始化二维数组(这里可以根据需求赋值,默认是0) arrTmp = new int[6100, 104]; // 示例赋值:方便测试输出效果 for(int i=0; i<arrTmp.GetLength(0); i++) { for(int j=0; j<arrTmp.GetLength(1); j++) { arrTmp[i,j] = i + j; } } } // 添加专门的输出方法,把arrTmp内容打印到控制台 public void PrintScoreBoardArray() { if(arrTmp == null) { Debug.Log("arrTmp还没初始化!请先调用makeBoard方法"); return; } int rows = arrTmp.GetLength(0); // 获取二维数组的行数 int cols = arrTmp.GetLength(1); // 获取二维数组的列数 // 逐行遍历拼接,用StringBuilder避免频繁字符串拼接的性能损耗 for(int i=0; i<rows; i++) { StringBuilder rowContent = new StringBuilder(); rowContent.Append($"第{i+1}行:"); for(int j=0; j<cols; j++) { rowContent.Append(arrTmp[i,j] + "\t"); } Debug.Log(rowContent.ToString()); } // 如果不想逐行输出,也可以拼成一个大字符串一次性打印 // StringBuilder fullContent = new StringBuilder("ScoreBoard数组内容:\n"); // for(int i=0; i<rows; i++) // { // for(int j=0; j<cols; j++) // { // fullContent.Append(arrTmp[i,j] + "\t"); // } // fullContent.Append("\n"); // } // Debug.Log(fullContent.ToString()); } }
第二步:修正主类代码的问题
// 实例化对象必须加new关键字 ScoreBoard sb = new ScoreBoard(); // 去掉字符串里的多余空格,或者保持原格式但在makeBoard里处理 string history = "s,o,m,e,s,t,r,i,n,g"; private void Start() { sb.makeBoard(history); // 调用输出方法打印数组 sb.PrintScoreBoardArray(); }
关键知识点说明
- 数组生命周期问题:你原来的
arrTmp是makeBoard方法里的局部变量,方法执行完就会被销毁,所以必须改成类的字段才能在外部访问输出。 - 二维数组遍历:用
GetLength(0)获取行数、GetLength(1)获取列数,嵌套循环就能遍历所有元素。 - 字符串处理:你的
history里有空格,必须用Trim()或调整分割规则,否则会导致字符索引访问出错。 - 封装性建议:把输出逻辑放在类内部的方法里,比直接把数组改成
public更符合面向对象的封装原则。
内容的提问来源于stack exchange,提问作者Ginxxx
相关产品推荐
相关产品推荐

