public static void main(String[] args) {
int l = 0, l2, l3, l4;
// variáveis utilizadas na construção do quadrado.
Scanner input = new Scanner(System.in);
// enquanto o usuário não inserir um valor no intervalo de 1 e 20
while (l < 1 || l > 20) {
System.out
.print("Informe o lado do quadrado (comprimento de 1 a 20): ");
l = input.nextInt();
}
l2 = l;
l3 = l;
l4 = l;
while (l2 != 0) {
// impressão da reta horizontal superior
System.out.print("*");
--l2;
}
// quais são as instruções necessárias para imprimir a reta vertical
// direita?
while (l3 != 1) {
// impressão da reta vertical esquerda
System.out.print("\n*");
if (l3 != 2) {
for (int i = 0; i < l - 2; i++) {
System.out.print("x");
}
System.out.print("*");
}
--l3;
}
while (l4 != 1) {
// impressão da reta horizontal inferior
System.out.print("*");
--l4;
}
System.out.println();
} // fim de main
} // fim da classe AsteriscoQuadrado[/code]
aqui funcionou, nao sei se todos os testes de cima funcionam .-.
comecei a aprender java faz 2 semanas, mas esse funcionou^^ espero q ajude
[quote=marcobiscaro2112]Procure por System.out.printf (ou String.format) e os argumentos possíveis para formatação. Por exemplo:
System.out.printf("%10s%n", "Olá");
Esse código imprime “Olá” alinhado à direita, usando 10 casas (ou seja, ele já completa com os devidos espaços se preciso).[/quote]
Boa tarde. Aproveitando a dica do marcobiscaro2112, gostaria de saber se seria possível escrever a seguinte instrução: System.out.printf("%xs%n", “Olá”); na qual x seria uma variável que teria recebido anteriormente um valor inteiro qualquer. Se tiver como fazer algo desse tipo, como seria a sintaxe correta para tal instrução?
Obs.: eu dei uma olhada na classe PrintStream e vi que o parâmetro passado para esse System.out.printf é String. Só com a sobreposição (override) que seria possível passar um integer ao invés de uma String?
int espacos = 10;
System.out.printf("%"+ espacos +"s%n", "Olá");[/quote]
Que ótimo joselmocs, bem prático mesmo! quanto ao %n, ele formata o quê? eu estou estudando pelo livro dos Deitel e no cap. 5 ele ensinou a escrever a seguinte instrução:
Consegui desenvolver o " quadrado " ( retângulo ) proposto. O problema de desenvolver um quadrado é que o aumento da quantidade de espaços não é uniforme. Já que a quantidade de espaços para um quadrado de quatro asteriscos é de 5:
* * * *
* *
* *
* *
* * * *
Que é diferente da quantidade de espaços do de 5 asteriscos ( que é de 7) e, apesar da diferença entre a quantidade de espaços de um quadrado e outro ser uma P.A de razão 2 , não sei como inseri-la no código.
* * * * * *
* *
* *
* *
* *
* *
* * * * * *
Segue abaixo o código:
package asteriscoquadrado;
/**
*
* @author Eduardo Felipe
*/
public class AsteriscoQuadrado
{
private int L;
int i = 0;
public void setL(int L)
{
this.L = L;
}
public void geraLinha()
{
i = 0;
while (i < L)
{
System.out.print("*");
++i;
}
System.out.println();
}
public void geraHorizontal()
{
i = 0;
int espaco = L - 2;
while (i < L - 2)
{
System.out.printf("%s%" + espaco + "s%s", "*", " ", "*");
System.out.println();
++i;
}
}
}
package asteriscoquadrado;
/**
*
* @author Eduardo Felipe
*/
import java.util.Scanner;
public class AsteriscoQuadradoTest
{
public static void main(String[] args)
{
int L = 0;
AsteriscoQuadrado q = new AsteriscoQuadrado();
Scanner input = new Scanner(System.in);
while( L < 1 || L > 20)
{
System.out.print("Informe o tamanho do lado do quadrado (entre 1 e 20): ");
L = input.nextInt();
}
q.setL(L);
q.geraLinha();
q.geraHorizontal();
q.geraLinha();
}
}
Ele funciona como o \n (quebra de linha)[/quote]
Na verdade o “%n” é uma quebra de linha que funciona independentemente da plataforma (no Windows ele é traduzido como “\r\n” e em outros SOs como “\n”).
Tente alterando estes 2 métodos da classe AsteriscoQuadrado:
public void geraLinha() {
i = 0;
while (i < L) {
if (i == (L -1)) {
System.out.print("*");
}
else {
System.out.print("* ");
}
++i;
}
System.out.println();
}e
public void geraHorizontal() {
i = 0;
while (i < L - 2) {
System.out.printf("*%" + ((L * 2) -2) + "s%n", "*");
++i;
}
}
edit.:
Retirei 2 parâmetros no printf do metodo geraHorizontal pra você ver que pode ser passado qualquer coisa no primeiro parâmetro.
Obrigado joselmocs! eu vou usar o recurso de comparação de códigos do NetBeans para analisar cuidadosamente a diferença de um algoritmo para o outro. Abraços!