Javaprogram som läser in okänt antal heltal|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
Javaprogram som läser in okänt antal heltal
Callister
Member
Medlem
Forum Posts: 8468
Member Since:
July 27, 2002
sp_UserOfflineSmall Offline
1
February 11, 2008 - 1:35 pm
sp_Permalink sp_Print

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);
}
}
Rhino
Mina inlägg skrivs i binär kod
Medlem
Forum Posts: 153
Member Since:
August 9, 2001
sp_UserOfflineSmall Offline
1180209
February 11, 2008 - 1:47 pm
sp_Permalink sp_Print

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 😎

Callister
Member
Medlem
Forum Posts: 8468
Member Since:
July 27, 2002
sp_UserOfflineSmall Offline
1180210
February 11, 2008 - 1:50 pm
sp_Permalink sp_Print

Det funkade tydligen ändå. Men den avslutar om man anger negativa heltal över 100, verkar det som.

Någon som ser varför? 😕

Callister
Member
Medlem
Forum Posts: 8468
Member Since:
July 27, 2002
sp_UserOfflineSmall Offline
1180212
February 11, 2008 - 1:52 pm
sp_Permalink sp_Print

Eller snarare sagt: om man inte anger mkt positiva heltal så vill den inte fortsätta på ett högt negativt heltal. Precis som de måste balansera..

Callister
Member
Medlem
Forum Posts: 8468
Member Since:
July 27, 2002
sp_UserOfflineSmall Offline
1180213
February 11, 2008 - 1:58 pm
sp_Permalink sp_Print

Nej den vill inte fortsätta på redovisningen i slutet om man inte skriver in något tal över 100. 🙁

jonaz
Kommer du hit ofta?
Medlem
Forum Posts: 940
Member Since:
May 8, 2001
sp_UserOfflineSmall Offline
1180224
February 11, 2008 - 3:55 pm
sp_Permalink sp_Print

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

Callister
Member
Medlem
Forum Posts: 8468
Member Since:
July 27, 2002
sp_UserOfflineSmall Offline
1180229
February 11, 2008 - 4:23 pm
sp_Permalink sp_Print

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..

jonaz
Kommer du hit ofta?
Medlem
Forum Posts: 940
Member Since:
May 8, 2001
sp_UserOfflineSmall Offline
1180231
February 11, 2008 - 4:32 pm
sp_Permalink sp_Print

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

Callister
Member
Medlem
Forum Posts: 8468
Member Since:
July 27, 2002
sp_UserOfflineSmall Offline
1180232
February 11, 2008 - 4:42 pm
sp_Permalink sp_Print

Vafasen tar han med det negativa värdet för? 🙁

Ok, tack för svaret. 🙂

jonaz
Kommer du hit ofta?
Medlem
Forum Posts: 940
Member Since:
May 8, 2001
sp_UserOfflineSmall Offline
1180269
February 11, 2008 - 7:51 pm
sp_Permalink sp_Print

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

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 1030
Currently Online:
Guest(s) 437
Currently Browsing this Page:
2 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL