Como passar valores de um array para outro?

4 respostas
helex

Oi. No caso, tenho o seguinte array:

int[] valores = {1,-4,8,-3,7,-7};

Quero fazer um novo array. Apenas com os valores negativos deste array. Ou seja, passar de um array pra outro.

O que eu fiz até agora:

public static int[] valoresNegativos (int[] valores){ int[] valoresNegativos; for (int i = 0; i < valores.length; i++){ if (valores[i] < 0){ /*aqui não sei o que colocar */ } } return valoresNegativos; }

4 Respostas

drsmachado

Primeiro, precisa ter um tamanho determinado, eu determinaria o tamanho como sendo o tamanho do array recebido

public static int[] valoresNegativos (int[] valores){  
            int[] valoresNegativos = valores;  
            for (int i = 0; i < valores.length; i++){  
                if (valores[i] < 0){  
                    /*aqui não sei o que colocar */  
                    //valoresNegativos[i] = valores[i];
                }  
            }  
            return valoresNegativos;  
        }

Isto, certamente, faria o que precisa.
Apenas trate os valores null (pois se nem todos forem negativos, algum deles será nulo.

markinlelo
public static Integer[] valoresNegativos (int[] valores)
        List<Integer> lista = new ArrayList();
         
        for (int i = 0; i < valores.length; i++){  
            if (valores[i] < 0){  
                lista.add(valores[i]); 
            }  
        }  
        return (Integer[]) lista.toArray(); 
}
drsmachado
markinlelo:
public static Integer[] valoresNegativos (int[] valores)
        List<Integer> lista = new ArrayList();
         
        for (int i = 0; i < valores.length; i++){  
            if (valores[i] < 0){  
                lista.add(valores[i]); 
            }  
        }  
        return (Integer[]) lista.toArray(); 
}
Um ótimo exemplo, porém, a dificuldade dele é bem mais básica. Ele está com dificuldades em entender um simples array, quanto mais um list...
rmendes08

drsmachado:
Primeiro, precisa ter um tamanho determinado, eu determinaria o tamanho como sendo o tamanho do array recebido

public static int[] valoresNegativos (int[] valores){  
            int[] valoresNegativos = valores;  
            for (int i = 0; i < valores.length; i++){  
                if (valores[i] < 0){  
                    /*aqui não sei o que colocar */  
                    //valoresNegativos[i] = valores[i];
                }  
            }  
            return valoresNegativos;  
        }

Isto, certamente, faria o que precisa.
Apenas trate os valores null (pois se nem todos forem negativos, algum deles será nulo.

Como assim, null ? O array é de primitivos [b]int[/int], eles nunca serão nulos. Além do mais, esse algoritmo não faz nada, porque ele não copia o array. Ele o referencia através de uma segunda variável, de forma que a atribuição:

valoresNegativos[i] = valores[i];

não tem efeito, porque é o mesmo array. Eu faria um diferente:

public static int[] valoresNegativos (int[] valores){  
            if( valores == null ){
               return null;
            }

            int[] aux = new int[valores.length];

            int j = 0; //crio um segundo contador para o array de negativos

            for (int i = 0 ; i < valores.length; i++){  
                if (valores[i] < 0){  
                    aux[j] = valores[i];  //recebe o valor negativo

                    j++;  //incremento o contador do array de negativos
                }  
            }

            //passo opcional: criar um array com a quantidade exata de números negativos
            int [] valoresNegativos = new int[j];

            for( int i = 0 ; i < j ; i++){
                valoresNegativos[i] = aux[i];
            }


            return valoresNegativos;  
        }
Criado 9 de junho de 2011
Ultima resposta 10 de jun. de 2011
Respostas 4
Participantes 4