Pessoal estou com um problema sou novo em JAVA , o problema e o seguinte, estou alocando os dados em um arrayList, são números(double) depois gostaria de ordena-los, contar todos os elementos e retirar todas as repetições, bom o meu problema esta aí em conta e retirar as repetições ,meu codigo seque abaixo o que seria melhor para este caso Vector ou Arraylist?
System.out.println("Digite os componentes do ArrayList: ");
while((x++) < 5){
array.add(entra.nextDouble());
}
for(int i=0; i < array.size();i++){
for(int j=0 ; j < array.size();j++){
if(array.get(j).equals(array.get(i))){
y++;
}
}
array1.add(y);
y=0;
}
Collections.sort(array);//esta é forma correta de usar esta interface?
Para contar basta utilizar o método size().
Já para tratar as repetições você pode verificar antes de inserir se o objeto existe.
Algo +/- assim:
List<Double> lista = new ArrayList<Double>();
while((x++) < 5) {
Double d = entra.nextDouble();
if(!lista.contains(d)) {
lista.add(d); //Aqui ele só vai entrar se não encontrar um objeto igual
}
}
System.out.println("Tamanho: " + lista.size());
[quote=yorgan]Para contar basta utilizar o método size().
Já para tratar as repetições você pode verificar antes de inserir se o objeto existe.
Algo +/- assim:
List<Double> lista = new ArrayList<Double>();
while((x++) < 5) {
Double d = entra.nextDouble();
if(!lista.contains(d)) {
lista.add(d); //Aqui ele só vai entrar se não encontrar um objeto igual
}
}
System.out.println("Tamanho: " + lista.size());
[]´s
Daniel[/quote]
Oi,
Você pode fazer exatamente isso! E o uso do Collections está correto.
Agradeço a ajuda de todos, só que gostaria de contar, cada observção repetida , e depois retiro , tipo o numero total de observação eu manipulo com array.size a orddenação com interface Collections os outro fatores que eu não estou conseguindo abstrair!!l!
Exemplo:
array depois array
1 - x1 == 2; - 1
1 - x2 == 1; - 2
2 - x3 == 1 - 3
3
System.out.println("Digite os componentes do ArrayList: ");
for (int i = 0; i < 5; ++i)
array.add(entra.nextDouble());
}
//Cria um mapa para fazer a contagem
Map<Double, Integer> contagem = new TreeMap<Double, Int>();
for (Double numero : array) {
if (!contagem.contains(numero) { //Se aquele double não foi contado
contagem.put(numero, 1); //Então põe 1 em seu contador
} else {
//Caso contrário, soma 1
contagem.put(numero, contagem.get(numero)+1);
}
}
System.out.println("Quantidade de elementos (sem duplicações):" + contagem.size());
System.out.println("Elementos:" + contagem.keySet());
System.out.println("Quantidade de vezes que cada elemento apareceu:");
for (Map.Entry<Double, Integer> par : contagem.entrySet()) {
System.out.println(par.getKey() + " = " + par.getValue());
}
O TreeMap associa uma chave (seu double) com um valor (nesse caso, a quantidade de vezes que esse double apareceu).
As chaves são únicas e ordenadas. Por isso, o keySet associado ao mapa já vai ter os valores sem duplicações.
int x = 0;
Scanner entra = new Scanner(System.in);
ArrayList array = new ArrayList();
System.out.println("Digite os componentes do ArrayList: ");
//System.out.println(entra.nextDouble());
while((x++) < 5){
array.add(entra.nextDouble());
}
Collections.sort(array);
//Cria um mapa para fazer a contagem
Map<Double, Integer> contagem = new TreeMap<Double, Integer>();
[for (Double numero : array) {//problema
if (!contagem.contains(numero)) { //Se aquele double não foi contado
contagem.put(numero, 1); //Então põe 1 em seu contador
} else {
//Caso contrário, soma 1
contagem.put(numero, contagem.get(numero)+1);
}
}
System.out.println("Quantidade de elementos (sem duplicações):" + array.size());//problema
System.out.println("Elementos:" + array.keySet());//problema
System.out.println("Quantidade de vezes que cada elemento apareceu:");//problema
for (Map.Entry<Double, Integer> par : array.entrySet()) {
System.out.println(par.key() + " = " + par.value());
}
System.out.println(array);
Map tem restrições, se depois quiser adiciona-la para Jtable que esta em uma Jframe e depois lançar para meu Banco de Dados?
Obrigado!!!
Consegui entender porem , como sou iniciante vou ler o java doc para entender mais desta interface que achei muito legal contudo esta parte não funcionou!
System.out.println("Quantidade de elementos (sem duplicações):" + elems.size());//mudei para funcionar
System.out.println("Elementos:" + elems);//mudei para funcionar
System.out.println("Quantidade de vezes que cada elemento apareceu:");
for (Map.Entry<Double, Integer> par : elems.) {//aqui ta o problema não sei como implementa este metodo .entrySet!!
System.out.println(par.getKey() + " = " + par.getValue());
}
Fora o java.doc teria uma outra literatura eu estudar!!!
Desde já Agradeço Márcio
Gente valeu tava lendo o java.doc e as dica de vcs, a consegui ver meu erro!
int x = 0;
Scanner entra = new Scanner(System.in);
List<Double> array = new ArrayList<Double>();
System.out.println("Digite os componentes do ArrayList: ");
while((x++) < 5){
array.add(entra.nextDouble());
}
//Cria um mapa para fazer a contagem
Map<Double, Integer> contagem = new TreeMap<Double, Integer>();
for (Double numero : array) {
if (!contagem.containsKey(numero)) { //Se aquele double não foi contado
contagem.put(numero, 1); //Então põe 1 em seu contador
} else {
//Caso contrário, soma 1
contagem.put(numero, contagem.get(numero)+1);
}
}
Set<Double> elems = new TreeSet<Double>(array);
System.out.println("Quantidade de elementos (sem duplicações):" + elems.size());
System.out.println("Elementos:" + elems);
System.out.println("Quantidade de vezes que cada elemento apareceu:");
for (Map.Entry<Double, Integer> par : contagem.entrySet()) {
System.out.println(par.getKey() + " = " + par.getValue());
Realmente o Java nos permite com muito estudo e dedicação fazer coisas incríveis!
Valeu amigos