Alinhar asteriscos em Java para desenhar uma caixa usando instruções "for"
3 respostas
java
P
PuzzleXD
Galera, estou tentando exibir uma caixa, ou melhor um retângulo em pé somente com asteriscos em Java e utilizando o laço “for”, porém o último asterisco da direita da primeira e última linha não estão alinhados com os asteriscos da coluna, alguém pode me ajudar? segue abaixo o meu código e a imagem da saída do programa.
Apenas trocando de 8 para 7 nessa condição já resolve:
if(j==0||j==8){System.out.print("*");}
Uma dica é usar variáveis com nomes objetivos para deixar o código mais fácil de entender:
publicclassProgram{publicstaticvoidmain(String[]args){// experimente alterar esses valores para mudar o tamanho do quadradointwidth=10;intheight=10;StringvalueToPrint="*";for(inti=0;i<=height;i++){for(intj=0;j<=width;j++){if(i==0||i==height){System.out.print(valueToPrint);}else{if(j==0||j==(width-1)){System.out.print(valueToPrint);}System.out.print(" ");}}System.out.println();}}}
H
hugokotsubo
Repare que vc sempre imprime o espaço, ou seja, depois que imprimir o asterisco, vc coloca um espaço a mais.
Mas o correto é imprimir ou o asterisco, ou o espaço (apenas um deles), então deveria ter um else aí:
Em vez de pensar em cada elemento individualmente, pense em termos de linhas: repare que em todas as linhas o primeiro e último caracteres são sempre o mesmo (o que chamei de borda). O que muda é apenas o “recheio” (na primeira e última linha é o mesmo caractere da borda, nas demais é o outro caractere, que chamei de meio).
Ou seja, cada linha é composta de um caractere da borda no início e outro no fim. E no meio vc preenche com um caractere que pode ser a borda (quando a linha é a primeira ou a última), ou o meio (nas outras linhas). Ficaria assim:
intaltura=9,largura=9;Stringborda="*",meio=" ";for(inti=0;i<altura;i++){// se é a primeira ou última linha, usa o caractere da borda// senão usa o outro caractere ("meio")Stringrecheio=i==0||i==altura-1?borda:meio;// uma borda no início e outra no fim, e no meio o "recheio"System.out.println(borda+recheio.repeat(largura-2)+borda);}
Mas claro, se a ideia for fazer os loops “na mão”, sem usar métodos prontos, daria para seguir a mesma ideia acima:
De qualquer forma amigo, muitíssimo obrigado, faltou essa parte da minha lógica mesmo. Voltei pro Java, estou muito enferrujado ainda, estou fazendo exercícios elementares para depois aprofundar mais em Collections, Polimorfismo, Herança etc… e depois ver as atualizações novas do Java. Muito obrigado!!!