[quote=dj++]Hello, gostaria de melhorar o codigo abaixo, substituindo a divisao “i/5” por uma solução computacional, pois divisao é um calculo muito complexo.
[/quote]
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”.
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.
/**
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));
}
}
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!
/**
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![/quote]
: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!
public static void main(String[] args) {
int[] index = new int[20];
int quonciente = 5;
for(int i=0;i<index.length;i++){
index[i]= getResult(i, quonciente);
}
}
private static int getResult(int i, int j) {
int result = 0, k = j;
while(j <= 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 <= i;){
j=j+k;
result++;
}
return result;
}
Sugiro que estude mais lógica de programação. Também dá pra fazer usando recursividade.
>
[quote=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<index.length;i++){
index[i]= getResult(i, quonciente);
}
}
private static int getResult(int i, int j) {
int result = 0, k = j;
while(j <= 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 <= i;){
j=j+k;
result++;
}
return result;
}
Sugiro que estude mais lógica de programação. Também dá pra fazer usando recursividade.
>[/quote]
pô mt bom…vou tentar agora…obrigado pela dica…vou tentar…