13375k1133z Skrevet 27. januar 2011 Del Skrevet 27. januar 2011 (endret) Ble nettopp ferdig med en oppgave i java. Oppdaget at koden virket utrolig rotete og lang for en så enkel regneoperasjon 1. Er det mulig å optimalisere den på en måte/er det noe jeg har gjort tungvindt ? (koden er under) 2. hva er årsaken til (java): 2+"9" blir skrevet "ut" som: 29? 5/7 blir skrevet "ut" som: 0? 7/0 blir skrevet "ut" som: java.lang.ArithmeticException: / by zero? 7.0/0 blir skrevet "ut" som: infinity? 5/3.0-5/3 blir skrevet "ut" som: 0.66666...7? Takker på forhånd for hjelp! Koden: /* Regner celcius om til farenheit og kelvin. * Regner farenheit om til celcius og kelvin. * */ import java.text.DecimalFormat; import java.util.Scanner; class temperaturq { public static void main (String[]args ) { Scanner tastatur = new Scanner (System.in); //dekalere variabler double temperatur; //regner ut fra celcius double kelvin; double farenheit; double celcius; double kelvin2; double temperatur2; //regner ut fra farenheit System.out.print("Temperatur i celcius"); //leser tastatur og gjør regneoperasjon temperatur = tastatur.nextDouble(); farenheit = (temperatur * 1.8) + 32; kelvin = temperatur + 273.15 ; //konventerer til ##.# desimal. DecimalFormat df = new DecimalFormat ("###.#"); //Skriver ut resultat System.out.println (df.format(temperatur) + " C"); System.out.println (df.format(farenheit) + " F"); System.out.println (df.format(kelvin) + " K"); System.out.print ("Temperatur i farenheit"); temperatur2 = tastatur.nextDouble(); celcius = (0.56 * (temperatur2 - 32)) ; kelvin2 = celcius + 273.15; System.out.println (df.format(temperatur2) + " F"); System.out.println (df.format(celcius) + " C"); System.out.println (df.format(kelvin2) + " K"); } } Endret 27. januar 2011 av 13375k1133z Lenke til kommentar
greygenic Skrevet 27. januar 2011 Del Skrevet 27. januar 2011 [...] hva er årsaken til (java): [...] 2+"9" blir skrevet "ut" som: 29? Kort fortalt: Her gjør du det hele om til 'string', siden du bruker "-symbolet. 5/7 blir skrevet "ut" som: 0? Ja, fordi tallene blir behandlet som heltall, og ikke desimaltall, og da blir resten "kastet". Prøv heller med følgende: 5.0/7.0 7/0 blir skrevet "ut" som: java.lang.ArithmeticException: / by zero? Den skriver ikke, den gjør et unntak fordi du deler på tallet 0. Les mer her, om du lurer på hvorfor. 7.0/0 blir skrevet "ut" som: infinity? Se lenke over. 5/3.0-5/3 blir skrevet "ut" som: 0.66666...7? Ja, stemmer bra det. Hva hadde du forventet? Operatøren '/' har høyere rang enn '-', og siden 3 går en gang i 5 (og resten blir kastet, se hvorfor lenger opp) får du følgende: 1.666...7 - 1 = .6667. /* * Regner celcius om til farenheit og kelvin. * Regner farenheit om til celcius og kelvin. */ import java.text.DecimalFormat; import java.util.Scanner; class temperaturq { public static void main (String[] args) { Scanner tastatur = new Scanner (System.in); // Deklarere variabler double kelvin; double farenheit; double celcius; System.out.print("Temperatur i celcius: "); // Leser tastatur og gjør regneoperasjon celcius = tastatur.nextDouble(); farenheit = (celcius * 1.8) + 32; kelvin = celcius + 273.15 ; // Konventerer til ##.# desimal. DecimalFormat df = new DecimalFormat ("###.#"); // Skriver ut resultat System.out.println (df.format(celcius) + " C"); System.out.println (df.format(farenheit) + " F"); System.out.println (df.format(kelvin) + " K"); System.out.print ("Temperatur i farenheit: "); farenheit = tastatur.nextDouble(); celcius = (0.56 * (farenheit - 32)) ; kelvin = celcius + 273.15; System.out.println (df.format(farenheit) + " F"); System.out.println (df.format(celcius) + " C"); System.out.println (df.format(kelvin) + " K"); } } Stort sett grei kode. Jeg endret den såvidt, bare for å gjenbruke et par variabler. (Det er riktignok noe unøyaktighet når man bruker vanlige flytvariabler, men det er vel noe du lærer mer om senere.) Lenke til kommentar
13375k1133z Skrevet 27. januar 2011 Forfatter Del Skrevet 27. januar 2011 Tusen takk for hjelpen!!! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå