Avatar billede limemedia Nybegynder
03. maj 2003 - 15:47 Der er 9 kommentarer og
1 løsning

double to int

Sidder og hakker nogle opgaver i "dobbelt konfekt" Java. Jeg undrer mig hvorfor følgende ikke virker

Skal returnere en INT, virker ikke
    private int celcius(int temp) {
        return Integer.parseInt((5.0 / 9.0) * (temp - 32));
    }

Returnerer jeg en DOUBLE, no problemo   
    private double fahrenheit(int temp) {
        return (9.0 / 5.0) * temp + 32;
    }

Fejlen jeg får er
opgave6_23.java:49: cannot resolve symbol
symbol  : method parseInt (double)
location: class java.lang.Integer
                return Integer.parseInt((5.0 / 9.0) * (temp - 32));
                              ^
1 error

5/9 giver et kommatal, hvorfor jeg vil lave en parseInt

opgave6_23.java:49: cannot resolve symbol
symbol  : method parseInt (double)
location: class java.lang.Integer
                return Integer.parseInt((5.0 / 9.0) * (temp - 32));
                              ^
1 error

Opgaven siger jeg *skal* returnere en int, hvorfor det er ufedt at returnere en double *g*

/ LJ
... der synes Java er en gang dobbeltkonfekt
Avatar billede abpdk Nybegynder
03. maj 2003 - 15:55 #1
Prøv med:
return (int)((5.0 / 9.0) * (temp - 32));
Avatar billede limemedia Nybegynder
03. maj 2003 - 15:57 #2
så compiler den, men funktionen returnerer altid 0
Avatar billede limemedia Nybegynder
03. maj 2003 - 16:02 #3
loool, så var den der... Dét er da logik for burhøns, man kan ikke integer.parseInt, men man kan typecaste en double til int *lool*

    /* PRIVATE FUNCTIONS */
    private int celcius(int temp) {
        double foo = (5.0 / 9.0) * (temp - 32);
        return (int) foo;
    }
   
    private int fahrenheit(int temp) {
        double foo = (9.0 / 5.0) * temp + 32;
        return (int) foo;
    }
Avatar billede abpdk Nybegynder
03. maj 2003 - 16:06 #4
Du burde sagtens kunne bruge følgende. Det virker i hvert fald fint her!?

private int celcius(int temp) {
  return (int)((5.0 / 9.0) * (temp - 32));
}
Avatar billede limemedia Nybegynder
03. maj 2003 - 16:09 #5
det giver mit et fladt 0 ... skal bare klare min eksamen om et par uger, har allerede så meget antipati mod sproget at jeg ikke vil sætte mig mere end højest nødvendigt ind i det *g*

tak for vinket - opgaven afleveret, næste venter :)
Avatar billede tballe Nybegynder
03. maj 2003 - 16:10 #6
Hvis du bare skal ændere en double til int så mister du decimalerne. Her kunne du gøre brug af formatter klassen først og så parse bagefter:

import java.text.*;

NumberFormat form =  NumberFormat.getInstance();// afrunder decimaler
form.setMaximumFractionDigits(0); // kaldes på følgende måde
form.format(tal)
// Herefter typecaster du til en int :


private int celcius(int temp) {
  int graderC;     
return graderC = (int)((5.0 / 9.0) * (temp - 32));

tballe
Avatar billede abpdk Nybegynder
03. maj 2003 - 16:12 #7
ljweb>> Prøv lige med f.eks. temp=1000, det skulle gerne gi' 537 (min gør!?).
Avatar billede limemedia Nybegynder
03. maj 2003 - 16:17 #8
tballe >> opgaveteksten lyder at jeg skal "implement the following int methods" - jeg fik umiddelbart double løsningen til at virke. Det er dog ikke nødvendigt at dormatere til 0 digits før du typecaster... Jeg var inde på det samme og prøvede med Math.floor(foo) men det lykkedes ikke

abpdk >> da gav alle tal 0 i celcius, mens fahrenheit funktionen virkede (som double), mystisk men ...
Avatar billede abpdk Nybegynder
03. maj 2003 - 16:20 #9
Jeg tror du glemmer at sætte paranteser uden om hele udtrykket, of derfor siger den (int)(5.0/9.0) hvilket giver nul og nul ganget med hvad som helst er jo nul! Bemærk lige at jeg ikke skrev (5.0 / 9.0) * (temp - 32) men derimod
( (5.0 / 9.0) * (temp - 32) ).
Avatar billede limemedia Nybegynder
03. maj 2003 - 16:21 #10
ahh, klart... ;)
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