uträkningar [Hjälp med java-programmering, error om inte alla textfält är ifyllda /mod]

Permalänk
Medlem

uträkningar [Hjälp med java-programmering, error om inte alla textfält är ifyllda /mod]

Hej

Här kommer en fråga som är lite krånglig att formulera så jag klistrar bara in en bit av koden jag håller på med.
Låt oss säga att jag läser in tal med följande kod och printar ut uträkningarna med dessa tal enligt följande:

double tal1=Integer.parseInt(jTextField1.getText()); double tal2=Integer.parseInt(jTextField2.getText()); double tal3=Integer.parseInt(jTextField3.getText()); double procent=Integer.parseInt(jTextField4.getText()); double nytal1, nytal2, nytal3, procent1; jTextArea1.append("" + df.format(exkl1)); jTextArea2.append("" + df.format(inkl1)); jTextArea3.append("" + df.format(moms1)); jTextArea4.append("" + df.format(procent1));

Detta fungerar för mig men om jag bara vill att användaren ska fylla i två av talen och programmet ska göra uträkningar från dessa. Hur går jag tillväga för det blir error om jag inte fyller i alla textfält?

Hoppas ni förstår frågan och ber ödmjukast om vägledning då jag är nybörjare

Förtydligad rubrik
Permalänk
Medlem

Bara släng in en if-sats. Är rutan tom så kommer getText() endast returnera en tom String ("")
Du kommer fortfarande få exceptions om användaren matar in bokstäver eller tal som inte är Integers. Men eftersom du antagligen gör detta i utbildningssyfte atgår jag ifrån att användaren inte gör sådana misstag?

