While-loop slutar inte loopa, programmering i Java

Permalänk

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.

Permalänk

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

Permalänk
Medlem
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.

Visa signatur

CPU: Ryzen 5 1600 GPU: Asus GeForce GTX 1060 6GB DUAL Moderkort: MSI B350M Mortar
RAM: 16GB Corsair Vengeance DDR4 3200MHz PSU: Corsair RM750X
Laptop: ThinkPad T480s, Core i7 8550U, 16GB RAM Mobil: Samsung Galaxy S10

Permalänk
Medlem

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.

Permalänk
Medlem

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: ");

Permalänk
Medlem

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.

Visa signatur

Quad-quad core med kvävekylning och kokvattenreaktor.

Permalänk
Medlem

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

Visa signatur

|AMD Ryzen 9 5900X| |ASUS ROG Strix B550-F| |Crucial Ballistix 32GB CL16@3600MHz| |PNY RTX 4090 XLR8 Gaming| |Samsung 990 Pro 2TB| |Samsung 970 Evo Plus 1TB| |Samsung 860 Evo 1TB| |Corsair RM1000| |Fractal Design Define R5| |LG OLED 48" C2 Evo|

Permalänk
Keeper of Traditions

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?

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || 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.

Permalänk
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 Dunder:

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.

Visa signatur

Corsair Vengeance LPX 4x8GB 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)

Permalänk
Keeper of Traditions
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å

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || 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.

Permalänk

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.

Permalänk
Medlem
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); } *****************************************************************/ } }

Permalänk
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.

Visa signatur

Corsair Vengeance LPX 4x8GB 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)

Permalänk
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).

Permalänk
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...

Visa signatur

Corsair Vengeance LPX 4x8GB 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)

Permalänk
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.

Permalänk
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.

Visa signatur

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

Permalänk
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?

Permalänk
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); }

Visa signatur

Corsair Vengeance LPX 4x8GB 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)

Permalänk

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); }

Permalänk
Medlem
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?

Visa signatur

Kom-pa-TI-bilitet

Permalänk
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.

Visa signatur

Corsair Vengeance LPX 4x8GB 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)

Permalänk
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).

Permalänk
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.

Permalänk
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?

Visa signatur

Corsair Vengeance LPX 4x8GB 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)

Permalänk
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..

Permalänk
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.

Visa signatur

Corsair Vengeance LPX 4x8GB 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)

Permalänk
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.