我正在尝试使用数组输出一个X的平方。正方形的对角线将填充'X',空心将填充空格'_'。
这是我得到的代码:
public static char[][] square(int z) {
int size=5;
char[][] myArr = new char[size][size];
for (int c=0;c<size;c++)
myArr[c][c]='X';
for (int r=0;r<size;r++)
{
for (int col=size-1;col>=0;col--)//put X
{
myArr[r][col]='X';
}
}
for(int count=0;count<size;count++){
if (myArr[count][count]!='X')
myArr[count][count]=' ';
}
return myArr;
}
这应该有效 - 我在纸上手动运行它,一切都应该没问题。问题是什么?
答案 0 :(得分:4)
问题可能在于:
for (int r=0;r<size;r++)
{
for (int col=size-1;col>=0;col--)//put X
{
myArr[r][col]='X';
}
}
你在整个广场(尺寸*大小)上徘徊,而不只是画东北 - 西南对角线。
尝试将其替换为:
for (int r=0;r<size;r++)
{
myArr[r][size - r] = 'X'
}
编辑:为了让您的代码更加紧凑:
public static char[][] square(int size) {
char[][] myArr = new char[size][size];
for (int c = 0; c < size; c++) {
for (int r = 0; r < size; r++) {
if ((c == r) || ( c == size - r)) {
myArr[r][c] = 'X';
} else {
myArr[r][c] = ' ';
}
}
}
return myArr;
}
答案 1 :(得分:1)
当您迭代循环时,您希望对角线为“x”。您可以通过最小化迭代次数来节省大量工作和代码。
public static char[][] square(int z) {
int size = z;
char[][] myArr = new char[size][size];
for(int i = 0;i < size;i++)
{
for(int j = 0;j < size;j++)
{
if(i == j)
{
myArr[i][j] = 'X';
}
else if(i + j == size - 1)
{
myArr[i][j] = 'X';
else
{
myArr[i][j] = " ";
}
}
}
return myArr;
}
答案 2 :(得分:0)
你的代码似乎有点过于复杂,所有那些ifs和聪明的循环 只需使用'background chars'填充数组,然后绘制对角线。
char[][] myArr = new char[size][size];
for (int i = 0; i < size; ++i) {
Arrays.fill(myArr[i], ' ');
}
// now we have square filled with spaces
// draw diagonal, like you did it
for (int c = 0; c < size; c++) {
myArr[c][c] = 'X';
myArr[c][size - c - 1] = 'X';
}
修改强>
更新为绘制两个对角线。
答案 3 :(得分:0)
第一个问题是,当您执行new char[size][size];
时,在使用它之前,您仍应new
每个char
数组。
这可以轻松地与第一个for
循环合并:
for (int c=0;c<size;c++) {
myArr[c] = new char[size]; // allocate the array
myArr[c][c]='X';
}
接下来算法不起作用,但这个算法会:
public static char[][] square (int z) {
int size = z, cap=((size+1) /2);
char[][] myArr = new char[size][size];
for (int c = 0; c < cap; c++) { // iterate only half the array doing 4 positions per iteration
myArr[c] = new char[size];
myArr[size-c-1] = new char[size];
Arrays.fill(myArr[size-c-1],' '); // make the new line blank
Arrays.fill(myArr[c], ' '); // make the new line blank
myArr[c][c] = 'X'; // top left to center
myArr[size - c - 1][size-c-1] = 'X'; // bottom right to center
myArr[size - c - 1][c] = 'X'; // bottom left to center
myArr[c][size - c - 1] = 'X'; // top right to center
}
return myArr;
}
/** test square algorithm by printing it to System.out */
private static void testSquare () {
char[][] sq = square(5);
for (char[] l : sq) {
System.out.println(new String(l));
}
}