Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Ajuda com saída de valores

Olá, estou fazendo um código em que se recebe uma lista e quero ver a proporção de valores positivos, negativos e de zeros na lista. Ex: lista com 6 números, sendo 1 positivo, 3 negativos e 2 zeros deveria ter como saída:

0,16666 0,50000 0,33333

mas no meu código os resultados estão aparecendo como:

0.0 0.0 0.0

Segue o código:

import java.util.ArrayList;

public class Teste {

    public static void main(String[] args) {

        ArrayList<Integer> lista = new ArrayList<>();
        lista.add(1);
        lista.add(5);
        lista.add(0);
        lista.add(-3);
        lista.add(-8);
        lista.add(-1);

        int npos = 0;
        int nzeros = 0;
        int nneg = 0;

        for (int i = 0; i < lista.size(); i++) {
            if (lista.get(i) > 0) {
                npos++;
            } else if (lista.get(i) < 0) {
                nneg++;
            } else {
                nzeros++;
            }
        }

        double ppos = npos/lista.size();
        double pneg = nneg/lista.size();
        double pzeros = nzeros/lista.size();

        System.out.println(ppos);
        System.out.println(pneg);
        System.out.println(pzeros);
    }

}

3 respostas
solução!

fala Bruno, blz? Faz uma conversão q roda d boa e limitei casas decimais depois da virgula

        double ppos = (double)npos / lista.size();        
        double pneg = (double)nneg / lista.size();
        double pzeros = (double)nzeros / lista.size();

        System.out.println(String.format("%.3f", ppos));
        System.out.println(String.format("%.3f", pneg));
        System.out.println(String.format("%.3f", pzeros));

espero ter ajudado

Oi Bruno

O problema está nas operações, exemplo:

npos/lista.size();

Como ambos os valores nessa operação de divisão (npos e lista.size()) são inteiros o Java devolve como resultado um inteiro.

você pode colocar o cast para resolver esse problema:

        double ppos = (double) npos/lista.size();
        double pneg = (double) nneg/lista.size();
        double pzeros = (double) nzeros/lista.size();

ou você pode deixar tudo double:

        double npos = 0;
        double nzeros = 0;
        double nneg = 0;

Amigos, MUITO obrigado! Faz todo o sentido, que tapado que eu sou hahaha muito agradecido!