gpt4 book ai didi

java螺旋矩阵不工作

转载 作者:行者123 更新时间:2023-12-02 12:16:37 25 4
gpt4 key购买 nike

这是我编写的代码,用于抛出螺旋矩阵,但它用于抛出矩阵不同

2000021 
1970022
1860123
1714131224
1600025

代码是:

public class caracol {
public static void main(String[] args) {
int[][] matriz = new int[5][5];
int n=5;
int nlimite= n-1;
int inicio = 0;
int c=1;
while(c<=(n*n)) {

for (int i = inicio+2; i<=nlimite-1; i++) //baja
{
matriz[i][nlimite-1] = c++;
}

for (int i = inicio+2; i>=inicio+1; i--) ///izquierda
{
matriz[nlimite-1][i] = c++;
}

for (int i = nlimite-1; i>=inicio+1; i--) //sube
{
matriz[i][inicio+1] = c++;
}


for (int i = inicio+1; i>=nlimite-1; i++) //derecha
{
matriz[inicio+1][i] = c++;
}

for (int i = inicio+1; i<=nlimite; i++) //baja
{
matriz[i][nlimite] = c++;
}

for (int i = nlimite-1; i>=inicio; i--) ///izquierda
{
matriz[nlimite-1][i] = c++;
}

for (int i = nlimite; i>=inicio; i--) //sube
{
matriz[i][inicio] = c++;
}

for (int i = inicio; i>=nlimite; i++) //derecha
{
matriz[inicio][i] = c++;
}

for (int i = inicio; i<=nlimite; i++) //baja
{
matriz[i][nlimite] = c++;
}
nlimite=nlimite-1;
inicio = inicio+1;
}
for(int x=0;x<n;x++) { /*Mostrar la matriz en pantalla*/
System.out.println();
for(int y=0;y<n;y++) {
System.out.print(matriz[x][y]);
}
}
}
}

生成的矩阵与照片的矩阵不同。您必须从矩阵 [2] [2] 开始,但当您更改行和列索引的位置时,它会在矩阵 [0] [0] 中开始。

最佳答案

尝试这样的事情:

public class Matrix
{
// holds the matrix
private int[][] matrix = new int[ 5 ][ 5 ];
// fills up the matrix with zeroes
public void init()
{
for ( int i = 0; i < 5; ++i )
Arrays.fill( matrix[i], 0 );
}
// prints the matrix out
public void print()
{
for ( int i = 0; i < 5; ++i )
{
for ( int j = 0; j < 5; ++j )
System.out.printf( "%3d", matrix[i][j] );
System.out.println();
}
}
// prints text out according to the matrix
public void print(String text)
{
for ( int i = 0; i < 5; ++i )
{
for ( int j = 0; j < 5; ++j )
System.out.print( text.charAt(matrix[i][j]) );
System.out.println();
}
}
// fills the matrix with the spiral
public void generate()
{
// variables: co-ordinates, value, direction
int x = 2, y = 2, val = 0, dir = 0;
// in a 5×5 matrix we should put in 25 values...
while ( val < 25 )
{
// put this value
matrix[y][x] = ++val;
// for debugging
System.out.printf( "val=%d, x=%d, y=%d, dir=%d%n", val, x, y, dir );
// calculate next value's position, and check if we must turn
int turn = -1;
switch ( dir )
{
case 0: // down, checking left
++y;
if ( 25 != val ) // the last value would cause error
turn = matrix[y][x - 1];
break;
case 1: // left, checking up
--x;
turn = matrix[y - 1][x];
break;
case 2: // up, checking right
--y;
turn = matrix[y][x + 1];
break;
case 3: // right, checking down
++x;
turn = matrix[y + 1][x];
}
// next direction
if ( 0 == turn )
dir = ( dir + 1 ) & 3;
}
}
// for testing
public static void main( String[] args )
{
final Matrix m = new Matrix();
m.init();
m.generate();
m.print();
m.print("HelloWorldTodayIsAGoodDay");
}
}

将输出:

val=1, x=2, y=2, dir=0
val=2, x=2, y=3, dir=1
val=3, x=1, y=3, dir=2
val=4, x=1, y=2, dir=2
val=5, x=1, y=1, dir=3
val=6, x=2, y=1, dir=3
val=7, x=3, y=1, dir=0
val=8, x=3, y=2, dir=0
val=9, x=3, y=3, dir=0
val=10, x=3, y=4, dir=1
val=11, x=2, y=4, dir=1
val=12, x=1, y=4, dir=1
val=13, x=0, y=4, dir=2
val=14, x=0, y=3, dir=2
val=15, x=0, y=2, dir=2
val=16, x=0, y=1, dir=2
val=17, x=0, y=0, dir=3
val=18, x=1, y=0, dir=3
val=19, x=2, y=0, dir=3
val=20, x=3, y=0, dir=3
val=21, x=4, y=0, dir=0
val=22, x=4, y=1, dir=0
val=23, x=4, y=2, dir=0
val=24, x=4, y=3, dir=0
val=25, x=4, y=4, dir=0
17 18 19 20 21
16 5 6 7 22
15 4 1 8 23
14 3 2 9 24
13 12 11 10 25
sAGoo
IoWod
ylHrD
alela
doTdy

编辑:根据 Me Myself 请求添加文本

关于java螺旋矩阵不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46126725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com