Permalänk

Try catch java.

Hej!

Jag håller på att lära mig Java. För det mesta så tycker jag att jag har hängt med, men nu har jag stött på patrull.
Med stor sannolikhet så är det något väldigt simpelt fel jag har gjort, men det skulle ändå vara skönt om någon mer rutinerad person med koll på Java kan hjälpa mig att förstå felet. Nedanför så kommer koden som har

package com.company; import javax.swing.*; public class Main { public static void main(String[] args) { int a1 = 0; int g1 = 0; double m1 = 0; int a2 = 0; int g2 = 0; double m2 = 0; int result = 0; boolean fortsätt = true; while (fortsätt) { Object[] options1 = {"Man", "Kvinna"}; JPanel panel = new JPanel(); panel.add(new JLabel("Ange ålder: ")); JTextField textField = new JTextField(10); panel.add(textField); result = JOptionPane.showOptionDialog(null, panel, "Uppgifter", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options1, null); String ålder = textField.getText(); System.out.println(result); try { int age = Integer.parseInt(ålder); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null,"Försök igen"); fortsätt=true; } } if (result == 0) { a1++; g1 = g1 + age; } else if (result == 1){ a2++; g2 = g2 + age; } } }

Tanken är att programmet ska samla in kön och ålder av användaren. När information är insamlad så ska programmet räkna ut medelåldern. Det i sig löste jag i min första version av programmet. Men för att göra koden vattentät så la jag in en en try och catch för att bli av med möjlig NumberFormatException. Catch och try verkar fungera som de ska, vilket i sig är skönt. Men istället så får jag problem med variabeln age. Ålder som skrivs in dialogrutan hamnar i variabeln age, men då jag har lagt in den i catch and try kommer jg inte åt den när jag försöker skriva g1 = g1 + age; respektive g2 = g2 + age;.
Vad kan alternativet vara för att få till del det? Förklara gärna så att en nybörjare förstår då målet faktiskt är att lära mig Java.
Mvh

Permalänk
Medlem

Använd gärna [code] taggar kring koden

Permalänk
Medlem

Variabler lever bara i sitt scope, i en funktion eller mellan {} om de inte är deklarerade globalt.

Om du inte kommer åt age i din try så kan du flytta ut deklareringen av variabeln.

int age = 0; try { age = Integer.parseInt(ålder); } catch(...) { ... } // använd age här om try lyckades...

Permalänk
Medlem
Skrivet av trumanshow:

Hej!

Jag håller på att lära mig Java. För det mesta så tycker jag att jag har hängt med, men nu har jag stött på patrull.
Med stor sannolikhet så är det något väldigt simpelt fel jag har gjort, men det skulle ändå vara skönt om någon mer rutinerad person med koll på Java kan hjälpa mig att förstå felet. Nedanför så kommer koden som har

package com.company; import javax.swing.*; public class Main { public static void main(String[] args) { int a1 = 0; int g1 = 0; double m1 = 0; int a2 = 0; int g2 = 0; double m2 = 0; int result = 0; boolean fortsätt = true; while (fortsätt) { Object[] options1 = {"Man", "Kvinna"}; JPanel panel = new JPanel(); panel.add(new JLabel("Ange ålder: ")); JTextField textField = new JTextField(10); panel.add(textField); result = JOptionPane.showOptionDialog(null, panel, "Uppgifter", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options1, null); String ålder = textField.getText(); System.out.println(result); try { int age = Integer.parseInt(ålder); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null,"Försök igen"); fortsätt=true; } } if (result == 0) { a1++; g1 = g1 + age; } else if (result == 1){ a2++; g2 = g2 + age; } } }

Tanken är att programmet ska samla in kön och ålder av användaren. När information är insamlad så ska programmet räkna ut medelåldern. Det i sig löste jag i min första version av programmet. Men för att göra koden vattentät så la jag in en en try och catch för att bli av med möjlig NumberFormatException. Catch och try verkar fungera som de ska, vilket i sig är skönt. Men istället så får jag problem med variabeln age. Ålder som skrivs in dialogrutan hamnar i variabeln age, men då jag har lagt in den i catch and try kommer jg inte åt den när jag försöker skriva g1 = g1 + age; respektive g2 = g2 + age;.
Vad kan alternativet vara för att få till del det? Förklara gärna så att en nybörjare förstår då målet faktiskt är att lära mig Java.
Mvh

Eftersom du deklarerar variabeln "int age" inne i scopet (dina måsvingar, { }, läs mer här) för din try-catch sats, innebär det att du inte kommer kunna nå variabeln utifrån.

För att lösa detta, måste du istället deklarera din variabel utanför try/catch-scopet och istället initiera variabeln i din try. Detta betyder att du tilldelar variabeln "age" i din try-catch, men deklarationen skapades utanför. Då når du sedan variabeln efter din try/catch-sats

(tips, kolla hur du löst detta med tidigare variabler, g1, g2 m.m.)

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk

Tack så mycket för alla tips, jag vet inte hur lång tid hade tagit innan jag hade löst det.

Mvh

Permalänk
Hedersmedlem

Nu är problemet löst, men la ändå in code-taggar på ursprungsinlägget ifall någon hittar den här tråden vid ett senare tillfälle.

/Giplet, Moderator

Visa signatur

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