如何解决char [] []数组在for循环中分配单个Array [i]时未保存值
我注释了我的代码以帮助您理解我的逻辑,我基本上得到了一个边值,并且必须使用X绘制一个三角形以直观地显示其周长。 (双方都是平等的)
因此,当创建单独的数组来填充包含绘图的矩阵时,随着迭代的继续,一些分配会丢失,仅保留最后一次迭代的值,并使用这些值填充整个矩阵,这使我失去了所有前一行构成一个漂亮的三角形图形,但我无法将其打印到txt文件中。 (我可以在控制台中通过在循环内进行打印来打印它,因为它会生成与绘图线相对应的每个数组,但这只是暂时的幻想,因为我没有将X固定在矩阵中。)
如果有人能帮助我,不要失去该matT [j]值并能够以任何方式存储它,那将是很乐意的。
public class Triangulo extends figura {
char[] lineaI;
char[] lineaT;
char[][] matT;
public char[][] matDibujo(int lado) {
this.linea = new char[(lado+lado-1)]; //side int value to determine an eq. triangle base length
lineaI = new char[linea.length]; //multiple intermediate single arrays that fill triangle diagonally
lineaT = new char[linea.length]; //triangle base array
matT = new char[lado][linea.length]; // matrix containing {{},{},{}} n individual arrays representing a row in the drawing (top to bottom)
//Create triangle base line array
for (int i = 0; i < linea.length; i++) {
if (i == 0 ) {
linea[i] = 'X';
} else if (i%2 == 0) {
linea[i] = 'X';
} else {
linea[i] = ' ';
}
//Create triangle top point array
if (i == (lado-1)) {
lineaT[i] = 'X';
} else {
lineaT[i] = ' ';
}
}
//Fill matrix with first array (top axis)
matT[0] = lineaT;
//Fill matrix last array (triangle base)
matT[lado-1] = linea;
//System.out.println(matT[lado-1]);
//THIS IS THE LOOP NOT SAVING CORRESPONDING lineaI full single array to matT[j],//instead it's replacing every matT[j] with the last value of lineaI.
//Create multiple arrays to fill n-sided triangle from top axis to base diagonally (parting from top axis)
for (int j = 1; j < (lado-1); j++) {
for (int i = 0; i < linea.length; i++) {
if (i == (lado-1-j) ) {
lineaI[i] = 'X';
} else if (i == (lado-1+j) ) {
lineaI[i] = 'X';
} else {
lineaI[i] = ' ';
}
}
matT[j] = lineaI;
}
//return the matrix so we can print it
return matT;
}
//Dibujar en txt
public void dibuja(char[][] matriz) {
for (int i = 0; i < matriz.length; i++) {
System.out.println(matriz[i]);
}
}
public static void main(String[] args) {
char[][] mat;
Triangulo t = new Triangulo();
mat = t.matDibujo(4);
t.dibuja(mat);
//This is the outcome,since we lost matT[1] and got it replaced by the last lineaI contents,which should
//only belong to matT[2]
/* X The outcome should be X
X X X X ---> this line is lost and
X X X X ----> replaced by this one
X X X X X X X X */
}
}
解决方法
这里的问题是,一旦计算出lineaI数组值,便将其分配给matT [j],然后再次用新值覆盖相同的lineaI引用,并为每个j值追加到matT。
这将导致这些值被覆盖,并为所有间歇行显示最终的数组值。
要解决此问题,您只需在每个j值的迭代开始时将lineaI变量重新初始化为一个新数组。
for (int j = 1; j < (lado-1); j++) {
//initialize the lineaI variable for start of new j value in loop
lineaI = new char[linea.length]; // <----- new change
for (int i = 0; i < linea.length; i++) {
if (i == (lado-1-j) ) {
lineaI[i] = 'X';
} else if (i == (lado-1+j) ) {
lineaI[i] = 'X';
} else {
lineaI[i] = ' ';
}
}
matT[j] = lineaI;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。