Avatar billede gonnemand Nybegynder
05. december 2006 - 23:47 Der er 5 kommentarer og
1 løsning

try/catch - hvor catch skal lukke/genstarte programmet?

Jeg har et lille program (uden GUI), der laver beregninger med brøker. I konstruktoren er der så lavet en try/catch der fanger (ArithmeticException e), men det er jo bare ikke nok, for programmet kan kører videre.

Så enten skal konstruktoren startes forfra (højeste ønske), eller også skal programmet lukke helt ned.

Min konstrucktor:
###################################################
    public Brøk(int enT, int enN)
    {
        try
        {
            int temp = enT/enN;
        }
        catch (ArithmeticException e)
        {
            System.err.println("Fejl");
        }
        tæller = enT;
        nævner = enN;
    }
###################################################

En finally{  } er vel nok det bedste at bruge, men kan bare ikke finde ud af, hvad der kan genstarte konstruktoren eller stoppe programmet helt.
Avatar billede gonnemand Nybegynder
05. december 2006 - 23:52 #1
Hmm, har lige fundet ud af, at finally{  } bliver kørt uanset hvad, så den er nok alligevel ikke smart at bruge. Så koden der skal genstarte/lukke programmet, skal vel stå i catch{  }
Avatar billede winners79 Nybegynder
05. december 2006 - 23:55 #2
Hvad med System.exit(0);
eller
break;

Du kunne prøve at skrive return; i catch, er bare selv lidt nysgerrig om det ville gøre noget, har ikke lige energi til at teste noget:)
Avatar billede gonnemand Nybegynder
06. december 2006 - 00:03 #3
Prøvede at skrive dem i catch{  } med følgende resultater:

System.exit(0); lukker godt nok ned for Java maskinen (eller hvad det nu hedder), som vel egentlig er en smule voldsomt synes jeg.

break; giver fejlen: "break outside switch or loop"

return; ser ikke ud til at gøre noget.
Avatar billede lasserasch Juniormester
06. december 2006 - 00:06 #4
Hvad med i stedet for i din catch at udskrive en fejllinie, så lave en ny form eller noget, hvor man kan angive en anden værdi i stedet for.

Problemet er vel, at hvis du bare starter forfra, så opstår samme fejl jo igen. Og så looper du jo bare til uendelighed.

Så under catch må det jo være noget med :

catch (ArithmeticException e)

{
Messagebox.show("Fejl" + e.Message);
frm_newvalue frm_newvalue = new frm_newvalue();
Int enT_new = frm_newvalue.Entervalue(enT);
Brøk(enT_new, enN);
}

Virker selvfølgelig ikke lige sådan her, da du jo vil skulle lave en void i frm_newvalue formen du så lavede, som hed : Void Entervalue(Int enT)

Men håber du forstår hvad jeg mener....


Er også lidt sent her i Kolding!

/Lasse
Avatar billede gonnemand Nybegynder
12. december 2006 - 23:03 #5
Problemet er løst:

##################################################################################

  if(enN == 0) // Hvis nævneren er lig med "0", bliver der "kastet" en fejl,
  {            // og det oprettet objekt lukkes ned.
              // En bruger venlig fejlmeddelelse udskrives til brugeren.
    throw new ArithmeticException("\n----------------------------------------"
                                  +"\n|  Fejl: -> \"0\" i naevneren          |"
                                  +"\n|  Objektet kunne ikke oprettes      |"
                                  +"\n----------------------------------------");
##################################################################################

Andre objekter der er "startet" blive ikke berørt af dette, hvilket de gjorde med
System.exit(0); hvor hele VM blev genstartet, hvilket i dette tilfælde ikke var særlig godt.
Avatar billede gonnemand Nybegynder
12. december 2006 - 23:04 #6
Så derved er spørgsmålet besvaret.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester