webForumDet fria alternativet

Fiska ut värden från en vektor

2 svar · 326 visningar · startad av Arre

ArreMedlem sedan juli 200370 inlägg
#1

Halloj!
Nu har vi precis börjat med arrayList och problemen strömmar på efter varandra.
Labben som vi ska göra e att ta ut 3 värden (namn, vikt, langd) från en extern fil och beräkna medelBMI för de personer som finns i filen. Filen består då utav 3 string splittad med " ; ".

Programmet e indelad i 3 klasser, Lab, Fil och Persondata. Main befinner sig i Lab då. Metoden som räknar ut medelBMI befinner sig Lab.

Problemet jag har är i metoden medelBMI, eftersom alla värden från filen hamnar i en arrayList så vet jag inte hur jag ska ta ut de två variablerna vikt och langd (som blir deklarerade och typkonverterade i persondata klassen) för att sedan ta ut ett medelvärde på var och en...

Koden:
----------------------------------------
//Statiska metoden calcAverageBMI med datatypen double
static double calcAverageBMI(ArrayList individer) {
for (int i = 0; i < individer.size(); i++) {
Individ p = individer.get*;
p.langd;
p.vikt;
}
return vikt / (langd*langd);
}
----------------------------------------
//Persondata-klassen
class Individ {
private String namn;
private double langd;
private int vikt;

Individ(String namn, String langd, String vikt) {
    this.namn  = namn;      
    this.langd = Double.parseDouble(langd);    
    this.vikt = Integer.parseInt(vikt);
}

}
----------------------------------------

Lite hjälp vore underbart! Tack på förhand :)*

spangoMedlem sedan juni 20008 205 inlägg
#2

Jag skulle för det första rekommendera att du lägger BMI-uträkning för varje person i Individ, ty det är mer objektorienterat:

public double getBMI(){
  double tmpWeight = vikt;
  double tmpHeight = langd;
  return tmpWeight / (tmpHeight * tmpHeight);
}

Luftigare än nödvändigt för att tydliggöra. Vikt och längd görs om till double så vi får med decimaler också... sen är det bara att iterera över din lista och räkna ut medlet. Kör ni Java 1.5 med generics ser det ut så här:

ArrayList<Individ> individuals = ...;
double sumBMI = 0;
for (Individ i : individuals)
  sumBMI += i.getBMI(); // räkna samman BMI för alla i listan
double averageBMI = sumBMI / personer.size();

Kör ni gamla Java är det bökigare, men i princip samma sak:

ArrayList individuals = ...;
double sumBMI = 0;
for (Iterator iter = individuals.iterator(); iter.hasNext();){
  Individ ind = (Individ) iter.next();
  sumBMI += ind.getBMI(); 
}
double averageBMI = sumBMI / personer.size();
ArreMedlem sedan juli 200370 inlägg
#3

Tack för svaret spango!
Det blev rätt avancerat i slutet tyckte jag. Men jag ska ta o prova med enskilt BMI-värde i metoden Individ. På så sätt kan jag kanske ta o allas BMI-värde och på så sätt räkna ut medeln genom att dividera summan av BMI'n med vektorns size() :) kan funka.

126 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)