Nybörjare behöver hjälp med Javaproblem!

Permalänk
Keeper of Traditions

Varför vill du att man ska kunna välja mellan ett bestämt eller obestämt antal nummer?

Jag ser ingen poäng med att inte bara låta användaren fylla i nummer tills den är nöjd och sen beräkna medelvärdet?
Det låter som att det är det som är själva uppgiften (den svårare).

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
Medlem
Skrivet av Dunder:

Varför vill du att man ska kunna välja mellan ett bestämt eller obestämt antal nummer?

Jag ser ingen poäng med att inte bara låta användaren fylla i nummer tills den är nöjd och sen beräkna medelvärdet?
Det låter som att det är det som är själva uppgiften (den svårare).

Jag vill passa på att be om ursäkt å alla besökares vägnar för min dumhet.
Efter att jag läste ditt inlägg insåg jag till slut att jag inte alls är en relativt intelligent ung man som jag trodde att jag var.
Jag missförstod helt enkelt hela alltet.

Jag förstår nu vad du menar och det blev helt plötsligt mycket enklare och alla frågetecken försvann.

Det jag funderar på nu är helt enkelt:

import javax.swing.*; public class Medelvärde { public static void main(String[] args) { int sifferSumma = 0; String indata = JOptionPane.showInputDialog("Ange ett heltal"); while (indata != null) { //Trycker användare cancel så avbryts programmet, om inte indata = JOptionPane.showInputDialog("Ange ett heltal"); //Fortsätter vi här sifferSumma += Integer.parseInt(indata); /* Vad jag grejar med är att försöka lista hur man ska kunna räkna hur många gånger det loopar * Jag vill fixa en int som kopplas till indata som jag senare kan dividera med summan men * på något sätt blir det alltid en sträng som inte vill divideras med int. * */ } } }

Permalänk
Keeper of Traditions
Skrivet av kalleftw:

Det jag funderar på nu är helt enkelt:

import javax.swing.*; public class Medelvärde { public static void main(String[] args) { int sifferSumma = 0; String indata = JOptionPane.showInputDialog("Ange ett heltal"); while (indata != null) { //Trycker användare cancel så avbryts programmet, om inte indata = JOptionPane.showInputDialog("Ange ett heltal"); //Fortsätter vi här sifferSumma += Integer.parseInt(indata); } } }

Lägg bara till en räknare som du dividerar med sen. Man behöver inte göra det mer komplicerat än det är

public class Medelvärde { public static void main(String[] args) { int sifferSumma = 0, counter = 0; String indata = JOptionPane.showInputDialog("Ange ett heltal"); while (indata != null) { indata = JOptionPane.showInputDialog("Ange ett heltal"); //Fortsätter vi här sifferSumma += Integer.parseInt(indata); counter++; } } }

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
Medlem
Skrivet av kalleftw:

Det jag funderar på nu är helt enkelt

Det borde du ha listat ut väldigt enkelt, allt du behöver göra är att ha en variabel av typen int utanför loopen (kalla den för loopCounter eller något) satt till noll när programmet startar. I loopen lägger du sedan på 1 till loopCounter. När användaren tryckt på cancel och därmed hoppat ut ur loopen tar du bara och dividerar sifferSumma med loopCounter.

Som jag sagt tidigare så känns det som att det som till stor del hindrar dig i din programmering är det tankemässiga. Det implementationsmässiga är ju precis som i det här fallet inget svårt alls, skapa variabler och öka dess värde kan du ju som sagt redan

Visa signatur

Citera för svar!

Stationär: Fractal Design Define R6 | Asus Z370-P | Intel i7 8700k @ 3.7 Ghz | Corsair Vengeance LPX 32GB CL15 @ 3000 Mhz | Asus STRIX GTX960 4GB | Fractal Design Celsius S24 | 5 TB HDD | 250GB SSD (Samsung 850 EVO), 128GB SSD (Crucial M4) | Corsair HX 850W | W10
Bärbar: Sony Vaio Pro 13.3" | i7-4500U | 8GB RAM | 256GB SSD | Ubuntu

Permalänk
Medlem
Skrivet av Dunder:

Lägg bara till en räknare som du dividerar med sen. Man behöver inte göra det mer komplicerat än det är

public class Medelvärde { public static void main(String[] args) { int sifferSumma = 0, counter = 0; String indata = JOptionPane.showInputDialog("Ange ett heltal"); while (indata != null) { indata = JOptionPane.showInputDialog("Ange ett heltal"); //Fortsätter vi här sifferSumma += Integer.parseInt(indata); counter++; } } }

Skrivet av RedRetro:

Det borde du ha listat ut väldigt enkelt, allt du behöver göra är att ha en variabel av typen int utanför loopen (kalla den för loopCounter eller något) satt till noll när programmet startar. I loopen lägger du sedan på 1 till loopCounter. När användaren tryckt på cancel och därmed hoppat ut ur loopen tar du bara och dividerar sifferSumma med loopCounter.

Som jag sagt tidigare så känns det som att det som till stor del hindrar dig i din programmering är det tankemässiga. Det implementationsmässiga är ju precis som i det här fallet inget svårt alls, skapa variabler och öka dess värde kan du ju som sagt redan

Helt galet så schyssta ni är!

RedRetro, jo, du är rätt att det är i den analytiska delen det går snett för mig. Jag tror att jag gör det mer komplicerat än vad det behöver vara.

Nu loopar det som det ska, fast det gör mig

Exception in thread "main" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at Medelvärde.main(Medelvärde.java:12)

när jag trycker cancel men det är förmodligen inte vidare svårt att lösa en dag när jag är utvilad.

Jag tackar ödmjukast för hjälpen!

Permalänk
Keeper of Traditions
Skrivet av kalleftw:

Helt galet så schyssta ni är!

RedRetro, jo, du är rätt att det är i den analytiska delen det går snett för mig. Jag tror att jag gör det mer komplicerat än vad det behöver vara.

Nu loopar det som det ska, fast det gör mig

Exception in thread "main" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at Medelvärde.main(Medelvärde.java:12)

när jag trycker cancel men det är förmodligen inte vidare svårt att lösa en dag när jag är utvilad.

Jag tackar ödmjukast för hjälpen!

Det låter som att du skickar in null till parseInt-funktionen. Gör en enkel if-sats som kontrollerar att variabeln inte är null innan.

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
Medlem
Skrivet av Dunder:

Det låter som att du skickar in null till parseInt-funktionen. Gör en enkel if-sats som kontrollerar att variabeln inte är null innan.

Hm.

import javax.swing.JOptionPane; public class Medelvärde { public static void main(String[] args) { int sifferSumma = 0, counter = 0; String indata = JOptionPane.showInputDialog("Ange ett heltal"); while (indata != null) { indata = JOptionPane.showInputDialog("Ange ett heltal"); //Fortsätter vi här if (indata != null) sifferSumma += Integer.parseInt(indata); counter++; int medelv = sifferSumma/counter; System.out.println("Medelvärdet är" + medelv); } } }

Nu kan ju indata inte vara null och den skriver ut medelvärdet.
Dessutom räknar det ju fel. Kan du se vart jag har skrivit fel för att förtjäna:

Medelvärdet är 5 Medelvärdet är 5 Medelvärdet är 5 Medelvärdet är 5 Medelvärdet är 4

Här har jag kört 5+5+5+5+5/5
Vi vet ju alla att 25/5 inte är 4, utan fem.
Dock är 20/5 4.

Dessutom skriven den ju ut medelvärdet varje gång, vilken inte ens stämmer.

Så någonstans skippar det ett medelvärde. Jag misstänker att felet ligger någonstans i

int sifferSumma = 0, counter = 0; String indata = JOptionPane.showInputDialog("Ange ett heltal"); while (indata != null)

Eller har jag fel? Det är uppenbarligen ingen ovanlighet.

Permalänk
Keeper of Traditions
Skrivet av kalleftw:

Hm.

import javax.swing.JOptionPane; public class Medelvärde { public static void main(String[] args) { int sifferSumma = 0, counter = 0; String indata = JOptionPane.showInputDialog("Ange ett heltal"); while (indata != null) { indata = JOptionPane.showInputDialog("Ange ett heltal"); //Fortsätter vi här if (indata != null) sifferSumma += Integer.parseInt(indata); counter++; int medelv = sifferSumma/counter; System.out.println("Medelvärdet är" + medelv); } } }

Nu kan ju indata inte vara null och den skriver ut medelvärdet.
Dessutom räknar det ju fel. Kan du se vart jag har skrivit fel för att förtjäna:

Medelvärdet är 5 Medelvärdet är 5 Medelvärdet är 5 Medelvärdet är 5 Medelvärdet är 4

Här har jag kört 5+5+5+5+5/5
Vi vet ju alla att 25/5 inte är 4, utan fem.
Dock är 20/5 4.

Dessutom skriven den ju ut medelvärdet varje gång, vilken inte ens stämmer.

Så någonstans skippar det ett medelvärde. Jag misstänker att felet ligger någonstans i

int sifferSumma = 0, counter = 0; String indata = JOptionPane.showInputDialog("Ange ett heltal"); while (indata != null)

Eller har jag fel? Det är uppenbarligen ingen ovanlighet.

Varför den får 4 vet jag faktiskt inte, säker på att du inte skrev in en siffra fel?
Resten av medelvärdena stämmer väl?

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
Medlem
Skrivet av Dunder:

Varför den får 4 vet jag faktiskt inte, säker på att du inte skrev in en siffra fel?
Resten av medelvärdena stämmer väl?

Resten av medelvärdena stämmer men min tanke är att det kanske bara ska visa medelvärdet när man trycker cancel.
Näe, jag sätter in fem femmor och det "tappas" en femma någonstans i det hela.

Likadant blir det om jag sätter in fyra femmor, då visas

Medelvärdet är 5 Medelvärdet är 5 Medelvärdet är 5 Medelvärdet är 3

Permalänk
Keeper of Traditions
Skrivet av kalleftw:

Resten av medelvärdena stämmer men min tanke är att det kanske bara ska visa medelvärdet när man trycker cancel.
Näe, jag sätter in fem femmor och det "tappas" en femma någonstans i det hela.

Likadant blir det om jag sätter in fyra femmor, då visas

Medelvärdet är 5 Medelvärdet är 5 Medelvärdet är 5 Medelvärdet är 3

Bryt ut uträkningen av medelvärdet från loopen så att den ligger efteråt om du bara vill visa det en gång.

EDIT: Ahh, du skriver över den första femman när du lägger raden

indata = JOptionPane.showInputDialog("Ange ett heltal");

först i while-loopen. Flytta den till sist, istället.

EDIT 2: och som nedanstående sade, flytta in counter++; i if-satsen.

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
Legendarisk
Skrivet av kalleftw:

if (indata != null) sifferSumma += Integer.parseInt(indata); counter++;

Här har jag kört 5+5+5+5+5/5
Vi vet ju alla att 25/5 inte är 4, utan fem.

Räknaren ökas på även om det inte finns något nytt värde.

Visa signatur

Abstractions all the way down.

Permalänk
Medlem
Skrivet av Dunder:

Bryt ut uträkningen av medelvärdet från loopen så att den ligger efteråt om du bara vill visa det en gång.

EDIT: Ahh, du skriver över den första femman när du lägger raden

indata = JOptionPane.showInputDialog("Ange ett heltal");

först i while-loopen. Flytta den till sist, istället.

EDIT 2: och som nedanstående sade, flytta in counter++; i if-satsen.

Skrivet av Tunnelsork:

Räknaren ökas på även om det inte finns något nytt värde.

Damn, där har vi det. Tack för hjälpen!
Speciellt ett stort tack till dig, Dunderklumpen som har orkat med allt!