[RESOLVIDO]Sequencia Numérica (laço for)

10 respostas
dj11

Hello, gostaria de melhorar o codigo abaixo, substituindo a divisao “i/5” por uma solução computacional, pois divisao é um calculo muito complexo.

for(int i=0;i<20;i++){

index[i]=i/5;	

System.out.println(""+index[i]);

}

saida:

00000
11111
22222
33333

Talvez um laço for de dentro de outro:

for(int i=0;i<4;i++)

for(.?.)

alguem pode me ajudar? um algoritmo? qualquer coisa…
:frowning:

10 Respostas

Henrique_Moraes

O que você quer fazer amigo?

dj11

armazenar num array de inteiros os numeros:
00000
11111
22222
33333

index[20] = {0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3};
utilizando laços “for”

E

dj++:
Hello, gostaria de melhorar o codigo abaixo, substituindo a divisao “i/5” por uma solução computacional, pois divisao é um calculo muito complexo.

Quá quá quá.

Se você está convertendo um int para uma String (que é o que você fez ao escrever “” + index[i] - isso é uma conversão implícita de int para String) está usando um monte de divisões e cálculos de resto por 10 e nem está percebendo que está fazendo o tal do “cálculo muito complexo”. Em muitos processadores fazer uma divisão acaba sendo mais rápido que acessar uma posição de memória em um array, se esta não estiver no cache do processador.

Não se preocupe com o tempo levado por uma divisão no processador; esse tempo é irrelevante nesse caso.

No seu caso, você pode fazer um “for dentro do outro”.

JhowTroMundo

Cara, só pra informação mesmo:

O método .println da classe PrintStream é sobrescrito. Cada um recebe um tipo primitivo diferente, bem como array, a propria String ou um Object. Cada um trata o tipo recebido de acordo.
Não precisa explicitar a conversão pra String.

lina

Oi,

/**
Alinha um <b>String</b> de acordo com os argumentos..
*/
public static final
String			Align(final String as_texto, final int	an_tamanho_alinhamento, final String as_filtro)
{
   StringBuffer resultado = null;
        	
   // Se string origem fornecida ...
   if (as_texto != null) {
        		
      // Se tamanho final válido ...
      if (an_tamanho_alinhamento >= 0) {
        			
         // Diferença de tamanho entre origem e destino ...
         int ln_diference = an_tamanho_alinhamento-as_texto.length();
        			
         // Aloca a área necessária ...
         resultado = new StringBuffer(an_tamanho_alinhamento);
        			
         resultado = new StringBuffer(as_texto.substring(ln_diference >= 0 ? 0 : as_texto.length() - an_tamanho_alinhamento,as_texto.length()));
				
         while (resultado.length() < an_tamanho_alinhamento){
            resultado.insert(0, as_filtro);
         }
      }
   }
        	
   return resultado.toString();
}
	
public static void main(String[] args) {		
   for (int i=0; i<4; i++) {
      System.out.println(Align(""+i, 5, ""+i));
   }
}

Tchauzin!

dj11

simplesmente eu quero outra forma de fazer isso:
int[] index = new int[20];

for(int i=0;i<20;i++)
index[i]=i/5;

nao quero fazer essas divisões e ponto final…

quero uma forma de fazer um laço for dentro do outro é mais elegante…

E é verdade o metodo System.out.println(""+index[i]) nao converteu nada internamente o array continua de inteiros. Simplesmente ele exibe no console a saida!

dj11

lina:
Oi,

/**
Alinha um <b>String</b> de acordo com os argumentos..
*/
public static final
String			Align(final String as_texto, final int	an_tamanho_alinhamento, final String as_filtro)
{
   StringBuffer resultado = null;
        	
   // Se string origem fornecida ...
   if (as_texto != null) {
        		
      // Se tamanho final válido ...
      if (an_tamanho_alinhamento >= 0) {
        			
         // Diferença de tamanho entre origem e destino ...
         int ln_diference = an_tamanho_alinhamento-as_texto.length();
        			
         // Aloca a área necessária ...
         resultado = new StringBuffer(an_tamanho_alinhamento);
        			
         resultado = new StringBuffer(as_texto.substring(ln_diference >= 0 ? 0 : as_texto.length() - an_tamanho_alinhamento,as_texto.length()));
				
         while (resultado.length() < an_tamanho_alinhamento){
            resultado.insert(0, as_filtro);
         }
      }
   }
        	
   return resultado.toString();
}
	
public static void main(String[] args) {		
   for (int i=0; i<4; i++) {
      System.out.println(Align(""+i, 5, ""+i));
   }
}

Tchauzin!

:shock: acho q vc nao me entendeu direito eu simplesmente quero armazenar num array os 20 inteiros:
0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3. usando apenas loços “for” blz!

JhowTroMundo

Não sei pq vc quer isso, mas vamos lá.

Serve com um while?

public static void main(String[] args) {
		int[] index = new int[20];
		int quonciente = 5;
		for(int i=0;i&lt;index.length;i++){
			index[i]= getResult(i, quonciente); 	
		}
	}
	
	private static int getResult(int i, int j) {
		int result = 0, k = j;
		while(j &lt;= i){
			j=j+k;
			result++;
		}
		return result;
	}

Mas dá pra fazer usando for também:

private static int getResult(int i, int j) {
		int result = 0, k = j;
		for(;j &lt;= i;){
			j=j+k;
			result++;
		}
		return result;
	}

Sugiro que estude mais lógica de programação. Também dá pra fazer usando recursividade.
>

dj11

JhowTroMundo:
Não sei pq vc quer isso, mas vamos lá.

Serve com um while?

public static void main(String[] args) {
		int[] index = new int[20];
		int quonciente = 5;
		for(int i=0;i&lt;index.length;i++){
			index[i]= getResult(i, quonciente); 	
		}
	}
	
	private static int getResult(int i, int j) {
		int result = 0, k = j;
		while(j &lt;= i){
			j=j+k;
			result++;
		}
		return result;
	}

Mas dá pra fazer usando for também:

private static int getResult(int i, int j) {
		int result = 0, k = j;
		for(;j &lt;= i;){
			j=j+k;
			result++;
		}
		return result;
	}

Sugiro que estude mais lógica de programação. Também dá pra fazer usando recursividade.
>

pô mt bom…vou tentar agora…obrigado pela dica…vou tentar…

dj11

mt obrigado…usei seu laço while… ficou ótimo agora!!! mais bonito e limpo…

Criado 25 de abril de 2012
Ultima resposta 25 de abr. de 2012
Respostas 10
Participantes 5