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 < 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();
}
}
}
[/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 < linhas; y++) {
for (int x = 0; x < 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!!