July 27, 2002
Detta fungerar ju helt okej, det fortsätter loopa på positiva heltal. Och avslutar vid negativa. Men den stannar där och gör inget mera..
Vad är fel?
Detta är programmets beskrivning:
Gör ett program som läser in ett okänt antal positiva heltal (när ett negativt värde anges avslutas inmatningsmöjligheten).
Skriv sedan ut hur många angivna värden som är större än 100, hur många som är mindre än 100, samt hur många som är exakt 100. Skriv även ut hur många värden som totalt är angivet (det negativa värdet ska inte räknas med).
Skriv även ut medelvärdet för talgrupperna över 100 respektive under 100
import static javax.swing.JOptionPane.*; /* för dialogrutorna */
class test {
public static void main (String[] arg) {
int heltal;
int svar;
int antaltal = 0;
int över100 = 0;
int under100 = 0;
int exakt100 = 0;
int medelöver = 0;
int medelunder = 0;
String indata;
indata = showInputDialog("Skriv in ett heltal");
heltal = Integer.parseInt(indata);
svar = (int) (heltal);
while (heltal > 0 ) {
indata = showInputDialog("Skriv in ett heltal");
heltal = Integer.parseInt(indata);
int tmp = heltal;
antaltal++;
if (heltal==100){
exakt100++;
}
if (heltal>100){
över100++;
medelöver = (medelöver + heltal);
}
if (heltal<100){
under100++;
medelunder = (medelunder + heltal);
}
}
showMessageDialog(null, "Redovisning " + "n" +
"Antal tal över 100: " + över100 + "n"+
"Antal tal under 100: " + under100 + "n"+
"Antal tal exakt 100: " + exakt100 + "n"+
"Totalt antal angivna värden: " + antaltal + "n"+
"Medelvärdet på tal över hundra:" + medelöver / över100++ + "n"+
"Medelvärdet på tal under hundra:" + medelunder / under100++);
System.exit(0);
}
}
August 9, 2001
System.exit lär väl stänga ner programmet? Det vill säga, innan du hinner se. (Jag kodar inte java så jag vet inte om showMessageDialog är något inbyggt eller ditt eget, men såvida den inte väntar på att man trycker på 'OK' eller dylikt så..)
edit: var tydligen inte med i loopen. inte lätt att se med den intenderingen dock 😎
May 8, 2001
Programmet borde fortsätta fråga om tal tills du skriver ett tal under 100. Då ska resultatet visas.
Lite andra tips:
* Variablerna svar används aldrig
* Den första inläsningen används aldrig i beräkningen, du borde använda
do {
} while(
Dock kommer du då att använda talet under 100 men det för du redan nu...
Hur vill du att det ska fungera?
EDIT: Variabeln tmp används inte heller, System.exit(0) behövs inte heller då programmet ändå kommer att stoppa i detta läge med exitkod 0.
EDIT 2: Testade och du har ett annat problem vilket är att om du inte anger ett tag större än 100 så kommer du att ett runtime fel. Division by zero...
-> medelöver / över100++
samma sak om du bara skulle ange tal över 100
-> medelunder / under100++
Dessutom har det ingen funktion att använda "++" på dessa variabler då det görs efter de använts och aldrig kommer att ge någon effekt...
Klassnamnet bör enligt konvension vara med stor begynnelsebokstv "Test", men det påverkar ju inte resultatet.
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
July 27, 2002
Tjena. Tack så mycket.
Jovars, jag är inte särskilt bra på java. 🙂
Läraren vill ha med System.exit(0) i slutet, annars blir det gnäll.
Jo jag har testat programmet lite nu och den vägrar gå vidare om man inte har angett ett tal över 100 innan man skriver ett negativt.
Hur vill du att det ska fungera?
Exakt som det gör nu. Jag är medveten om att det är lite överskott på saker men det får jag fixa sedan. Främsta problemet just nu är som sagt att man får runtime error när man inte anger ett tal över 100. Under 100 funkar för mig däremot..
May 8, 2001
Callister wrote: Tjena. Tack så mycket.
Jovars, jag är inte särskilt bra på java. 🙂
Läraren vill ha med System.exit(0) i slutet, annars blir det gnäll.
Jo jag har testat programmet lite nu och den vägrar gå vidare om man inte har angett ett tal över 100 innan man skriver ett negativt.
Hur vill du att det ska fungera?
Exakt som det gör nu. Jag är medveten om att det är lite överskott på saker men det får jag fixa sedan. Främsta problemet just nu är som sagt att man får runtime error när man inte anger ett tal över 100. Under 100 funkar för mig däremot..
Det som är fel är ju just att du försöker dela med noll. Det går inte rent matematiskt och därför "dör" programmet. Att under 100 fungerar beror på att du felaktigt (om jag förstår instruktionen) använder även det negativa talet i beräkningen. Vad du måste göra är följande:
1. Om talet är negativt, använd det inte. Alltså räkna inte upp "under100" samt öka inte summaunder.
2. Kolla om "under100" är noll, om det är så kan du inte beräkna medelvärdet men å andra sidan vet du att det är 0 (du har ju inte angett något tal under 100. Gör detsamma för "över100".
Punkt 2 gäller för under 100 först när du rättat felet att du använder negativa tal i resultatet, som det är nu funkar det ju. Negativa tal är som jag förstår det som endast för att stanna loopen som läser in nya tal.
Lycka till!
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
May 8, 2001
Callister wrote: Vafasen tar han med det negativa värdet för? 🙁
Ok, tack för svaret. 🙂
Orsaken till att det negativa värdet kommer med är ju att du först i loopen läser in talet, sen använder du det så att det "kommer med" och först sedan detta är gjort så avslutas loopen när väret på "heltal" testas igen i while-loopen. Istället måste du läsa in talet och sen kolla om det är ok (större eller lika med noll tror jag det var), först efter det kan du "använda" det inlästa talet. Du kan tex göra som nu men följande tillägg:
if(tal==100)
else if(tal>100)
else if(tal>0)
annars görs inget i loopen. Då får du med alla tal från 1 och uppåt. (Kolla uppgiften för jag kommer inte ihåg om 0 skulla med... I så fall blir ju den sista testen:
else if(tal>=0)
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
2 Guest(s)