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:
publicclassteste{publicstaticvoidmain(String[]args){intlado=8;Stringast="";for(inti=1;i<=lado;i++){for(intj=1;j<=lado;j++){ast+="*";}//fim do forast+="\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
publicstaticvoidmain(String[]args){intlado=8;for(inti=1;i<=lado;i++){for(intj=1;j<=lado;j++){System.out.print("*");}//fim do forSystem.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?
publicstaticvoidmain(String[]args){intlado=8;for(inti=1;i<=lado;i++){for(intj=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?
publicclassteste{publicstaticvoidmain(String[]args){intlado=8;Stringast="";for(inti=1;i<=lado;i++){for(intj=1;j<=lado;j++){ast+="*";}//fim do forast+="\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
GradeBook
Por quê?
M
marcobiscaro2112
Por quê?
Por causa disso:
publicclassQuadradoAsteriscos{publicStringquadradoDeAsteriscosLento(intlado){Stringast="";for(inti=1;i<=lado;i++){for(intj=1;j<=lado;j++){ast+="*";}ast+="\n";}returnast;}publicStringquadradoDeAsteriscosMelhorado(intlado){StringBuildersb=newStringBuilder(lado*lado+lado);for(inti=1;i<=lado;i++){for(intj=1;j<=lado;j++){sb.append('*');}sb.append('\n');}returnsb.toString();}publicstaticvoidmain(String[]args){longinicio;QuadradoAsteriscosq=newQuadradoAsteriscos();inicio=System.currentTimeMillis();System.out.println(q.quadradoDeAsteriscosLento(500));longtempo1=System.currentTimeMillis()-inicio;inicio=System.currentTimeMillis();System.out.println(q.quadradoDeAsteriscosMelhorado(500));longtempo2=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
GradeBook
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
marcobiscaro2112
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.