|
Egyszerű matematikai műveletek
|
bet | 22/51 | Sana | 07.04.2017 | Hajmi | 1.08 Mb. | | #3295 |
3.3.2. Egyszerű matematikai műveletek
A primitív típusú változóink szinte kivétel számokat tárolnak, ezért mindegyiken képesek vagyunk matematikai műveleteket végezni. Lássuk, miképp tudjuk a matematikai alapműveleteket Java nyelven elvégeztetni.
Előjelváltás
A legegyszerűbb operátor az előjelváltás:
view plaincopy to clipboardprint?
-
int szám = 2;
-
szám = -szám;
-
System.out.println(szám);
-
szám = -szám;
-
System.out.println(szám);
Az előjelváltás a tipikus példája a prefix típusú operátornak, hiszen az operátort követi az operandus.
Összeadás
A négy alapvető matematikai művelet közül a leginkább használt művelet az összeadás, Java nyelvben is pontosan úgy működik, mintha papírra vetnénk:
view plaincopy to clipboardprint?
-
int szám;
-
szám = 3 + 4;
-
szám = szám + 5;
-
szám = szám + 1;
-
System.out.println(szám);
A szám = 3 + 4 utasítás úgy olvasandó, hogy a szám változó értéke legyen egyenlő a három meg a négy értékével, vagyis a szám értéke hét lesz. A szám = szám + 5 utasítás már feltételez előző értéket a szám változóban (ami jelen esetben 7), s a jelentése annyi, hogy aszám változó értéke legyen egyenlő a szám változó előző értéke meg öt értékével, vagyis a szám változóban a 12 lesz eredményképpen. A következő utasítás hasonlóképpen értelmezhető, azt jelenti, hogy a szám változó értékét megnöveljük egyel. A kiírt eredmény 13 lesz.
Kivonás
Azonos módon értelmezhető, mint az összeadás:
view plaincopy to clipboardprint?
-
int szám;
-
szám = 3 - 4;
-
szám = szám - 5;
-
szám = szám - 1;
-
System.out.println(szám);
Az eredmény pedig -7 lesz.
Szorzás
A szorzás is úgy működik, mint az előző két művelet, csak a műveleti jel változik:
view plaincopy to clipboardprint?
-
int szám;
-
szám = 3 * 4;
-
szám = szám * 5;
-
szám = szám * 1;
-
System.out.println(szám);
Az eredmény 60 lesz, ahogy az sejthető.
Osztás
Az osztás kilóg az előző három művelet közül, egy kicsit speciális a helyzete. Az egyik buktató - amiről már volt szó, hogy ha egész számok az operandusok, akkor egész osztás fog történni:
view plaincopy to clipboardprint?
-
int szám;
-
szám = 30 / 4;
-
szám = szám / 5;
-
szám = szám / 1;
-
System.out.println(szám);
Normál esetben az eredmény másfél lenne, de az egész osztások miatt az 30/4 eredménye 7 lesz, ezt követően a 7/5 eredménye pedig 1, aztán az 1/1 természetesen 1. Ha a valós eredmény érdekel minket, akkor valós számokkal kell számolnunk:
view plaincopy to clipboardprint?
-
double szám;
-
szám = 30 / 4;
-
szám = szám / 5;
-
szám = szám / 1;
-
System.out.println(szám);
Az eredményül kapott 1.4 egy kissé gyanús lehet matematikában jártas egyéneknek. A probléma gyökere ott van, hogy a 30/4 még mindig egész osztás marad, attól függetlenül, hogy a szám változó típusa valós. Ennek oka, hogy a Java nyelvben - és más nyelvekben is - az egyenlőség jel jobb oldalán kezdődik a kifejezés végrehajtása, mégpedig balról jobbra. Mivel a 30 egy egész szám és a 4 is egy egész szám, ezért a két számon értelmezett osztás művelet egész osztás lesz: a szám változóba eredményül 7 kerül. A következő sorban az utasítás szerint a szám változó értékét el kell osztani öttel. Itt a szám változó típusa okán már valós osztás lesz, és a 7/5 eredménye az 1.4. A hibát úgy tudjuk kikerülni, hogy jelezzük a 30 és a 4 valós voltát (illetve a többi szám valós voltát is):
view plaincopy to clipboardprint?
-
double szám;
-
szám = 30.0 / 4.0;
-
szám = szám / 5.0;
-
szám = szám / 1.0;
-
System.out.println(szám);
Eredményül most már másfelet fogunk kapni. A nullával való osztásban is vannak különbségek. Ha valós számot osztunk nullával, akkor eredményül végtelent (Infinity) kapunk:
view plaincopy to clipboardprint?
-
double szám;
-
szám = 30.0 / 4.0;
-
szám = szám / 5.0;
-
szám = szám / 0;
-
System.out.println(szám);
Ellenben egész szám esetén a program futása megszakad:
view plaincopy to clipboardprint?
-
int szám;
-
szám = 30 / 4;
-
szám = szám / 5;
-
szám = szám / 0;
-
System.out.println(szám);
Egy kivétel (Exception) keletkezik, hogy nullával próbáltunk meg osztani:
view plaincopy to clipboardprint?
-
Exception in thread "main" java.lang.ArithmeticException: / by zero
-
at kocsma.Main.main(Main.java:11)
A kivételekről majd később, annyit jegyezzünk meg, hogy ha egész számokkal osztunk, akkor annak súlyos következményei lehetnek.
|
| |