webForumDet fria alternativet

Felsökning?

6 svar · 311 visningar · startad av Broms

BromsMedlem sedan sep. 2002188 inlägg
#1

Detta programmet läser in vikt och längd för 5 grisar, och kontrollerar om de är överviktiga eller inte, räknar sedan medalvikt på normalviktiga, överviktiga, samt alla grisar, men värdena stämmer inte.. vad har blitt knas?

import extra.*;

public class Vikt {
	// Instansvariabler
	private double vikt;
	private double längd;
	private boolean normal;

	// Konstruktor
	public Vikt(double v, double l) {
		vikt = v;
		längd = l;
		normal = kontroll();
	}

	// En vikt är onormal om grisen väger över
	// 50 kilo och är kortare än 100 cm
	private boolean kontroll() {
		if (vikt > 50 && längd < 100)
			return false;
			else
			return true;
		}
	
	public double avläsVikt() {
		return vikt;
	}
	public boolean avläsNormal() {
		return normal;
	}

/* #### MAIN DELEN #### */
	
public static void main (String[] arg) {
	double v,l;
	Vikt g;
	double summa_normal = 0, summa_onormal = 0, summa_alla = 0;
	double medel_normal, medel_onormal, medel_alla;
	int alla, alla_normala = 0, alla_onormala = 0;
	
	// Läs in vikt och längd på 5 grisar
	// och beräkna medelvikten av alla "normala"
	// grisar, medelvikten av alla "onormala"
	// grisar och alla medelvikten av alla grisar

	for (alla = 1; alla <= 5; alla++) {
		Std.out.print("Ange vikt: ");
		v = Std.in.readDouble();
		Std.out.print("Ange längd: ");
		l = Std.in.readDouble();
		g = new Vikt(v,l);

		if (g.avläsNormal()) {
			summa_normal = summa_normal + g.avläsVikt();
			alla_normala++;
		}
		else {
			summa_onormal = summa_onormal + g.avläsVikt();
			alla_onormala++;
		}
		summa_alla = summa_alla + g.avläsVikt();
	}

	// Beräkna medelvärdena
	medel_normal = summa_normal/alla_normala;
	medel_onormal = summa_onormal/alla_onormala;
	medel_alla = summa_alla/alla;
	Std.out.println("Medelvikten för alla normala grisar är: " + medel_normal);
	Std.out.println("Medelvikten för alla onormala grisar är: " + medel_onormal);
	Std.out.println("Medelvikten för alla grisar är: " + medel_alla);
	}
}
BromsMedlem sedan sep. 2002188 inlägg
#2

ingen som har någon idé? :\

jabbalizerMedlem sedan jan. 2001229 inlägg
#3

Ser ok ut tycker jag.. Känner inte till den där "Std" dock...

Vad matar du in, och vad får du ut för siffror?

Prova att skriva ut delvärden överallt så kan du själv hitta var i koden felet uppstår... :)

BromsMedlem sedan sep. 2002188 inlägg
#4

Std fungerar i stort sett som System, men har vissa inbygda felkontroller för att rätt typ av värde matas in, readInt skriver t.ex. ut "Felaktigt heltal, försök igen: " om !int matas in..

Det som blir fel är att värdena är helt puckade.. har testat att ta bort kontrollen för normal samt onormal, för att få en version att funka, men så fort jag lägger till boolean viktkontrollen samt delar upp beräkningarna på normal, onormal, samt alla, blir det galet..

jabbalizerMedlem sedan jan. 2001229 inlägg
#5

ändra din <=5 till <5 så ska du se att det blir bättre ;)

fungerar så att i slutet på slingan ökas alla++, vilket ger dig alla = 6 efter slingan

jabbalizerMedlem sedan jan. 2001229 inlägg
#6

nu ljög jag... for(alla = 0; alla<5; alla++) ska de va... annars får du bara 4 upprepningar

BromsMedlem sedan sep. 2002188 inlägg
#7

det har du helt rätt i, den hoppar ju in i slingan även då alla=5 annars, och värdet uppdateras ju inte förrän man väl hoppat in i den.. tack för hjälpen gubben =)

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