estou tentando somar os números de uma ArrayList, já tentei várias coisas e estou confusa
aqui segue o código:
public class CoffeeCalendar extends javax.swing.JFrame {
Collection dailyCoffeeTimes = new ArrayList();
private void coffeeTimesAnswerKeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER){
try{
if(coffeeTimesAnswer.getText().length() != 0 ){
try{
long valor = Long.parseLong(coffeeTimesAnswer.getText());
coffeeTimesAnswer.setText("");
dailyCoffeeTimes.add(coffeeTimesAnswer.getText());
System.out.print(dailyCoffeeTimes.size());}//testa para ver se está adicionando o numeros do textfield na list
catch (NumberFormatException ex){
JOptionPane.showMessageDialog(null, "This field only accept numbers" ,"Info",JOptionPane.INFORMATION_MESSAGE);
coffeeTimesAnswer.grabFocus();// foca o campo
coffeeTimesAnswer.setText(""); //limpa o campo
}}
}
catch(Exception e) {
}
}
public void somaPontos(){
Integer i = Integer.parseInt(dailyCoffeeTimes.getText());
int sum = dailyCoffeeTimes.stream().forEach(i -> i.sum());
}
}
Eu sei que está meio confuso, é porque eu estava testando algumas coisas
Mas como eu deveria usar o sum() corretamente? e porque o .getText() está dando erro?
Não está do modo mais otimizado, mas apenas essas linhas fazem o proposto
Scanner s = new Scanner(System.in);
List<Long> lista = new ArrayList<>();
System.out.print("Digite seu primeiro número: ");
long n1 = s.nextLong();
lista.add(n1);
System.out.print("Digite seu segundo número: ");
long n2 = s.nextLong();
lista.add(n2);
long aux = 0;
for(int n = 0; n < lista.size(); n++) {
aux = aux + lista.get(n);
}
System.out.println(aux);
O erro ocorre pois a interface Collection, do package java.util não contém um método chamado get.
Este método está presente na interface List, também do java.util e que é a estrutura que você precisa para realizar essa tarefa.
Das duas uma:
Muda a declaração para List
Faz um cast explícito no momento em que precisar dos dados da collection
Bônus: usa Iterator
Iterator it = dailyCoffeeTimes.iterator();
while(it.hasNext()) {
aux += it.next(); //Isso é o mesmo que aux = aux + it.next;
}
As linhas acima compilam ou não? Se elas compilam (e, sim, elas compilam) o código que eu sugeri funciona.
Isso por conta de uma particularidade dos wrappers de converter valores primitivos em objetos em tempo de execução, sem necessidade de cast explícito.
É óbvio que ela precisará definir o tipo para a List, mas, isso é muito mais tranquilo.
A propósito.
import java.util.ArrayList;
import java.util.List;
public class Blablabla {
public static void main(String[] args) {
List<Integer> lista = new ArrayList<Integer>();
lista.add(1);
lista.add(2);
lista.add(3);
lista.add(4);
lista.add(5);
lista.add(6);
int soma = 0;
for(int i = 0; i < lista.size(); i++) {
soma += lista.get(i);
}
System.out.println("A soma dos elementos da lista é: " + soma);
}
}