Gå til innhold

Hvor ligger feilen? Beregning av gjennomsnitt


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Bolson
Lenke til kommentar

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

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.

 

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 av Hemat
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...