Permalänk
Medlem

Lite hjälp i Java

Har ett litet problem med denna kod. Den fungerar att köra som den är men det blir fel man t.ex bara matat in endast tal som är över 100. Då finns alltså inga tal under 100 och det blir en division med 0. Då skrivs NaN ut som medelvärde för talgruppen under 100. Hur och var ska jag göra denna kontroll att det matats in något värde under 100 och först då ska medelvärdet räknas ut.

Tacksam för hjälp!

[-code] import static javax.swing.JOptionPane.*;

public class Hundra {

public static void main(String[] args) {

String indata;
int heltal = 0;
int talUnderHundra = 0;
int talOverHundra = 0;
int talHundra = 0;
int summaUnderHundra = 0;
int summaOverHundra = 0;

String welcome = "Välkommen!" + "\n" +

"Detta program läser in ett antal positiva heltal." + "\n" +

"Skriv in ett negativt tal för att avsluta programmet och visa sammanfattning.";

showMessageDialog (null, welcome);

while (heltal >= 0)

{System.out.println("Mata in ett heltal:");

indata = showInputDialog("Mata in ett positivt/negativt heltal:");

heltal = Integer.parseInt(indata);

if (heltal < 100 && heltal > 0){talUnderHundra++; summaUnderHundra += heltal;}
else if (heltal > 100) {talOverHundra++; summaOverHundra += heltal;}
else if (heltal == 100) {talHundra++;}

}

String message = "Sammanfattning" + "\n" +

"Antal tal över 100: " + talOverHundra + "\n" +

"Antal tal under 100: " + talUnderHundra + "\n" +

"Antal tal exakt 100: " + talHundra + "\n" +

"Totalt antal angivna värden: " + (talOverHundra + talUnderHundra + talHundra) + "\n" +

"Medel över hundra: " + ((double)summaOverHundra / talOverHundra) + "\n" +

"Medel under hundra: " + ((double)summaUnderHundra / talUnderHundra);

showMessageDialog(null, message);

}

}[-/code]

Permalänk
Medlem

Lägg in if:ar. Felet uppstår när du gör summaOverHundra / talOverHundra och talOverHundra är 0. Lösningen är att bara räkna ut det om talOverHundra > 0
if (talOverHundra > 0) then
message = message + "Medel över hundra: " + ((double)summaOverHundra / talOverHundra) + "\n";
if (talUnderHundra > 0) then
message = message + "Medel under hundra: " + ((double)summaUnderHundra / talUnderHundra) + "\n";

Permalänk

Lägg gärna in koden i code-taggar.

Visa signatur

Anything that can go wrong will go wrong.

Permalänk
Medlem
Skrivet av patrix:

Lägg in if:ar. Felet uppstår när du gör summaOverHundra / talOverHundra och talOverHundra är 0. Lösningen är att bara räkna ut det om talOverHundra > 0
if (talOverHundra > 0) then
message = message + "Medel över hundra: " + ((double)summaOverHundra / talOverHundra) + "\n";
if (talUnderHundra > 0) then
message = message + "Medel under hundra: " + ((double)summaUnderHundra / talUnderHundra) + "\n";

Tack, precis där är det felet blir. Det är inte så jättelätt när man är nybörjare märker jag. Mycket att ta in och tänka på. Var kan jag lägga denna if-sats?

Permalänk
Medlem

Om du ersätter sista delen av programmet med det här så borde det fungera

"Totalt antal angivna värden: " + (talOverHundra + talUnderHundra + talHundra) + "\n"; if (talOverHundra > 0) then message = message + "Medel över hundra: " + ((double)summaOverHundra / talOverHundra) + "\n"; if (talUnderHundra > 0) then message = message + "Medel under hundra: " + ((double)summaUnderHundra / talUnderHundra) + "\n"; showMessageDialog(null, message);

Permalänk
Medlem
Skrivet av patrix:

Om du ersätter sista delen av programmet med det här så borde det fungera

"Totalt antal angivna värden: " + (talOverHundra + talUnderHundra + talHundra) + "\n"; if (talOverHundra > 0) then message = message + "Medel över hundra: " + ((double)summaOverHundra / talOverHundra) + "\n"; if (talUnderHundra > 0) then message = message + "Medel under hundra: " + ((double)summaUnderHundra / talUnderHundra) + "\n"; showMessageDialog(null, message);

Tack så himla mycket för din hjälp

Permalänk
Medlem
Skrivet av nadja:

Tack så himla mycket för din hjälp

Ingen orsak. Hoppas det inte var en björntjänst bara. Att förstå det logiska flödet är viktigt när du lär dig programmera. Jag rekommenderar att du använder en visuell debugger så kan du se exakt vad som händer steg för steg när programmet körs. Tex Eclipse är bra för Javaprogrammering och har en visuell debugger.

Permalänk
Medlem
Skrivet av patrix:

Ingen orsak. Hoppas det inte var en björntjänst bara. Att förstå det logiska flödet är viktigt när du lär dig programmera. Jag rekommenderar att du använder en visuell debugger så kan du se exakt vad som händer steg för steg när programmet körs. Tex Eclipse är bra för Javaprogrammering och har en visuell debugger.

Ja, jag förstår att det är viktigt att förstå det logiska flödet. Vissa saker känns så himla svåra så här i början bara. Du är superduktig på att förklara svåra saker på ett lätt sätt. Det är det inte många som kan. Fungerar NetBeans på samma sätt?

Permalänk
Medlem

Japp, Netbeans har en utmärkt debugger. Lär dig allt om hur den funkar. Att kunna använda debugger och steg för steg gå igenom programmet och se vad som händer och hur variabelvärden förändras är nyckeln till att lära sig programmering.

Lycka till och go Juul!

Permalänk
Medlem
Skrivet av patrix:

Japp, Netbeans har en utmärkt debugger. Lär dig allt om hur den funkar. Att kunna använda debugger och steg för steg gå igenom programmet och se vad som händer och hur variabelvärden förändras är nyckeln till att lära sig programmering.

Lycka till och go Juul!

Tack! Nu har jag kollat upp debugger och ska försöka använda mig av den för att se vad som händer.

En God Jul önskar jag dig också