Preciso realizar uma divisão de valores e pegar o resto para distribuir entre os clientes de uma lista enquanto existir esse resto, para que não sobre nenhum valor e a divisão seja inteira.
Ex: São três clientes e o total foi quatro para dividir entre eles, então fica assim:
1º Cliente: 2 reais
2º Cliente: 1 real
3º Cliente: 1 real
Eu peguei esse resto e tentei fazer um while com ele, mas acaba distribuindo o valor para todos os Clientes e todo mundo fica com 2 reais.
Nesse trecho do código eu crio um ArrayList para receber a lista em txt com nome dos clientes, crio um try catch para receber o arquivo e percorro a lista toda calculando o tamanho da lista (quantidade de clientes) para dividir com o valor total da lista de compras que foi previamente adicionada e somada os valores. (Todos os valores precisam ser inteiros) No final, preciso exibir um map com o nome do cliente e o valor que ele está devendo.
List<String> clienteList = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader("listadeClientes.txt"))) {
String linhaCliente;
while ((linhaCl = br.readLine()) != null) {
clienteList.add(linhaCl);
}
for (String cliente : clienteList) {
// Tamanho da lista de e-mails
int tamLista = clienteList.size();
// Divisão do valor da lista com a quantidade de e-mails
// (var subtotal provém de outro trecho que soma o valor total da lista de compras)
int total = (subtotal / tamLista) / 100;
// captura o resto da divisão
int restoTotal = subtotal%tamLista;
while (restoTotal > 0) { **// Condicional para tratar o resto**
total++; **// Adicionar 1 à variável**
restoTotal--; **// Diminuir 1 do resto**
}
// Criação do Map
Map<String, Integer> clienteMap = new HashMap<>();
clienteMap.put(cliente, total);
// Exibição dos dados com forEach utilizado em Java 8
clienteMap.forEach((clienteChave, totalValor) ->
System.out.println("A pessoa: " + clienteChave + " está devendo " + totalValor + " reais.")
);
}
} catch (IOException e) {
System.out.println("Erro com o arquivo! Por favor, escolha um arquivo diferente.");
}
Dessa forma ele não está exibindo o primeiro como 2 e os outros como 1, todos estão sendo incrementados, talvez eu tenha perdido algo.