System.out.println( ); [RESOLVIDO]

11 respostas
Rooney
OI pessoal meu problema é o seguinte, num to conseguindo pular linha nesse código, quer dizer conseguindo eu tô mas não no local específico.
public class QuadradoAsteriscos{  
   
     public String quadradoDeAsteriscos(int lado){  
   
        String ast = "";  
       for (int i = 1; i <= lado; i++){ 
            for (int j = 1; j <= lado; j++){  
                ast = "*";
            }//fim do for
        }//fim do for 
        return ast; 
    }//fim do metodo 
}//fim da classe
quando a pessoa digitar a dimensão do quadrado (exemplo: se for 4) então vai ter q imprimir assim:

[size=18]****
****
****
****[/size]
Agradeço.

11 Respostas

G

Assim?

public class teste {

public static void main(String[] args) {

int lado = 8;
String ast = "";  

   for (int i = 1; i <= lado; i++) { 
      for (int j = 1; j <= lado; j++) {  
         ast += "*";     	
      }//fim do for
      ast +="\n";
   }//fim do for 
   System.out.println(ast); 
}//fim do metodo 
}//fim da classe








ma.pops

Eu acho que o codigo abaixo seria melhor para resolver seu problema

public static void main(String[] args) {

int lado = 8;

   for (int i = 1; i <= lado; i++) { 
      for (int j = 1; j <= lado; j++) {  
         System.out.print("*");     	
      }//fim do for
      System.out.println();
   }//fim do for 
}//fim do metodo 
}//fim da classe
Rooney

mas mano é pq o meu é um método e se eu fizer isso q vc fez num haverá retorno, entende?

public static void main(String[] args) {  
  
int lado = 8;  
   
    for (int i = 1; i <= lado; i++) {   
       for (int j = 1; j <= lado; j++) {    
          System.out.print("*");           
       }//fim do for  
       System.out.println();  
    }//fim do for   
  }//fim do metodo   
}//fim da classe
andeb

GradeBook:
Assim?

public class teste {

public static void main(String[] args) {

int lado = 8;
String ast = "";  

   for (int i = 1; i <= lado; i++) { 
      for (int j = 1; j <= lado; j++) {  
         ast += "*";     	
      }//fim do for
      ast +="\n";
   }//fim do for 
   System.out.println(ast); 
}//fim do metodo 
}//fim da classe







********

Perfeito, só use StringBuilder ao invés de concatenação de String dentro do for.

G

Por quê?

M

Por quê?
Por causa disso:

public class QuadradoAsteriscos {

	public String quadradoDeAsteriscosLento(int lado) {
		String ast = "";
		for (int i = 1; i <= lado; i++) {
			for (int j = 1; j <= lado; j++) {
				ast += "*";
			}
			ast += "\n";
		}
		return ast;
	}

	public String quadradoDeAsteriscosMelhorado(int lado) {
		StringBuilder sb = new StringBuilder(lado * lado + lado);
		for (int i = 1; i <= lado; i++) {
			for (int j = 1; j <= lado; j++) {
				sb.append('*');
			}
			sb.append('\n');
		}
		return sb.toString();
	}

	public static void main(String[] args) {
		long inicio;
		QuadradoAsteriscos q = new QuadradoAsteriscos();
		inicio = System.currentTimeMillis();
		System.out.println(q.quadradoDeAsteriscosLento(500));
		long tempo1 = System.currentTimeMillis() - inicio;
		inicio = System.currentTimeMillis();
		System.out.println(q.quadradoDeAsteriscosMelhorado(500));
		long tempo2 = System.currentTimeMillis() - inicio;
		System.out.printf("Somente com Strings: %d ms%n", tempo1);
		System.out.printf("Usando StringBuilder: %d ms%n", tempo2);
	}

}

Rode o teste (tenha paciência…) e veja a diferença absurda de performance.

G

vlw andeb pela dica.
vlw marcobiscaro2112 pelo teste.

Para quem estiver curioso aqui está o resultado:

//Aqui eu coloquei pra rodar e fui cuidar do meu cachorro.
Somente com Strings: 587343 ms
Usando StringBuilder: 157 ms

//Aqui eu coloquei pra rodar e fui almoçar.
Somente com Strings: 588968 ms
Usando StringBuilder: 250 ms

//Aqui eu coloquei pra rodar e fui lavar os pratos.
Somente com Strings: 589782 ms
Usando StringBuilder: 250 ms

Se não for abusar muito, por que é assim?

caio_ferreira

não sei se estou certo, mas acho que essa demora é pq qnd usa String, toda vez é criado uma nova String, já com StringBuilder é criado só um objeto e ele é alterado. Uma String nunca é alterada.

Rooney

aew deu certo o código e onde pula a linha é aki:

no main

System.out.println("O seu quadrado eh esse: \n"+ q.quadradoDeAsteriscos(l));
M

Exatamente. Para cada iteração um novo objeto do tipo String é construído e depois atribuído à variável. Isso faz a performance ser decadente. Já no StringBuilder há um buffer mutável onde armazenamos os caracteres e somente no final transformamos em String.

G

Grato pela explicação.

Criado 20 de dezembro de 2009
Ultima resposta 21 de dez. de 2009
Respostas 11
Participantes 6