Access Keys:
Skip to content (Access Key - 0)


Kapittel 2.4 - Aritmetiske operatorer

Added by Joachim Haagen Skeie , last edited by Joachim Haagen Skeie on Nov 21, 2009 22:21
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

For å kunne utføre rengeoppgaver i Java benytter man seg av aritmetiske operatorer som sammenkobler variabler i et algebraisk uttrykk. Som alle andre uttrykk i Java avsluttes et aritmetisk uttrykk med en semi-kolon.

Aritmetiske operatorer

Aritmetiske operatorer krever som regel ingen beskrivelse. Du bør kjenne igjen de fleste av de aritmetiske operatorene fra mattetimen.

Operator navn Eksempel Resultat<
Addisjon num + 5 Summen av verdien til num og 5
Subtaksjon 3 - 1 Differansen mellom 3 og 1
Multiplikasjon x * y Produktet av verdien til x og verdien til a
Divisjon 5 / ikkeNull Kvotienten av 5 og verdien til ikkeNull
Modulus 11 % 2 Resten av 11 dividert med 2 (1).

I tillegg kan du benytte deg av paranteser for å gruppere utregninger. Dette gjør det lettere både å lese og vedlikeholde koden.

Arbeide med heltall

Heltalls variabler, som jeg gikk gjennom i <a href="?spraak=java&hkap=2&ukap=1">kapittel 2.1</a> kan kun lagre heltall (3, 5, 123, 10000, osv). Du kan utføre en hvilken som helst av operatorene listet overfor for å regne ut en heltallsverdi. Jeg tar for meg et program nedenfor som aksepterer et heltall som input fra kommandolinjen og som regner ut volumet og omkretsen av en sirkel med radius lik input. Mange av eksemplene i denne guiden vil benytte ett liknende oppsett.

public class HeltallSirkel
{
	public static void main(String[] args)
	{
		//Skriv ut feilmelding dersom det ikke er eksakt 1 argument
		//fra kommandolinjen
		if (args.length != 1)
		{
			System.out.println("Bruk: java HeltallSirken r\n" + 
				"Der r er et heltall");
		}
		else	//Regn ut omkrets og volum til sirkelen
		{
			int r = 0;
			
			//Forsøk å lese inn en heltallsverdi
			try
			{
				//Prøv å parse en int verdi fra komando linje argumentet
				r = Integer.parseInt(args[0]);
			}
			//Dersom argumentet ikke er en int, skriv ut feilmelding og
			//avslutt programmet
			catch (NumberFormatException nfe)
			{
				System.out.println("r må være et heltall: " + nfe.getMessage());
				System.exit(0);	//Avslutter programmet
			}
			
			//Når vi hit vet vi at argumentet var et heltall
			
			//Regn ut omkretsen. Pi får vi fra Java fra java.lang.Math
			double omkrets = 2 * Math.PI * r;
			//Regn ut volumet. radius opphøyet i annen får vi v.hj.a. Math.pow()
			double volum = Math.PI * Math.pow(r, 2);
			
			//Skriv ut resultatet
			System.out.println("Omkretsen til en sirkel med radius " + r + " er:\t" + omkrets);
			System.out.println("Volumet til en sirkel med radius " + r + " er:  \t" + volum);
		}
	}
}

Programmet overfor er noe mer komplisert enn tidligere program, men dette er nødvendig for å kunne lese inn fra kommando linjen. Jeg har lagt inn ekstra kontroller for at tallet som leses inn er et heltall. Kontroll strukturen på linje 17 til 28 heter en try-catch blokk. Jeg kommer nærmere til hvordan man benytter en try-catch blokk i kapittel 7 - Exceptions.

Ellers benytter jeg meg av variabelen PI og den statiske metoden pow() fra java.lang.Math. Alle java programmer henter inn java.lang automatisk, slik at jeg kan nå klassen direkte v.hj.a. Math.

Husk å gi et argument fra kommando linjen når du kjører programmet. Du angir et kommandi linje argument ved å legge til argumentene etter klasse navnet. Prøv forskjellige verdier for radius når du kjører programmet, som kompileres og kjøres slik:

jhb:~/kode/Kapittel 3 jhb$ javac HeltallSirkel.java 
jhb:~/kode/Kapittel 3 jhb$ java HeltallSirkel 3
Omkretsen til en sirkel med radius 3 er:        18.84955592153876
Volumet til en sirkel med radius 3 er:          28.274333882308138

Arbeide med desimaltall

Å arbeide med desimaltall er likt som å arbeide med heltall. For å kunne lese inn et desimaltall i programmet overfor trenger du kun endre et få kode linjer. Variabelen r må endre type til double eller til float. Ettersom vi ikke har behov for å være utrolig eksakte (7 tall etter komma holder i bøtter og spann) holder det med en double variabel. Deretter må vi konvertere til en double istedet for til en int, som gjøres v.hj.a metoden Double.parseDouble(). Den endrede koden ser slik ut:

public class DesimaltallSirkel
{
	public static void main(String[] args)
	{
		//Skriv ut feilmelding dersom det ikke er eksakt 1 argument
		//fra kommandolinjen
		if (args.length != 1)
		{
			System.out.println("Bruk: java DesimaltallSirkel r\n" + 
				"Der r er et desimaltall");
		}
		else	//Regn ut omkrets og volum til sirkelen
		{
			double r = 0;
			
			//Forsøk å lese inn en heltallsverdi
			try
			{
				//Prøv å parse en double verdi fra komando linje argumentet
				r = Double.parseDouble(args[0]);
			}
			//Dersom argumentet ikke er en int, skriv ut feilmelding og
			//avslutt programmet
			catch (NumberFormatException nfe)
			{
				System.out.println("r må være et desimaltall: " + nfe.getMessage());
				System.exit(0);	//Avslutter programmet
			}
			
			//Når vi hit vet vi at argumentet var et heltall
			
			//Regn ut omkretsen. Pi får vi fra Java fra java.lang.Math
			double omkrets = 2 * Math.PI * r;
			//Regn ut volumet. radius opphøyet i annen får vi v.hj.a. Math.pow()
			double volum = Math.PI * Math.pow(r, 2);
			
			//Skriv ut resultatet
			System.out.println("Omkretsen til en sirkel med radius " + r + " er:\t" + omkrets);
			System.out.println("Volumet til en sirkel med radius " + r + " er:  \t" + volum);
		}
	}
}
jhb:/home/joachimb/inc_filer/java/kode/Kapittel 3 jhb$ javac DesimaltallSirkel.java 
jhb:/home/joachimb/inc_filer/java/kode/Kapittel 3 jhb$ java DesimaltallSirkel 3.25
Omkretsen til en sirkel med radius 3.25 er:     20.420352248333657
Volumet til en sirkel med radius 3.25 er:       33.18307240354219

Legg merke til at du kan gi DesimaltallSirkel ett heltall dersom du ønsker det, ettersom Java konverterer heltall til desimaltall automatisk. Mer om det i neste Kapittel 2.5 - Blandet aritmetikk-

Adaptavist Theme Builder (3.3.5-conf210) Powered by Atlassian Confluence 3.0.2, the Enterprise Wiki.