Una forma de imprimir filas en direcciones alternativas en Java sin usar matrices 2D ... listas de enlaces, Linkedlists

StackOverflow https://stackoverflow.com/questions/6308332

  •  26-10-2019
  •  | 
  •  

Pregunta

Para fines de práctica, estoy tratando de encontrar una manera de imprimir filas de números en alternativa para cada fila

etc..

100 99 98 97 96 95 94 93 92 91
81 82 83 84 85 86 87 88 89 90
80 79 78 77 76 75 74 73......

.... sin el uso de matrices 2D, listas de matrices, listas de enlaces ..

Hasta ahora lo he hecho, pero mi solución a esto es bastante larga y puede ser repetitiva ... se preguntaba si hay una forma 'más corta' en torno a esto ...

Esto es lo que he hecho ...

public class PrintNumbers {

    public static void main(String args[])
    {
        PrintNumbers app = new PrintNumbers();
        app.display();
    }


    public void display()// main display
    {
        display_cell_left_to_right(100,90);
        display_cell_right_to_left(81,91);
        display_cell_left_to_right(80,70);
        display_cell_right_to_left(61,71);
        display_cell_left_to_right(60,50);
        display_cell_right_to_left(41,51);
        display_cell_left_to_right(40,30);
        display_cell_right_to_left(21,31);
        display_cell_left_to_right(20,10);
        display_cell_right_to_left(1,11);
        board_displayLine();


    }//end display method

    public void board_displayLine(){
        System.out.println("");
        for (int i = 10; i > 0; i--)
            System.out.print("+-------");

        System.out.print("+");
        System.out.println("");
    }//end board_displayLine

    //method to display cells from left to right according to a range of indexes
    public void display_cell_left_to_right(int max,int min){
        board_displayLine();
        for (int i = max; i > min; i--)//
            System.out.print("|"+i+"\t");
        System.out.print("|");
    }
    //same as above but vice versa
    public void display_cell_right_to_left(int min, int max){
        board_displayLine();
        for (int i = min; i < max; i++)
            System.out.print("|"+i+"\t");
        System.out.print("|");
    }

}

¡Gracias!

¿Fue útil?

Solución

Prueba algo como esto

for(int i = 9; i>=0; i--){
    boolean right = (i%2 == 0);
    for(int j = (right?1:10); j!=0 && j!=11; j = j + (right?1:-1)){
        System.out.print(i*10 + j);
        System.out.print("\t");

    }
    System.out.println();
}

Otros consejos

Aquí está mi versión que está destinada a los humanos:

public static void main(String[] args) {
    int ROWS = 10;
    int MAX = 100;
    int currentValue = MAX;
    for(int i = 0; i < ROWS; i++) {
        if (i % 2 == 0) {
            for (int j = 0; j < MAX / ROWS; j++) {
                System.out.print(currentValue-- + " ");
            }
        } else {
            currentValue -= MAX / ROWS;
            for (int j = MAX / ROWS; j >= 0; j--) {
                System.out.print((currentValue + ((MAX / ROWS) - j)) + " ");
            }
            currentValue--;
        }
        System.out.println();
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top