Печатать массив java

Я стараюсь печатать массив в диагонали, а именно, в диагонали

1 2 3
4 5 6
7 8 9

напечатайте 1 2 4 3 5 7 6 8 9

У меня есть это, в которой только он печатает меня до 7 из-за, который, если он не вытекает из массива:

public class matriz {
public static void main(String args[]) {

    int[][] matriz = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    imprimirMatriz(matriz);
}

public static void imprimirMatriz(int[][] matriz) {
    int lado = matriz.length;
    int x = 0;
    int y = 0;
    for (int i = 0; i < lado; i++) {
        x = i;
        y = 0;
        while (x >= 0) {

            System.out.print(matriz[y][x] + " ");
            x--;
            y++;

        }
    }
  }
}    

Другая проблема, которая у меня есть, - это печатать часть массива, печатать треугольную нижнюю той же самой обратного способа, где он должен печатать 9 8 7 5 4 1, печатает мне 9 8 5 7 4 1, вставляя два числа положения. Код:

public class matrizmas {
public static void main(String args[]) {

    int[][] matriz = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    imprimirMatriz(matriz);
}

public static void imprimirMatriz(int[][] matriz) {
    int lado = matriz.length;
    for (int i = lado - 1; i >= 0; i--) {
        for (int j = lado - 1; j >= i; j--) {
            System.out.print(matriz[j][i]);

        }

    }
    System.out.println();
    System.out.println();

  }
}
3
задан 24.01.2017, 19:30
0 ответов

Ты можешь делать это также этой формой

public static void imprimirMatriz(int[][] matriz) {
  int lado = matriz[0].length;
  int x = 0;
  int y = 0;
  int yAux = 0;
  int yAnt = 0;
  int i = 0;
  int xAnt = -1;
  boolean terminado = false;
  while (!terminado) {
    x = (i < lado ? i : lado -1);
    yAux = (x != xAnt ? yAux : yAux + 1);
    y = (yAux < lado ? yAux : lado -1);
    xAnt = x;
    yAnt = (y == lado -1 ? yAnt + 1 : yAnt);
    terminado = (yAnt > 0 ? true : false);
    while (x >= 0 && y < lado) {
        System.out.print(matriz[y][x] + " ");
        x--;
        y++;
    }
    i++;
  }
}

