Hemat Skrevet 27. september 2008 Del Skrevet 27. september 2008 Hei, jeg prøver å få til et program som leser in tall, programmet skal telle opp hvor mange tall som er mellom to gitte verdier, i dette tilfelle 10 og 50, og deretter skal programmet skrive ut antall tall som er mellom de verdiene. I tillegg skal programmet beregne gjennomsnitt (altså av de tallene som er mellom de gitte verdiene), og programmet skal asluttes ved inntasting av minustall. Alt virker greit men jeg får ikke riktig gjennomsnitt, jeg håperat noen kan gi noe tips/hjelp Gjennomsnitt skal være av de tallene som er innen grensen (ingen grense inkuldert) og ikke av alle intastet tallene Så langt har jeg kommet: public class Oppgave8 { public static void SkrivUT() { int tall; double gjennomsnitt = 0.0; int teller = 0; int sum = 0; String input = JOptionPane.showInputDialog(null,"Skriv inn ønsket tallene. Avsluttes med minus tall"); tall = Integer.parseInt(input); while (tall > 0) { if (tall > 10 && tall < 50) teller++; sum = sum + teller; // sum +=teller if (teller >0 ) { gjennomsnitt = sum/teller; } input = JOptionPane.showInputDialog(null,"Skriv inn ønsket tallene. Avsluttes med minus tall"); tall = Integer.parseInt(input); } JTextArea textfelt = new JTextArea(); textfelt.setText("Det er "+ teller +" tall mellom 10 og 50 "); if (teller > 0 ) { textfelt.append("\nog gjennomsnittet er "+gjennomsnitt); } JOptionPane.showMessageDialog(null, textfelt, "INFO",JOptionPane.INFORMATION_MESSAGE ); } } Her er driverklasse (Main-metode) : public class Oppgave8Test { public static void main (String[]args) { Oppgave8.SkrivUT(); } } sum = sum + teller; // sum +=teller Her vil kanskje noen foreslå at jeg skriver tall istedet for teller, noe som fører til at det vil ta absolutt alle intastet tall, noe jeg ikke vil at det skal gjøres. takker for alle svar:) Lenke til kommentar
Drømmemannen Skrevet 27. september 2008 Del Skrevet 27. september 2008 (endret) Det siste du skriver der stemmer jo ikke. Den vil ikke ta absolutt alle inntastede tall da du har denne koden innenfor if-testen som siler ut de uaktualle tallene! Endret 27. september 2008 av Drømmemannen Lenke til kommentar
Bolson Skrevet 27. september 2008 Del Skrevet 27. september 2008 (endret) Du har helt rett Drømmemannen. Nå er jeg ikke Java-kyndig, men slike snutter har jeg laget i alt fra Cobol til C+. Beregningen sum = sum + teller blir feil fordi den legger sammen antall og ikke lager sum av verdier så lang jeg kan se. Så den må være sum = sum + tall. I og med at beregningen er inne i et if-vilkår vil som Drømmemannen sier tallverdier mindre enn 11 og større enn 49 ikke bli tatt med. Beregning av gjennomsnitt må legges utenom loopen, dette både for å sikre rett verdier og ikke minst fordi det er langt mer effektiv kode. while (tall > 0) { if (tall > 10 && tall < 50) teller++; sum = sum + tall; // sum +=teller input = JOptionPane.showInputDialog(null,"Skriv inn ønsket tallene. Avsluttes med minus tall"); tall = Integer.parseInt(input); } gjennomsnitt = sum/teller; JTextArea textfelt = new JTextArea(); Kan ikke si jeg er 100 % sikker, men det er slik det er logisk for meg. Endret 27. september 2008 av Bolson Lenke til kommentar
Drømmemannen Skrevet 27. september 2008 Del Skrevet 27. september 2008 Som du ser fjernet jeg min kommentar om å legge utregningen av gjennomsnittet på utsiden av loopen, fordi det ikke spiller så stor rolle i.o.m at den utregnede verdien blir erstattet for hver runde i loopen, ikke bygget videre på. Men ja, det er ikke noe poeng å regne ut gjennomsnittet i loopen når den midlertidige verdien ikke også blir brukt inne i loopen. Lenke til kommentar
Hemat Skrevet 27. september 2008 Forfatter Del Skrevet 27. september 2008 (endret) Hei takker for svarene, men det viser seg at det er feil. Jeg kjørte programmet i Eclipse og de ga en gjennomsnitt på noen millioner ( jeg tastet store tall for å se om det virket som det var ment for,) Tallene mellom 10 og 50 kan umulig gi en gjennomsnitt på noen mill. Så sum+= tall; er feil, den tar alle inntastet tallene. kanskje jeg har gjort en annen dum feil her? Koden jeg kjørte, er identisk med det som er gitt i første posten, men har bare byttet sum = sum+teller til sum = sum+tall; og får feil på det også. EIDT: Fikk det riktige svare ved å slenge en ekstra if-test if (tall > 10 && tall < 50) teller++; if (tall >10 && tall<50) sum = sum + tall; i tillegg har jeg flyttet beregning av gjennomsnitt utefor løkka, noe som er foreslått her, det vil kanskje ikke bety noe for sleve beregning, men gir kanskje bedre oversikt. Men men, takk for at dere tok dere tid til å svare:=) Endret 27. september 2008 av Hemat Lenke til kommentar
Drømmemannen Skrevet 4. oktober 2008 Del Skrevet 4. oktober 2008 Right, du har/hadde glemt å putte koden i if-testen mellom { og } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå