Avatar billede eds Nybegynder
24. november 2008 - 19:40 Der er 4 kommentarer

throws Exception

Hej jeg har følgende script:

import java.io.*;
public class Rates{
  public static void main(String[] args) throws Exception{
      Double EUR = -1.0;
      Double USD = -1.0;
      Double GBP = -1.0;
      Double SEK = -1.0;
      Double NOK = -1.0;
      Double ISK = -1.0;
      Double CHF = -1.0;
      Double CAD = -1.0;
      Double JPY = -1.0;
      Double AUD = -1.0;
      Double NZD = -1.0;
      Double EEK = -1.0;
      Double LVL = -1.0;
      Double LTL = -1.0;
      Double PLN = -1.0;
      Double CZK = -1.0;
      Double HUF = -1.0;
      Double HKD = -1.0;
      Double SGD = -1.0;
      Double ZAR = -1.0;
      Double BGN = -1.0;
      Double RON = -1.0;
      Double SKK = -1.0;
      Double TRY = -1.0;
      Double KRW = -1.0;
      Double HRK = -1.0;
      Double RUB = -1.0;
      Double THB = -1.0;
      Double MYR = -1.0;
      Double PHP = -1.0;
      Double IDR = -1.0;
      Double CNY = -1.0;
      Double BRL = -1.0;
      Double MXN = -1.0;
      Double SDR = -1.0;
    File file = null;
    FileReader freader = null;
    LineNumberReader lnreader = null;
    try{
      file = new File("2008-11-24.txt");
      freader = new FileReader(file);
      lnreader = new LineNumberReader(freader);
      String line = "";
      int lineno = 1;
      while ((line = lnreader.readLine()) != null){
          if(lineno == 1) { EUR = Double.parseDouble(line);}     
          if(lineno == 2) { USD = Double.parseDouble(line);}
          if(lineno == 3) { GBP = Double.parseDouble(line);}
          if(lineno == 4) { SEK = Double.parseDouble(line);}
          if(lineno == 5) { NOK = Double.parseDouble(line);}
          if(lineno == 6) { ISK = Double.parseDouble(line);}
          if(lineno == 7) { CHF = Double.parseDouble(line);}
          if(lineno == 8) { CAD = Double.parseDouble(line);}
          if(lineno == 9) { JPY = Double.parseDouble(line);}
          if(lineno == 10) { AUD = Double.parseDouble(line);}
          if(lineno == 11) { NZD = Double.parseDouble(line);}
          if(lineno == 12) { EEK = Double.parseDouble(line);}
          if(lineno == 13) { LVL = Double.parseDouble(line);}
          if(lineno == 14) { LTL = Double.parseDouble(line);}
          if(lineno == 15) { PLN = Double.parseDouble(line);}
          if(lineno == 16) { CZK = Double.parseDouble(line);}
          if(lineno == 17) { HUF = Double.parseDouble(line);}
          if(lineno == 18) { HKD = Double.parseDouble(line);}
          if(lineno == 19) { SGD = Double.parseDouble(line);}
          if(lineno == 20) { ZAR = Double.parseDouble(line);}
          if(lineno == 21) { BGN = Double.parseDouble(line);}
          if(lineno == 22) { RON = Double.parseDouble(line);}
          if(lineno == 23) { SKK = Double.parseDouble(line);}
          if(lineno == 24) { TRY = Double.parseDouble(line);}
          if(lineno == 25) { KRW = Double.parseDouble(line);}
          if(lineno == 26) { HRK = Double.parseDouble(line);}
          if(lineno == 27) { RUB = Double.parseDouble(line);}
          if(lineno == 28) { THB = Double.parseDouble(line);}
          if(lineno == 29) { MYR = Double.parseDouble(line);}
          if(lineno == 30) { PHP = Double.parseDouble(line);}
          if(lineno == 31) { IDR = Double.parseDouble(line);}
          if(lineno == 32) { CNY = Double.parseDouble(line);}
          if(lineno == 33) { BRL = Double.parseDouble(line);}
          if(lineno == 34) { MXN = Double.parseDouble(line);}
          if(lineno == 35) { SDR = Double.parseDouble(line);}
      lineno++;
      }
      System.out.println(EUR); 
      System.out.println(USD);
      System.out.println(GBP);
      System.out.println(SEK);
      System.out.println(NOK);
      System.out.println(ISK);
      System.out.println(CHF);
      System.out.println(CAD);
      System.out.println(JPY);
      System.out.println(AUD);
      System.out.println(NZD);
      System.out.println(EEK);
      System.out.println(LVL);
      System.out.println(LTL);
      System.out.println(PLN);
      System.out.println(CZK);
      System.out.println(HUF);
      System.out.println(HKD);
      System.out.println(SGD);
      System.out.println(ZAR);
      System.out.println(BGN);
      System.out.println(RON);
      System.out.println(SKK);
      System.out.println(TRY);
      System.out.println(KRW);
      System.out.println(HRK);
      System.out.println(RUB);
      System.out.println(THB);
      System.out.println(MYR);
      System.out.println(PHP);
      System.out.println(IDR);
      System.out.println(CNY);
      System.out.println(BRL);
      System.out.println(MXN);
      System.out.println(SDR);
    }
    finally{
      freader.close();
      lnreader.close();
    }
  }
}

