While-loop slutar inte loopa, programmering i Java

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Apr 2016

While-loop slutar inte loopa, programmering i Java

Hejsan!

Jag hoppas lite att någon kan hjälpa mig att förstå felet i min kod, jag känner mig helt lost.

I mitt program så vill jag att man ska kunna mata in siffror och att programmet ska svara om det är en siffra under 100, om det är exakt 100 eller om det är över 100. Detta ska loopa tills individen matar in siffran '0'. Efter det så ska programmet avslutas och räkna ut hur många gånger (och medelvärdet) som personen har matat in siffror under 100 och över 100.

Jag har läst i olika böcker och kollat runt på nätet, men jag förstår verkligen inte vad som är fel i min kod, så nu vänder jag mig hit.
Jag vet att jag ska använda två int'er som exempelvis "summaÖverHundra" och "summaUnderHundra" men jag förstår inte vart i koden som det ska in.

import static javax.swing.JOptionPane.*; public class NewClass { public static void main(String args[]) { String indata; indata = showInputDialog("Skriv in ett heltal: "); int number = Integer.parseInt(indata); int summaÖverHundra = 0; int summaUnderHundra = 0; while (number > 0) { if (number <= 99) { System.out.println("Talet som Du angav är under 100 (mellan 1-99)."); } else if (number >= 101) { System.out.println("Talet som Du angav är över 100."); } else if (number == 100) { System.out.println("Talet som Du angav är 100."); } else if (number == 0) { showMessageDialog(null, "Du matade in siffran '0', då avslutas nu numreringssekvensen."); } indata = showInputDialog("Skriv in ett heltal: "); } int antal = Integer.parseInt(indata); int summa = Integer.parseInt(indata); int medelvärdet = antal / summa; if (summa <= 99) { System.out.println("Medelvärdet på tal under 100 är: " + medelvärdet); } else if (summa >= 101) { System.out.println("Medelvärdet på tal över 100 är: " + medelvärdet); } else if (summa == 100) { System.out.println("Medelvärdet på dessa tal är 100, men antal gånger som det har matats in är: " + antal); } } }

Det som händer i min nuvarande kod är att den slutar inte loopa utan jag får tvångsavsluta loopen (med krysset nere i högra hörnet).
Vad är det för fel i min kod? Några tips?

/Nybörjare i kodning.

Trädvy Permalänk
Medlem
Plats
Trollhättan
Registrerad
Aug 2015

Vad jag ser så minskar du aldrig 'number', skriv t.ex. 'number--;' på ett lämpligt ställe.

Trädvy Permalänk
Medlem
Plats
::1
Registrerad
Jan 2003
Skrivet av Dr Phillan:

Hejsan!

Jag hoppas lite att någon kan hjälpa mig att förstå felet i min kod, jag känner mig helt lost.

I mitt program så vill jag att man ska kunna mata in siffror och att programmet ska svara om det är en siffra under 100, om det är exakt 100 eller om det är över 100. Detta ska loopa tills individen matar in siffran '0'. Efter det så ska programmet avslutas och räkna ut hur många gånger (och medelvärdet) som personen har matat in siffror under 100 och över 100.

Jag har läst i olika böcker och kollat runt på nätet, men jag förstår verkligen inte vad som är fel i min kod, så nu vänder jag mig hit.
Jag vet att jag ska använda två int'er som exempelvis "summaÖverHundra" och "summaUnderHundra" men jag förstår inte vart i koden som det ska in.

import static javax.swing.JOptionPane.*;