double tal1; if(!jTextField1.getText().equals(""){ tal1 = Integer.parseInt(jTextField1.getText()); }

Permalänk
Medlem
Skrivet av jakkra:

Bara släng in en if-sats. Är rutan tom så kommer getText() endast returnera en tom String ("")
Du kommer fortfarande få exceptions om användaren matar in bokstäver eller tal som inte är Integers. Men eftersom du antagligen gör detta i utbildningssyfte atgår jag ifrån att användaren inte gör sådana misstag?

double tal1; if(!jTextField1.getText().equals(""){ tal1 = Integer.parseInt(jTextField1.getText()); }

Tack. Det är ett moms-uträkningsprogram jag gör till mig själv. Att få undan dessa exceptions blir nog ett senare problem
Ska prova o se hur jag kan få det till att fungera

Permalänk
Medlem

Nu försöker jag få det rätt, har provat med dessa koder och på olika ställen men som nybörjare förstår jag ju ingenting...får inga felmeddelande men måste ändå fylla i alla fyra fält, fast nu gör den inga av uträkningarna utan bara printar samma nr till textarean

DecimalFormat df = new DecimalFormat("#0.00"); double exkl=Integer.parseInt(jTextField1.getText()); double inkl=Integer.parseInt(jTextField2.getText()); double moms=Integer.parseInt(jTextField3.getText()); double procent=Integer.parseInt(jTextField4.getText()); jTextArea1.setText(null); jTextArea2.setText(null); jTextArea3.setText(null); jTextArea4.setText(null); double exkl1, inkl1, moms1, procent1; exkl1 = (inkl-moms); inkl1 = (exkl+moms); moms1 = (inkl-exkl); procent1 = procent; if(!jTextField1.getText().equals("")){ exkl1 = Integer.parseInt(jTextField1.getText());} if(!jTextField2.getText().equals("")){ inkl1 = Integer.parseInt(jTextField2.getText());} if(!jTextField3.getText().equals("")){ moms1 = Integer.parseInt(jTextField3.getText());} if(!jTextField4.getText().equals("")){ procent1 = Integer.parseInt(jTextField4.getText());} jTextArea1.append("" + df.format(exkl1)); jTextArea2.append("" + df.format(inkl1)); jTextArea3.append("" + df.format(moms1)); jTextArea4.append("" + df.format(procent1));

Kör jag if satserna ovanför uträkningarna kör den uträkningarna men måste ändå fylla i alla rutor

Permalänk
Hedersmedlem

*Rubrik ändrad*

Tänk på att en beskrivande rubrik ger bättre svar, det går bra att ändra i efterhand (om du nu är missnöjd med min)
/moderator

Visa signatur

Danskjävel så krattar som en skrivare...

Permalänk
Medlem
Skrivet av Kent:

*Rubrik ändrad*

Tänk på att en beskrivande rubrik ger bättre svar, det går bra att ändra i efterhand (om du nu är missnöjd med min)
/moderator

Tack för hjälpen, visste inte riktigt hur jag skulle formulera mig.

Permalänk
Medlem
Skrivet av ttjgbg:

Tack för hjälpen, visste inte riktigt hur jag skulle formulera mig.

för att slippa problem att programmet crashar använd

try { // det du försöker göra } catch (Exception e) { // ditt felmedelande }

Du kan ha ett meddelande e variabeln kommer innehålla felet som du sedan kan använda metoder att få ut ett fint error i consol. Fördelen med detta är att programmet inte kommer crasha om du har parsningen i try.

Ett tag sen jag parsade strängar men Integer.parseint kommer den inte bara få in heltal eller får den också decimaltal?

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.

Permalänk
Medlem

Funderingar

Jag får det fortfarande inte till att fungera. Själva tanken är att jag har dessa textfält som skall fyllas i och
sen använder jag jButton1ActionPerformed för att den ska köra uträkningar. Men hur ska jag få den till att
förstå att det räcker om två fält är ifyllda?

Alltså jag ska kunna klicka på knappen jButton1ActionPerformed och få med någon slags kod att
ignonera att jag inte fyllt i alla fyra fält.

Jag hade funderingar att skapa en array i vilken värdena sparas och sätta de ifyllda fälten till true och
arbeta därifrån, tyvärr så vet jag inte hur man gör det.

Nu ska jag åka o jobba o sen fortsätta klura. Har ni några ideer, andra lösningar är det mycket välkommet.
Riktigt skoj att bolla med java tankar

Permalänk
Medlem
Skrivet av Commander:

för att slippa problem att programmet crashar använd

try { // det du försöker göra } catch (Exception e) { // ditt felmedelande }

Du kan ha ett meddelande e variabeln kommer innehålla felet som du sedan kan använda metoder att få ut ett fint error i consol. Fördelen med detta är att programmet inte kommer crasha om du har parsningen i try.

Ett tag sen jag parsade strängar men Integer.parseint kommer den inte bara få in heltal eller får den också decimaltal?

Man kan få in decimal tal med parsning när man anropar DecimalFormat.
Ska läsa på lite om try o försöka få till det med det...blir efter jobbet idag

Permalänk
Avstängd

Du är ju inne på rätt väg med If-satserna, men det går att lösa på andra sätt också. Exempelvis kan du initiera alla variablar till 0, då spelar det ingen roll om de är ifyllda eller ej för de kommer ändå att ha ett värde. Det fungerar förstås inte om du ska dela med någon variabel eller så, men det ska du väl inte i detta program i alla fall.

Permalänk
Medlem
Skrivet av snajk:

Du är ju inne på rätt väg med If-satserna, men det går att lösa på andra sätt också. Exempelvis kan du initiera alla variablar till 0, då spelar det ingen roll om de är ifyllda eller ej för de kommer ändå att ha ett värde. Det fungerar förstås inte om du ska dela med någon variabel eller så, men det ska du väl inte i detta program i alla fall.

Körde denna kod men den räknar allt till 0 bara och fungerar fortfarande inte om jag inte fyllt i alla fält. Vet inte alls hur man löser det med kod.

double exkl=Integer.parseInt(jTextField1.getText()); double inkl=Integer.parseInt(jTextField2.getText()); double moms=Integer.parseInt(jTextField3.getText()); double procent=Integer.parseInt(jTextField4.getText()); if(!jTextField1.getText().equals("")){ exkl =0;} if(!jTextField2.getText().equals("")){ inkl=0;} if(!jTextField3.getText().equals("")){ moms=0;} if(!jTextField4.getText().equals("")){ procent=0;}

Permalänk
Hedersmedlem

Har inte Java någon TryParse?

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av giplet:

Har inte Java någon TryParse?

Try finns men betydligt smidigare och enklare med if:s i dte här fallet.

Visa signatur

ASUS ROG Strix B650E-F Gaming WIFI | 2 TB Kingston Fury M.2 NVMe SSD | 32 GB Kingston DDR5 | Rysen 7 7800x3D | ASUS GeForce RTX 4070 12 GB | Fractal Design North

Permalänk
Keeper of Traditions

Lägg upp hela koden på pastebin så är det lättare att felsöka ifall du gjort fel någon annanstans i koden.

Visa signatur

|| AMD Ryzen 9800X3D || Asus RTX 4070 TI Super TUF || Samsung 990 PRO 4TB || Kingston Fury CL30 64GB || Corsair RM 850x || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 ||

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

Permalänk
Keeper of Traditions
Skrivet av ttjgbg:

Körde denna kod men den räknar allt till 0 bara och fungerar fortfarande inte om jag inte fyllt i alla fält. Vet inte alls hur man löser det med kod.

double exkl=Integer.parseInt(jTextField1.getText()); double inkl=Integer.parseInt(jTextField2.getText()); double moms=Integer.parseInt(jTextField3.getText()); double procent=Integer.parseInt(jTextField4.getText()); if(!jTextField1.getText().equals("")){ exkl =0;} if(!jTextField2.getText().equals("")){ inkl=0;} if(!jTextField3.getText().equals("")){ moms=0;} if(!jTextField4.getText().equals("")){ procent=0;}

Dina if-satser kollar om textfälten är ifyllda. Om de har något värde så ändras det till 0. Om de är tomma görs inget.

Jag gissar på att det är tvärtom du vill göra, så du ska nog ta bort utropstecken?

Visa signatur

|| AMD Ryzen 9800X3D || Asus RTX 4070 TI Super TUF || Samsung 990 PRO 4TB || Kingston Fury CL30 64GB || Corsair RM 850x || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 ||

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

Permalänk
Hedersmedlem
Skrivet av Dakkie:

Try finns men betydligt smidigare och enklare med if:s i dte här fallet.

Det blir alltid betydligt svårare med if. Vad händer om användaren skriver in "A" i rutan? Får man indata från en människa eller annan osäker källa så ska man alltid använda tryparse eller liknande funktioner som returnerar true/false på om konverteringen lyckades samt eventuellt värde i en variabel.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Avstängd
Skrivet av Dunder:

Dina if-satser kollar om textfälten är ifyllda. Om de har något värde så ändras det till 0. Om de är tomma görs inget.

Jag gissar på att det är tvärtom du vill göra, så du ska nog ta bort utropstecken?

Precis.

Permalänk
Medlem
Skrivet av Dunder:

Lägg upp hela koden på pastebin så är det lättare att felsöka ifall du gjort fel någon annanstans i koden.

Jag har bara börjat men fastnade direkt, koden saknar fler uträkningar osv men jag har hakat upp mig på att jag måste fylla i alla fält. När jag
gör mina uträkningar ska det räcka med två variabler för att kunna fylla ut de 4 textareor.

Jag har en main class som anropar denna, kan det ha med det att göra??

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { double nummer[]= new double[4]; DecimalFormat df = new DecimalFormat("#0.00"); double exkl=Integer.parseInt(jTextField1.getText()); double inkl=Integer.parseInt(jTextField2.getText()); double moms=Integer.parseInt(jTextField3.getText()); double procent=Integer.parseInt(jTextField4.getText()); if(jTextField1.getText().equals("")){ exkl =0;} if(jTextField2.getText().equals("")){ inkl=0;} if(jTextField3.getText().equals("")){ moms=0;} if(jTextField4.getText().equals("")){ procent=0;} jTextArea1.setText(null); jTextArea2.setText(null); jTextArea3.setText(null); jTextArea4.setText(null); double exkl1, inkl1, moms1, procent1; exkl1 = (inkl-moms); inkl1 = (exkl+moms); moms1 = (inkl-exkl); procent1 = procent; jTextArea1.append("" + df.format(exkl1)); jTextArea2.append("" + df.format(inkl1)); jTextArea3.append("" + df.format(moms1)); jTextArea4.append("" + df.format(procent1));

Permalänk
Keeper of Traditions
Skrivet av ttjgbg:

Jag har bara börjat men fastnade direkt, koden saknar fler uträkningar osv men jag har hakat upp mig på att jag måste fylla i alla fält. När jag
gör mina uträkningar ska det räcka med två variabler för att kunna fylla ut de 4 textareor.

Jag har en main class som anropar denna, kan det ha med det att göra??

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { double nummer[]= new double[4]; DecimalFormat df = new DecimalFormat("#0.00"); double exkl=Integer.parseInt(jTextField1.getText()); double inkl=Integer.parseInt(jTextField2.getText()); double moms=Integer.parseInt(jTextField3.getText()); double procent=Integer.parseInt(jTextField4.getText()); if(jTextField1.getText().equals("")){ exkl =0;} if(jTextField2.getText().equals("")){ inkl=0;} if(jTextField3.getText().equals("")){ moms=0;} if(jTextField4.getText().equals("")){ procent=0;} jTextArea1.setText(null); jTextArea2.setText(null); jTextArea3.setText(null); jTextArea4.setText(null); double exkl1, inkl1, moms1, procent1; exkl1 = (inkl-moms); inkl1 = (exkl+moms); moms1 = (inkl-exkl); procent1 = procent; jTextArea1.append("" + df.format(exkl1)); jTextArea2.append("" + df.format(inkl1)); jTextArea3.append("" + df.format(moms1)); jTextArea4.append("" + df.format(procent1));

Som sagt, pastebin så blir det lättare att följa istället för långa inlägg här.

Vad är det för fel du får? Är det errors eller gör den bara inte det du vill att den ska göra?

Om det är errors som har med null-värden att göra, pröva att instansiera dina variabler till 0 och flytta dina ParseInt-satser till efter if-satserna.

Visa signatur

|| AMD Ryzen 9800X3D || Asus RTX 4070 TI Super TUF || Samsung 990 PRO 4TB || Kingston Fury CL30 64GB || Corsair RM 850x || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 ||

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

Permalänk
Medlem
Skrivet av giplet:

Det blir alltid betydligt svårare med if. Vad händer om användaren skriver in "A" i rutan? Får man indata från en människa eller annan osäker källa så ska man alltid använda tryparse eller liknande funktioner som returnerar true/false på om konverteringen lyckades samt eventuellt värde i en variabel.

Ja, det stämmer. Dock är detta på en såpass enkel nivå så jag tror inte det fallet är medräknat i designen, så det spelar ingen roll. Ifall man ska räkna med det fallet, givetvis är en trysats att föredra.

Visa signatur

ASUS ROG Strix B650E-F Gaming WIFI | 2 TB Kingston Fury M.2 NVMe SSD | 32 GB Kingston DDR5 | Rysen 7 7800x3D | ASUS GeForce RTX 4070 12 GB | Fractal Design North

Permalänk
Medlem

Det är faktiskt inte supertrivialt att hantera dessa fyra textfält och beräkna vissa av dem beroende på vad användare matar in. Vilka fält skall värderas högst om fler än två fält har data? Man kan om tre (eller alla fyra) är inmatade ha konflikter som måste lösas upp.

Exempel på konflikt:
Användare mater in tre saker;
"inkl. moms"=100, "exkl.moms"="80", "moms"=40
Om man kikar på "inkl moms" och "exkl moms" skall övriga fält bli
"moms"=20, "procent"=25
men om man istället tittar på "exkl moms" och "moms" skall
"inkl. moms"=120, "procent"=50
Detta går helt enkelt inte ihop och något värde måste ignoreras för att allt skall gå att räkna ut.

För att det skall kännas rätt när man matar in saker behöver man även ändra på denna prioritet beroende på var användaren matar in data. Man kan t.ex. anta att användaren värderar det som matats in senast högst.

Slängde ihop ett litet exempel: http://pastebin.com/fngXe6xq

Visa signatur

Game 9800X3D|9070XT Workstation 5950X|7900XTX Vardagsrum 3900X|6900XT
VR Crystal Light|Quest 3|Pico 4|PSVR2|Reverb G2|Oculus Quest|Samsung Odyssey+

Permalänk
Medlem
Skrivet av eMannen:

Det är faktiskt inte supertrivialt att hantera dessa fyra textfält och beräkna vissa av dem beroende på vad användare matar in. Vilka fält skall värderas högst om fler än två fält har data? Man kan om tre (eller alla fyra) är inmatade ha konflikter som måste lösas upp.

Exempel på konflikt:
Användare mater in tre saker;
"inkl. moms"=100, "exkl.moms"="80", "moms"=40
Om man kikar på "inkl moms" och "exkl moms" skall övriga fält bli
"moms"=20, "procent"=25
men om man istället tittar på "exkl moms" och "moms" skall
"inkl. moms"=120, "procent"=50
Detta går helt enkelt inte ihop och något värde måste ignoreras för att allt skall gå att räkna ut.

För att det skall kännas rätt när man matar in saker behöver man även ändra på denna prioritet beroende på var användaren matar in data. Man kan t.ex. anta att användaren värderar det som matats in senast högst.

Slängde ihop ett litet exempel: http://pastebin.com/fngXe6xq

Slängde ihop ett litet exempel...sådär bara Jag måste säga att jag är verkligen nybörjare på detta

Permalänk
Medlem
Skrivet av eMannen:

Det är faktiskt inte supertrivialt att hantera dessa fyra textfält och beräkna vissa av dem beroende på vad användare matar in. Vilka fält skall värderas högst om fler än två fält har data? Man kan om tre (eller alla fyra) är inmatade ha konflikter som måste lösas upp.

Exempel på konflikt:
Användare mater in tre saker;
"inkl. moms"=100, "exkl.moms"="80", "moms"=40
Om man kikar på "inkl moms" och "exkl moms" skall övriga fält bli
"moms"=20, "procent"=25
men om man istället tittar på "exkl moms" och "moms" skall
"inkl. moms"=120, "procent"=50
Detta går helt enkelt inte ihop och något värde måste ignoreras för att allt skall gå att räkna ut.

För att det skall kännas rätt när man matar in saker behöver man även ändra på denna prioritet beroende på var användaren matar in data. Man kan t.ex. anta att användaren värderar det som matats in senast högst.

Slängde ihop ett litet exempel: http://pastebin.com/fngXe6xq

Nu är ju jag inte så bra att programmera ännu men gillar att tänka i dessa banor. Skulle man inte kunna lösa uträkningarna på det sätt
att när användaren fyllt i två av fälten så lyser eller blinkar jButton att den är redo för att göra uträkningar? Går det med Action listener?

Räknaren som jag vill programmera finns i länken nedanför. Såg att även den har sina brister, dvs den kan inte göra uträkningarna om man fyllt i olika i fälten så det inte går ihop.

http://www.laskurit.fi/alv/

Jag vill bara försökt få kodat den själv med Java