Og da denne klasse ikke er min main, denne klasse skal blot kaldes fra en anden klasse, skal jeg finde en måde at fjerne "public static void main(String[] args) throws Exception{" uden også at slette min exception. Hvordan gøres dette?

På forhånd tak.
Avatar billede schwarz84 Nybegynder
25. november 2008 - 12:10 #1
Det må da tage prisen for det ringeste kode jeg har set i år. Det kan fås ned på 10 linjer uden problemer. På grund af afrundingsfejl bør du i øvrigt så vidt muligt undgå at bruge Double til sådan nogle ting.

Hvis du ikke vil kaste en exception videre fra en metode, så skal du catche den:
import java.io.*;
public class Rates{
  public static void main(String[] args) {
      Double EUR = -1.0;
      Double USD = -1.0;
      Double GBP = -1.0;
      Double SEK = -1.0;
      Double NOK = -1.0;
      Double ISK = -1.0;
      Double CHF = -1.0;
      Double CAD = -1.0;
      Double JPY = -1.0;
      Double AUD = -1.0;
      Double NZD = -1.0;
      Double EEK = -1.0;
      Double LVL = -1.0;
      Double LTL = -1.0;
      Double PLN = -1.0;
      Double CZK = -1.0;
      Double HUF = -1.0;
      Double HKD = -1.0;
      Double SGD = -1.0;
      Double ZAR = -1.0;
      Double BGN = -1.0;
      Double RON = -1.0;
      Double SKK = -1.0;
      Double TRY = -1.0;
      Double KRW = -1.0;
      Double HRK = -1.0;
      Double RUB = -1.0;
      Double THB = -1.0;
      Double MYR = -1.0;
      Double PHP = -1.0;
      Double IDR = -1.0;
      Double CNY = -1.0;
      Double BRL = -1.0;
      Double MXN = -1.0;
      Double SDR = -1.0;
    File file = null;
    FileReader freader = null;
    LineNumberReader lnreader = null;
    try{
      file = new File("2008-11-24.txt");
      freader = new FileReader(file);
      lnreader = new LineNumberReader(freader);
      String line = "";
      int lineno = 1;
      while ((line = lnreader.readLine()) != null){
          if(lineno == 1) { EUR = Double.parseDouble(line);}     
          if(lineno == 2) { USD = Double.parseDouble(line);}
          if(lineno == 3) { GBP = Double.parseDouble(line);}
          if(lineno == 4) { SEK = Double.parseDouble(line);}
          if(lineno == 5) { NOK = Double.parseDouble(line);}
          if(lineno == 6) { ISK = Double.parseDouble(line);}
          if(lineno == 7) { CHF = Double.parseDouble(line);}
          if(lineno == 8) { CAD = Double.parseDouble(line);}
          if(lineno == 9) { JPY = Double.parseDouble(line);}
          if(lineno == 10) { AUD = Double.parseDouble(line);}
          if(lineno == 11) { NZD = Double.parseDouble(line);}
          if(lineno == 12) { EEK = Double.parseDouble(line);}
          if(lineno == 13) { LVL = Double.parseDouble(line);}
          if(lineno == 14) { LTL = Double.parseDouble(line);}
          if(lineno == 15) { PLN = Double.parseDouble(line);}
          if(lineno == 16) { CZK = Double.parseDouble(line);}
          if(lineno == 17) { HUF = Double.parseDouble(line);}
          if(lineno == 18) { HKD = Double.parseDouble(line);}
          if(lineno == 19) { SGD = Double.parseDouble(line);}
          if(lineno == 20) { ZAR = Double.parseDouble(line);}
          if(lineno == 21) { BGN = Double.parseDouble(line);}
          if(lineno == 22) { RON = Double.parseDouble(line);}
          if(lineno == 23) { SKK = Double.parseDouble(line);}
          if(lineno == 24) { TRY = Double.parseDouble(line);}
          if(lineno == 25) { KRW = Double.parseDouble(line);}
          if(lineno == 26) { HRK = Double.parseDouble(line);}
          if(lineno == 27) { RUB = Double.parseDouble(line);}
          if(lineno == 28) { THB = Double.parseDouble(line);}
          if(lineno == 29) { MYR = Double.parseDouble(line);}
          if(lineno == 30) { PHP = Double.parseDouble(line);}
          if(lineno == 31) { IDR = Double.parseDouble(line);}
          if(lineno == 32) { CNY = Double.parseDouble(line);}
          if(lineno == 33) { BRL = Double.parseDouble(line);}
          if(lineno == 34) { MXN = Double.parseDouble(line);}
          if(lineno == 35) { SDR = Double.parseDouble(line);}
      lineno++;
      }
      System.out.println(EUR); 
      System.out.println(USD);
      System.out.println(GBP);
      System.out.println(SEK);
      System.out.println(NOK);
      System.out.println(ISK);
      System.out.println(CHF);
      System.out.println(CAD);
      System.out.println(JPY);
      System.out.println(AUD);
      System.out.println(NZD);
      System.out.println(EEK);
      System.out.println(LVL);
      System.out.println(LTL);
      System.out.println(PLN);
      System.out.println(CZK);
      System.out.println(HUF);
      System.out.println(HKD);
      System.out.println(SGD);
      System.out.println(ZAR);
      System.out.println(BGN);
      System.out.println(RON);
      System.out.println(SKK);
      System.out.println(TRY);
      System.out.println(KRW);
      System.out.println(HRK);
      System.out.println(RUB);
      System.out.println(THB);
      System.out.println(MYR);
      System.out.println(PHP);
      System.out.println(IDR);
      System.out.println(CNY);
      System.out.println(BRL);
      System.out.println(MXN);
      System.out.println(SDR);
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    finally{
      freader.close();
      lnreader.close();
    }
  }
}

Så bliver fejlen skrevet ud i stedet for at blive kastet videre.
Avatar billede eds Nybegynder
26. november 2008 - 20:37 #2
Ah smart smart. Som kodens længde nok afslører er jeg netop gået igang med java. Hvordan kan jeg undgå at bruge double, det er jo decimaltal der ligger i 2008-11-24.txt ?
Avatar billede arne_v Ekspert
27. november 2008 - 23:44 #3
Til beløb bør man bruge BigDecimal.
Avatar billede schwarz84 Nybegynder
02. december 2008 - 14:41 #4
Overvej om du ikke er bedre stillet med en liste. Det her kode gør det samme som din kode:

import java.io.*;
public class Rates{
  public static void main(String[] args) {
    ArrayList<BigDecimal> rates = new ArrayList<BigDecimal>();
    File file = null;
    FileReader freader = null;
    LineNumberReader lnreader = null;
    try{
      file = new File("2008-11-24.txt");
      freader = new FileReader(file);
      lnreader = new LineNumberReader(freader);
      String line;
      while ((line = lnreader.readLine()) != null){
          rates.add(new BigDecimal(line));
      }
      for (BigDecimal b : rates)
          System.out.println(b);
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    finally{
      freader.close();
      lnreader.close();
    }
  }
}
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