public class NewClass {

public static void main(String args[]) {

indata = showInputDialog("Skriv in ett heltal: ");
int number = Integer.parseInt(indata);

while (number > 0) {
if (number <= 99) {
System.out.println("Talet som Du angav är under 100 (mellan 1-99).");
} else if (number >= 101) {
System.out.println("Talet som Du angav är över 100.");
} else if (number == 100) {
System.out.println("Talet som Du angav är 100.");
} else if (number == 0) {
showMessageDialog(null, "Du matade in siffran '0', då avslutas nu numreringssekvensen.");
}
indata = showInputDialog("Skriv in ett heltal: ");
}
}

Det enda stället number tilldelas ett värde är utanför while-loopen. number vil därför aldrig ändras hur många gånger det än loopar.

CPU: Ryzen 5 1600 GPU: Asus GeForce GTX 1060 6GB DUAL Moderkort: MSI B350M Mortar
RAM: 16GB Corsair Vengeance DDR4 3200MHz PSU: Corsair RM750X
Mobil: NVIDIA Shield, Nexus 5x

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

Vad jag kan se lite såhär snabbt är ju att du gör inget för att bryta dig ut ur loppen. Villkoret ändras aldrig.

PS Använd gärna CODE taggarna.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2011

Efter att du hämtar data på nytt från användaren behöver du tilldela värdet till number igen, efter denna rad i slutet på din loop:
indata = showInputDialog("Skriv in ett heltal: ");

Trädvy Permalänk
Medlem
Plats
Västra Götaland
Registrerad
Jul 2008

Du behöver ha koden som ändrar number till indata inuti loopen.

Dessutom har du ett villkor "elseif number==0 " inuti en "while number>0"-loop, så du behöver ändra number innan den koden.

Quad-quad core med kvävekylning och kokvattenreaktor.

Trädvy Permalänk
Medlem
Plats
Örebro
Registrerad
Feb 2005

Som andra redan sagt. number är alltid över 0 i loopen såvida man inte trycker in 0 i början.

|Intel i5 4670K@4.4GHz| |Asus Z97-A| |A-Data 16GB CL9 1600MHz| |ASUS GeForce GTX 1080 Ti ROG Strix Gaming OC| |Samsung 850 Evo 500GB| |Samsung 840 Evo 250GB| |WD Green 3TB| |Corsair RM1000| |Fractal Design Define R5| |LG IPS Display@74Hz|

Trädvy Permalänk
Medlem
Plats
Bästkusten
Registrerad
Jun 2009

Ta bara bort den omslutande while-loopen så funkar väl programmet som du vill. Jag ser inte att den gör någon nytta?

|| 2700K @ 4.7GHz || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & OCZ Agility 3 120GB & Crucial C300 64GB & Crucial V4 256GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av Dr Phillan:

Hejsan!

Jag hoppas lite att någon kan hjälpa mig att förstå felet i min kod, jag känner mig helt lost.

I mitt program så vill jag att man ska kunna mata in siffror och att programmet ska svara om det är en siffra under 100, om det är exakt 100 eller om det är över 100. Detta ska loopa tills individen matar in siffran '0'. Efter det så ska programmet avslutas och räkna ut hur många gånger (och medelvärdet) som personen har matat in siffror under 100 och över 100.

Jag har läst i olika böcker och kollat runt på nätet, men jag förstår verkligen inte vad som är fel i min kod, så nu vänder jag mig hit.
Jag vet att jag ska använda två int'er som exempelvis "summaÖverHundra" och "summaUnderHundra" men jag förstår inte vart i koden som det ska in.

import static javax.swing.JOptionPane.*; public class NewClass { public static void main(String args[]) { String indata; indata = showInputDialog("Skriv in ett heltal: "); int number = Integer.parseInt(indata); int summaÖverHundra = 0; int summaUnderHundra = 0; while (number > 0) { if (number <= 99) { System.out.println("Talet som Du angav är under 100 (mellan 1-99)."); } else if (number >= 101) { System.out.println("Talet som Du angav är över 100."); } else if (number == 100) { System.out.println("Talet som Du angav är 100."); } else if (number == 0) { showMessageDialog(null, "Du matade in siffran '0', då avslutas nu numreringssekvensen."); } indata = showInputDialog("Skriv in ett heltal: "); } int antal = Integer.parseInt(indata); int summa = Integer.parseInt(indata); int medelvärdet = antal / summa; if (summa <= 99) { System.out.println("Medelvärdet på tal under 100 är: " + medelvärdet); } else if (summa >= 101) { System.out.println("Medelvärdet på tal över 100 är: " + medelvärdet); } else if (summa == 100) { System.out.println("Medelvärdet på dessa tal är 100, men antal gånger som det har matats in är: " + antal); } } }

Det som händer i min nuvarande kod är att den slutar inte loopa utan jag får tvångsavsluta loopen (med krysset nere i högra hörnet).
Vad är det för fel i min kod? Några tips?

/Nybörjare i kodning.

Du måste ge number ett nytt värde inne i din while, annars kommer den alltid ha samma värde som första gången du gick in i loopen.

Skrivet av DunderKlumpen:

Ta bara bort den omslutande while-loopen så funkar väl programmet som du vill. Jag ser inte att den gör någon nytta?

Utan loopen kommer det ju bara köras en gång så nej den ska inte bort.

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Plats
Bästkusten
Registrerad
Jun 2009
Skrivet av gaminggirl:

Du måste ge number ett nytt värde inne i din while, annars kommer den alltid ha samma värde som första gången du gick in i loopen.

Utan loopen kommer det ju bara köras en gång så nej den ska inte bort.

Hah, just ja, jag kanske skulle läst problembeskrivningen också

|| 2700K @ 4.7GHz || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & OCZ Agility 3 120GB & Crucial C300 64GB & Crucial V4 256GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Apr 2016

Okej, jag tror att jag förstår vad ni menar, men hur ger jag number ett nytt värde?
Det går ju inte att lägga in "int number = Integer.parseInt(indata);" där igen (eftersom att den redan är definierad). Jag verkar inte kunna skriva "number" som det är då det är "illegal start of expression", då förstår jag inte hur jag ska kunna ändra värdet.

Trädvy Permalänk
Medlem
Registrerad
Okt 2015
Skrivet av Dr Phillan:

Hejsan!

Jag hoppas lite att någon kan hjälpa mig att förstå felet i min kod, jag känner mig helt lost.

I mitt program så vill jag att man ska kunna mata in siffror och att programmet ska svara om det är en siffra under 100, om det är exakt 100 eller om det är över 100. Detta ska loopa tills individen matar in siffran '0'. Efter det så ska programmet avslutas och räkna ut hur många gånger (och medelvärdet) som personen har matat in siffror under 100 och över 100.

Jag har läst i olika böcker och kollat runt på nätet, men jag förstår verkligen inte vad som är fel i min kod, så nu vänder jag mig hit.
Jag vet att jag ska använda två int'er som exempelvis "summaÖverHundra" och "summaUnderHundra" men jag förstår inte vart i koden som det ska in.

import static javax.swing.JOptionPane.*; public class NewClass { public static void main(String args[]) { String indata; indata = showInputDialog("Skriv in ett heltal: "); int number = Integer.parseInt(indata); int summaÖverHundra = 0; int summaUnderHundra = 0; while (number > 0) { if (number <= 99) { System.out.println("Talet som Du angav är under 100 (mellan 1-99)."); } else if (number >= 101) { System.out.println("Talet som Du angav är över 100."); } else if (number == 100) { System.out.println("Talet som Du angav är 100."); } else if (number == 0) { showMessageDialog(null, "Du matade in siffran '0', då avslutas nu numreringssekvensen."); } indata = showInputDialog("Skriv in ett heltal: "); } int antal = Integer.parseInt(indata); int summa = Integer.parseInt(indata); int medelvärdet = antal / summa; if (summa <= 99) { System.out.println("Medelvärdet på tal under 100 är: " + medelvärdet); } else if (summa >= 101) { System.out.println("Medelvärdet på tal över 100 är: " + medelvärdet); } else if (summa == 100) { System.out.println("Medelvärdet på dessa tal är 100, men antal gånger som det har matats in är: " + antal); } } }

Det som händer i min nuvarande kod är att den slutar inte loopa utan jag får tvångsavsluta loopen (med krysset nere i högra hörnet).
Vad är det för fel i min kod? Några tips?

/Nybörjare i kodning.

Knåpade lite med din kod. Gjorde lite ändringar men försökte behålla så mycket som möjligt av din struktur. Så här ser den ut:

import static javax.swing.JOptionPane.showInputDialog; import static javax.swing.JOptionPane.showMessageDialog; public class MatheSweclockers { public static void main(String[] args) { String inData = null; int inNumber = 0; int total = 0; int count = 0; int infinite = 555; do { inData = showInputDialog("Skriv in ett heltal: "); inNumber = Integer.parseInt(inData); if (inNumber > 0 && inNumber < 100) { System.out.println("Talet som Du angav är under 100 (mellan 1-99)."); total += inNumber; count++; } else if (inNumber >= 101) { System.out.println("Talet som Du angav är över 100."); total += inNumber; count++; } else if (inNumber == 100) { System.out.println("Talet som Du angav är 100."); total += inNumber; count++; } else { showMessageDialog(null, "Du matade in siffran '0', då avslutas nu numreringssekvensen."); break; } } while (infinite == 555); System.out.println("Medelvärdet av " + total + " delat på " + count + " är " + (total/count) + "!"); /******************************************************* int antal = Integer.parseInt(indata); int summa = Integer.parseInt(indata); int medelvärdet = antal / summa; if (summa <= 99) { System.out.println("Medelvärdet på tal under 100 är: " + medelvärdet); } else if (summa >= 101) { System.out.println("Medelvärdet på tal över 100 är: " + medelvärdet); } else if (summa == 100) { System.out.println("Medelvärdet på dessa tal är 100, men antal gånger som det har matats in är: " + antal); } *****************************************************************/ } }

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av Dr Phillan:

Okej, jag tror att jag förstår vad ni menar, men hur ger jag number ett nytt värde?
Det går ju inte att lägga in "int number = Integer.parseInt(indata);" där igen (eftersom att den redan är definierad). Jag verkar inte kunna skriva "number" som det är då det är "illegal start of expression", då förstår jag inte hur jag ska kunna ändra värdet.

Det ska fungera med "number = Integer.parseInt(indata);" gör det inte det så finns det något annat fel i närheten.

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Apr 2016
Skrivet av gaminggirl:

Det ska fungera med "number = Integer.parseInt(indata);" gör det inte det så finns det något annat fel i närheten.

Om jag gör så och skriver in ett nummer så händer inget efter att jag har skrivit in ett tal, den bara står och arbetar men inget dyker upp på skärmen. (Jag lade det efter
indata = showInputDialog("Skriv in ett heltal: ");
number = Integer.parseInt(indata);
-delen).

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av Dr Phillan:

Om jag gör så och skriver in ett nummer så händer inget efter att jag har skrivit in ett tal, den bara står och arbetar men inget dyker upp på skärmen. (Jag lade det efter
indata = showInputDialog("Skriv in ett heltal: ");
number = Integer.parseInt(indata);
-delen).

Vad använder du för program att skriva koden i? Tänkte om det går att göra en debug av koden och försöka räkna ut var det går fel...

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Apr 2016
Skrivet av gaminggirl:

Vad använder du för program att skriva koden i? Tänkte om det går att göra en debug av koden och försöka räkna ut var det går fel...

Jag använder NetBeans IDE 8.1 och arbetar i.
När jag debuggar så står det:
"Talet som Du angav är under 100 (mellan 1-99).
Talet som Du angav är 100.
Exception in thread "main" java.lang.ArithmeticException: / by zero
at uppgift_3.NewClass.main(NewClass.java:43)
C:\Users\Felicia\AppData\Local\NetBeans\Cache\8.1\executor-snippets\debug.xml:83: Java returned: 1
BUILD FAILED (total time: 38 seconds)"

och

"Listening on javadebug
User program running
Debugger stopped on uncompilable source code.
User program finished" <-- Debugger console.

Trädvy Permalänk
Medlem
Plats
Vällingby
Registrerad
Sep 2006
Skrivet av Dr Phillan:

Jag använder NetBeans IDE 8.1 och arbetar i.
När jag debuggar så står det:
"Talet som Du angav är under 100 (mellan 1-99).
Talet som Du angav är 100.
Exception in thread "main" java.lang.ArithmeticException: / by zero
at uppgift_3.NewClass.main(NewClass.java:43)
C:\Users\Felicia\AppData\Local\NetBeans\Cache\8.1\executor-snippets\debug.xml:83: Java returned: 1
BUILD FAILED (total time: 38 seconds)"

och

"Listening on javadebug
User program running
Debugger stopped on uncompilable source code.
User program finished" <-- Debugger console.

Felet du får här beror på att du matat in 0 och utför en division med 0, vilket inte är möjligt (rent matematiskt).

int antal = Integer.parseInt(indata);
int summa = Integer.parseInt(indata);
int medelvärdet = antal / summa;

Du dividerar med samma tal vilket inte verkar rätt och när det är noll smäller det.

Intel i7 920 | Asus P6T | OCZ Gold 1600MHz 6Gb | Asus GTX 560 Ti | Antec 300

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Apr 2016
Skrivet av Swekorven:

Felet du får här beror på att du matat in 0 och utför en division med 0, vilket inte är möjligt (rent matematiskt).

int antal = Integer.parseInt(indata);
int summa = Integer.parseInt(indata);
int medelvärdet = antal / summa;

Du dividerar med samma tal vilket inte verkar rätt och när det är noll smäller det.

Jahaa! Gud så dum jag känner mig, nu förstår jag!

Hur får jag programmet att räkna med hur många gånger som någon matar in något?

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av Dr Phillan:

Jahaa! Gud så dum jag känner mig, nu förstår jag!

Hur får jag programmet att räkna med hur många gånger som någon matar in något?

summaÖver100 och summaUnder100 antar jag ska innehålla summan av de tal du matat in som är över respektive under 100? I så fall måste du addera talen du matar in till dem när du räknat ut att atlet är över eller under 100. Nästa du måste göra är att ha tal som kommer ihåg hur många gånger du hittat ett tal över eller under 100 och öka den med ett varje gång du hittar ett. Så för varje tal du matar in så kontrollera om det är över eller under 100, gör lämpliga beräkningar på det och sedan gå vidare till nästa tal.

Du ska nog allmänt fundera här nere också vad det är du vill göra och vad det egentligen är du gör. Vad är ett medelvärde t.ex. och är det det du beräknar? Vad vill du göra med dina if-satser och är det det de gör? Tänk även på att om du går in i en if kommer du aldrig gå in i en tillhörande else if därifrån, är det det du vill?

int antal = Integer.parseInt(indata); int summa = Integer.parseInt(indata); int medelvärdet = antal / summa; if (summa <= 99) { System.out.println("Medelvärdet på tal under 100 är: " + medelvärdet); } else if (summa >= 101) { System.out.println("Medelvärdet på tal över 100 är: " + medelvärdet); } else if (summa == 100) { System.out.println("Medelvärdet på dessa tal är 100, men antal gånger som det har matats in är: " + antal); }

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Apr 2016

Okej, jag förstår.
Kan man inte göra såhär då?

if (summaUnderHundra <= 99) { System.out.println("Medelvärdet på tal under 100 är: " + summaUnderHundra / number); } else if (summaÖverHundra >= 101) { System.out.println("Medelvärdet på tal över 100 är: " + summaÖverHundra / number); } else if (exaktHundra == 100) { System.out.println("Medelvärdet på dessa tal är 100, men antal gånger som det har matats in är: " + number); }

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av Dr Phillan:

Okej, jag förstår.
Kan man inte göra såhär då?

if (summaUnderHundra <= 99) { System.out.println("Medelvärdet på tal under 100 är: " + summaUnderHundra / number); } else if (summaÖverHundra >= 101) { System.out.println("Medelvärdet på tal över 100 är: " + summaÖverHundra / number); } else if (exaktHundra == 100) { System.out.println("Medelvärdet på dessa tal är 100, men antal gånger som det har matats in är: " + number); }

Nu ser det bara konstigt ut. En summa under hundra är garanterat mindre eller lika med 99, så if-blocket ser helt meningslöst ut. Samma för de andra satserna.

Antar att din tanke egentligen var något annat?

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av Dr Phillan:

Okej, jag förstår.
Kan man inte göra såhär då?

if (summaUnderHundra <= 99) { System.out.println("Medelvärdet på tal under 100 är: " + summaUnderHundra / number); } else if (summaÖverHundra >= 101) { System.out.println("Medelvärdet på tal över 100 är: " + summaÖverHundra / number); } else if (exaktHundra == 100) { System.out.println("Medelvärdet på dessa tal är 100, men antal gånger som det har matats in är: " + number); }

Är det inte så att du vill göra allt det där varje gång? I så fall är det ju bara att göra det utan if, eller om du bara vill göra var och en om de inte är 0 så kör if på varje i stället för else if.

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Apr 2016
Skrivet av Teknocide:

Nu ser det bara konstigt ut. En summa under hundra är garanterat mindre eller lika med 99, så if-blocket ser helt meningslöst ut. Samma för de andra satserna.

Antar att din tanke egentligen var något annat?

Min tanke var att den ska visa hur många gånger som någon har matat in nummer under, över och exakt hundra och sedan få ut medelvärdet på dessa (förutom på 100 då det är 100).

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Apr 2016
Skrivet av gaminggirl:

Är det inte så att du vill göra allt det där varje gång? I så fall är det ju bara att göra det utan if, eller om du bara vill göra var och en om de inte är 0 så kör if på varje i stället för else if.

Jag har ändrat till if varje gång, för det stämmer som du säger.

Men det står att den delar med 0 nu och så får jag error igen. Första delen fungerar men när jag skriver in '0' nu så får jag error.

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av Dr Phillan:

Jag har ändrat till if varje gång, för det stämmer som du säger.

Men det står att den delar med 0 nu och så får jag error igen. Första delen fungerar men när jag skriver in '0' nu så får jag error.

Vad är number, hur beräknas den och är den verkligen samma för både tal över och under 100?

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Apr 2016
Skrivet av gaminggirl:

Vad är number, hur beräknas den och är den verkligen samma för både tal över och under 100?

Jag trodde att man kunde göra så och den förstod att det var från en annan del av koden jag tog det ifrån men det kanske inte fungerar så...
Tänkte att jag delade med numret de skrev in + antalet gångerna de skrev in något så skulle jag få medelvärdet..

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Okt 2011
Skrivet av Dr Phillan:

Jag trodde att man kunde göra så och den förstod att det var från en annan del av koden jag tog det ifrån men det kanske inte fungerar så...
Tänkte att jag delade med numret de skrev in + antalet gångerna de skrev in något så skulle jag få medelvärdet..

Fast medelvärdet är ju inte det totala antalet gånger de skrev in något, det är ju antalet tal som ingår i den kategorin. Som du skrivit nu så om de skrivit in 101 102 103 99 5 1687 så kommer den dela alla med 6 inte med 4 (antal tal större än 100) respektive 2 (antal tal mindre än 100). Du kan anropa number på det vis du sa, bara undrade vad det var eftersom jag inte kunde hitta det i din tidigare kod och det är det som är 0 i dina if-satser om du får division med 0. Jag tror ditt problem just nu är att du behöver stanna upp och tänka efter först vad det är du behöver och vill göra innan du börjar försöka koda det. Hur hade du gjort samma sak om du fick en rad tal och skulle göra tre medelvärden med dem som du försöker med kod nu.

Corsair Vengeance LPX 2x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Trädvy Permalänk
Medlem
Registrerad
Okt 2015
Skrivet av Dr Phillan:

Okej, jag tror att jag förstår vad ni menar, men hur ger jag number ett nytt värde?
Det går ju inte att lägga in "int number = Integer.parseInt(indata);" där igen (eftersom att den redan är definierad). Jag verkar inte kunna skriva "number" som det är då det är "illegal start of expression", då förstår jag inte hur jag ska kunna ändra värdet.

Ett ypperligt tillfälle att läsa om skilladen på do while och while.

do { System.out.prinln("Nummer: " + num; } while(num > 0);

do körs ALLTID en gång. Först hoppar den in, kör allt i loopen, om num är över noll, hoppa tillbaka till do o ch kör igenom en gång till.

while(num > 0) { System.out.println("Nummer: " + num; }

while kommer bara köras om kravet uppfylls.
Här får du sätta num till 20 och sen ställa frågan när du kommit in i loopen.

Medans i do while så kommer den alltid gå in och fråga första, för det finns inget krav i början på vad num ska vara.