Относительно твоей второй такой проблемы он решается

 public static void imprimirMatriz2(int[][] matriz) {
  int lado = matriz.length;
  for (int i = lado - 1; i >= 0; i--) {
    for (int j = i; j >= 0; j--) {
        System.out.print(matriz[i][j]);
    }

}
1
ответ дан 03.12.2019, 17:31
  • 1
    И в первом có я говорю, когда ты это помещаешь = и: что ты имеешь в виду с этим? Это первый раз, который я это вижу..., я начинаюсь понемногу. Во второй части я confundí поместив это, я захотел поместить 9 8 7 4 5 1: Я иду посмотрим он вытекает изменять это –  24.01.2017, 20:14
  • 2
    Знают, как if тройной, он только может брать два типа стоимости Переменная = (условие? стоимость, которая должна печатать, если выполняется условие: стоимость, если не) x = 1; int z = (и == 3? x: 0); в примере наверху z будет стоить 3 стоимость ее x, чего 1, если и он равен 3, и 0, если он это не. Если я даже у тебя остаюсь, сомневайся с именем ты можешь искать больше informació n if тройной –  24.01.2017, 20:19

Ты можешь делать это так

public class Matriz {
    public static void main(String args[]) {

        int[][] matriz = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
        imprimirMatriz(matriz);
    }

    public static void imprimirMatriz(int[][] matriz) {
        // limite es el indice maximo de un lado
        int limite = matriz.length;
        int x = 0;
        int y = 0;
        for (int i = 0; i < 2*limite-1 ; i++) {
            // aquí discriminas si y cuanto i sobresale la dimensión de
            // la matriz. en vez de aumentar x, la diferencia se agrega a y 
            x = (i<limite) ? i : limite-1;
            y = (i<limite) ? 0 : i-limite+1;
            // también tenemos que asegurarnos que el puntador
            // no sobresale y
            while (x >= 0 && y < limite) {

                System.out.print(matriz[y][x] + " ");
                x--;
                y++;

            }
        }
    }
}    

Консоль:

1 2 4 3 5 7 6 8 9 

следующий код

x = (condicion) ? valor : otroValor;

это более короткий способ писать

if ( condicion ) {
    x = valor;
} else {
    x = otroValor;
}

Альтернативно ты можешь делать это как в следующем примере для массивов других размеров:

public class Matriz {
    public static void main(String args[]) {

        Matriz matriz=new Matriz(5); 
        matriz.imprimirMatriz();
    }

    private int [][] matriz;
    private int dimension;

    public Matriz(int dimension){
        this.dimension = dimension;
        matriz = new int[dimension][dimension];
        generarMatriz();
    }

    private final void generarMatriz(){
        for (int y = 0; y < dimension; y++){
            for (int x = 0; x < dimension; x++){
                matriz[x][y]=1+x+y*dimension;
                System.out.print(String.format("%02d ",matriz[x][y]));
            }
            System.out.println();
        }
    }

    private boolean outBounds(int x, int y){
        return ( x<0 || x>=dimension || y<0 || y>=dimension );
    }

    private void imprimirDiagonal(int a, int b){
        int x = a;
        int y = b;
        do{
            System.out.print(String.format("%d ", matriz[x--][y++]));
        }while(!outBounds( x, y ));
    }

    public void imprimirMatriz(){
        for (int x = 0; x < dimension; x++ ) imprimirDiagonal( x, 0 );
        for (int y = 1; y < dimension; y++ ) imprimirDiagonal( dimension-1, y );
    }

}    
1
ответ дан 03.12.2019, 17:31
  • 1
    Я не понимаю, когда ты это помещаешь ее x и и это ее? и: который ты имеешь в виду с этим. –  24.01.2017, 20:02
  • 2
    я объясняю это тебе в ответе. –  24.01.2017, 20:15
  • 3
    Уже, что ты это объясняешь в ответе с комментариями, но это первый раз, что я вижу ее? и они: поэтому, что я не понимаю эту часть. –  24.01.2017, 20:20
  • 4
    @Fernando действующие условные поиски или тройной оператор? в Google и они объясняют это тебе. –  24.01.2017, 22:46
  • 5
    @Fernando я сказал тебе " ты это explico" не " ты это expliqué ". Habí в añ adido explicació n в ответе despué s, который ты спросил. –  24.01.2017, 23:08

Хороший все ответы хорошие, я приношу тебе версию, которая делает то же самое, что ты хочешь прибыть, используя циклы контроля for, что, которая я быть должен казаться, используются больше, чтобы обращаться matrize.

public class Main {

public static void main(String[] args){
    int[][] matriz = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    //imprimimos la primer matriz
    imprimirMatriz(matriz);
    System.out.println();
    //imprimimos la segunda
    imprimirMatrizInversa(matriz);
}

public static void imprimirMatriz(int[][] matriz) {
    int lado = matriz.length;
    int fila = lado;
    int columna = lado;
    //Para este ciclo aremos que recorra una  fila de mas para poder recorrer todas
    for (int i = 0; i <= 2 * (fila - 1); i++) {
        for (int j = 0; j < columna; j++) {
            //restamos la fila menos la columna
            int x = i - j;
            //aqui validamos si x es mayo o igual a cero y que x sea menor a la longitud de la matriz
            //entonces imprimimos
            if (x >= 0 && x < matriz.length) {
                System.out.print(matriz[j][x]+" ");
            }
        }

    }
}

public static void imprimirMatrizInversa(int[][] matriz) {
    int lado = matriz.length;
    int fila = lado;
    int columna = lado;
    /**
     * Para la matriz inversa o como gustes llamarle se empieza desde la ultima posicion menos 1
     */
    for (int i = fila-1; i >=0; i--) {
        /**
         * Lo mismo aplica para recorrer las columnas empezamos de la ultima posicion menos 1
         */
        for (int j = columna-1 ; j>=0 ;j--)
            //imprimimos el resultado
            System.out.print(matriz[i][j]+" ");

        //AHora bien para hacer el resultado que quieres despues de imprimir vamos restando una columna
        //por fila recorrida
        columna--;
    }
}
}

Твой результат

1 2 4 3 5 7 6 8 9  
9 8 7 5 4 1 
1
ответ дан 03.12.2019, 17:31

Следуя примеру, что он помещал @Mariano в этот другой похожий вопрос, и который я рекомендую тебе читать, я предлагаю тебе это другое самое компактное решение, которое использует свойство, у которого есть массив, в котором сумма индексов диагонали они дают тот же результат.

Код для массива (n, m) для твоего метода imprimirMatriz он остался бы:

public static void imprimirMatriz(int[][] matriz) {
    int m = matriz[0].length;
    int n = matriz.length;
    String salida = "";

    for(int i = 0; i < n + m - 1; i++){
        for (int x, y = Math.min(i,m - 1); y >= 0 && (x = i - y) < n; y--) {
            salida += matriz[x][y] + " ";
        }
    }

    System.out.println(salida.trim());
}

Что дает следующий вывод в твоем случае:

1 2 4 3 5 7 6 8 9

Если ты добавлял колонну нулей в конце концов, и прекращали придать квадратную форму ей также функционируй и дай этот результат:

1 2 4 3 5 7 0 6 8 0 9 0

Таким образом, если ты хочешь напечатать только одну часть массива, ты можешь играть со стоимостью, которую он может брать i (вместо того, чтобы начинать с 0 и заканчиваться в n+m-1, ты можешь перемещать это только из-за n-1, чтобы печатать диагональ, и т.д....)

0
ответ дан 03.12.2019, 17:31

Теги

Похожие вопросы