[Resolvido] Loop for, If/else em exemplo de quadrado de asteriscos

Olá, sou novo no fórum.
Estou começando com java e ando escrevendo o básico.
Estava tentando escrever um programa, no qual você escreve os dados (número de colunas, linhas e algum caractere) e ele monta com o loop for, e usando if / else um quadrado que no meio é vazio. da forma:

#…#
#…#

no caso, 4 linhas, 5 colunas e o caractere é # (pontos sao espaço em branco)

Bom depois de muito procurar e editar algumas coisas que havia achado, consegui fazer funcionar.

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

    Scanner input = new Scanner(System.in);
    char simbolo;
    int colunas;
    int linhas;
    
    System.out.println("Insira um Caractere: ");
    simbolo = input.next().charAt(0);
    System.out.println("Insira o numero de colunas: ");
    colunas = input.nextInt();
    System.out.println("Insira o numero de linhas: ");
    linhas = input.nextInt();
    
    for (int z = 0; z < linhas; z++) {
        if (z==0 || z==(linhas-1)){
            for(int s = 0; s < colunas; s++){
        System.out.print(simbolo);

        }
    }
        else

     {
                for(int s = 0; s < colunas;s++){
                     if(s==0 || s==(colunas - 1)) {
                          System.out.print(simbolo);
                     }
                     else
                     {
                          System.out.print(" ");
                     }
                }

     }
    
        System.out.println();
    }
}

}
[/code]

Minha dúvida é em relação ao loop. Eu tive um grande trabalho para conseguir montar e fazer funcionar (achei exemplos parecidos na internet) mas não exatamente assim e adaptei para esse caso. Bom alguém pode me explicar talvez em palavras “simples e para leigos” o como é que funciona nesse exemplo??o loop inteiro no caso o que gera o topo e a basa e depois o das laterais se possível…
e principalmente o significado da linha:

(z==0 || z==(linhas-1))

Obrigado e Grato

Por favor, evite o óbvio no título dos tópicos, como as palavras "Dúvida:" ou "Ajuda:".

[code]import java.util.Scanner;

public class NewClass {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Insira um Caractere: ");
char simbolo = input.nextLine().charAt(0);
System.out.println("Insira o numero de colunas: ");
int colunas = Integer.parseInt(input.nextLine());
System.out.println("Insira o numero de linhas: ");
int linhas = Integer.parseInt(input.nextLine());

    for (int y = 0; y &lt; linhas; y++) {
        for (int x = 0; x &lt; colunas; x++)
            System.out.print(y == 0 || y == linhas - 1 || x == 0 || x == colunas - 1 ? simbolo : &quot; &quot;);
        System.out.println();
    }
}

}
[/code]

Esse teste:

y == 0 || y == linhas - 1 || x == 0 || x == colunas - 1

Está vendo se estamos na linha 0, na última linha, na primeira ou na última coluna. Nesse caso, temos que imprimir o símbolo.
Sempre que o teste falhar, precisamos imprimir o espaço.

obrigado!
desculpa pelo assunto!
Muito mais simples e muito mais fácil para entender.
Unica pequena pergunta coisa que ainda não está muito clara é ? simbolo : " ");

se ("?") ele for verdadeiro ele imprime o simbolo. caso contrario (":") ele imprime em branco. sei que “?” e “:” sao operadores
correto?

Correto. É mais ou menos como se fosse um if:

String valor = teste ? resultadoSeForVerdadeiro : resultadoSeForFalso;

Exemplo:

boolean homem = true; String sexo = homem ? "Masculino" : "Feminino"; System.out.println(sexo);

surgiu mais uma pequna dúvida…

for (int y = 0; y < linhas; y++) { for (int x = 0; x < colunas; x++) System.out.print(y == 0 || y == linhas - 1 || x == 0 || x == colunas - 1 ? simbolo : " "); System.out.println();

Se for explicar em palavras essa parte do código, como seria?
é um for-loop, dentro de um for loop. Para cada linha que é “gerada” ele vai analisar com o segundo loop o que deve ser em branco e aonde deve ser colocado um simbolo. certo?
mais ai na parte

System.out.print(y == 0 || y == linhas - 1 || x == 0 || x == colunas - 1 ? simbolo : " ");  

eu me enrolo um pouco, para explicar o loop… nao consigo de certa forma explicar…
Tem como ajudar?
obrigado!

Um quadrado é formado por um grupo de caracteres dispostos em n colunas m linhas.
Por exemplo (os números indicam os números dos índices das linhas e colunas, e não fazem parte da figura):

 012345678
0*********
1*       *
2*       *
3*       *
4*********

Nesse caso, colunas=9 e linhas=5.

Esses dois fors itão permitir o desenho desses dois grupos de caracteres, espaços ou borda.

O for externo é encarregado de pular as linhas, e o interno de desenhar cada caractere naquela linha:

for (int y = 0; y &lt; linhas; y++) { for (int x = 0; x &lt; colunas; x++) {

Como você pode observar na figura de cima, desenhamos * nas bordas, e espaço nos demais casos. Como sabemos que um dado ponto é uma borda?
Basta que o ponto esteja em qualquer uma dessas situações:
a) A coordenada x está na primeira coluna, de índice 0;
b) A coordenada y está na primeira linha, de índice 0;
c) A coordenada x está na última coluna (x == colunas-1);
d) A coordenada y está na linha coluna (y == linhas-1);

Como queremos testar qualquer uma das situações, as relacionamos com um operador de ou, no java representado por ||
Essa expressão testa essas condições:

y == 0 || y == linhas - 1 || x == 0 || x == colunas - 1

Usamos o operador ternário para decidir o que desenhar. Se aquela expressão for correta, o ponto está na borda, então, desenhamos o símbolo da borda (*). Caso contrário, iremos desenhar um espaço.

depois que entende uma vez, chega ser lógico!
muito obrigado!!