22
Rəqəm dəyişənləri ilə bağlı praktiki məsələlər
Proqramlaşdırma dillərinin ən sadəsindən çətininə qədər hamısı riyazi məsələləri həll etmək üçün tam təmin
olunmuşdur. Sadədən çətinə doğru bacardığım qədər Java-nın riyazi məsələlərdə istifadə etdiyi funksiyalarını
kitabda əks etdirəcəm.
Riyazi operatorlar
+ toplama
- çıxma
* vurma
/ bölmə % qalıq göstəricisi
Dəyişənləri qruplaşdırma və hesablama
Yeni Java faylı yaradıb istədiyiniz kimi adlandırın və diqqət edin ki class-ın adı faylın adı ilə eyni olsun.
Yoxsa proqram RUN olanda error verəcək.
Zabilin çəkisi normalda 90 kilodur. Tətilə çıxandan sonra çəkisi 15 kilo artmışdır. Tətildən sonra idmanla
məşğul olmuş çəkisi 10 kilo azalmışdır. Zabilin indiki kilosu neçədir?
Yuxarıdakı məsələdə hər dəyişənin qarşısında yenidən
int
yazılmayıb. Məsələdəki dəyişənlərin tam ədəd
olmasını nəzərə alınıb və bir sətirdə qruplaşdırılıb.
23
Qalığın ekrana verilməsi
Ədəd tam bölünəndən sonra qalan ədəd ekrana verilir. Burda nəticə 1 göstərilir.
Bir-bir artırma və azaltma
Proqramlaşdırma dillərində populyar olan funksiya, bir-bir artırma və ya azaltma. Dəyişənin yanına “++” və
ya “--” yazmaqla əldə edilir. Artırma və ya azaltma işarələri dəyişənin önündə yazılarsa hesablamadakı
yerindən asılı olmayaraq birinci dəyərini dəyişəcəkdir. Əgər dəyişəndən sonra yazılsa hesablama daxilində ilk
verilən dəyərini daşıyacaqdır.
Riyazi operator ardıcıllığı
1.
Bir-bir artırma və ya azaltma
2.
Vurma, bölmə və faiz
3.
Toplama və çıxma
4.
Müqayisə
5.
Axırda “=” hesablanmış nəticəni dəyişənə mənimsədir.
25
Qeyd: Mötərizə daxilindəki hesablamalar ayrılıqda hesablanır. Daha sonra çöldəki hesaba qatılır.
Z = 5 *(3+2) = 5*(5)=25
Dəyişənlərlə hesablama və görüntü
2 dəyişəni toplayıb, cavabda təkcə nəticəni yox eyni zamanda toplama prosesini görüntü olaraq əks etdirin.
Bunu digər riyazi operatorlarla yoxlayın.
26
Şərt əmrləri
Şərt operatorları – “==”, “!=”, “<”, “>”, “<=”, “>=”, “?”
Qoyulmuş şərtlər təsdiqini tapırsa əmri yerinə yetirilir, əks halda heç bir əmr icra olunmur.
( A == B) – A və B dəyəri bərabərdirsə icra edilir.
( A != B) – A və B dəyəri bərabər deyilsə icra edilir.
( A < B) – A B-dən kiçikdirsə, ( A > B) – A B-dən böyükdürsə icra edilir.
( A <= B) – A B-dən kiçikdirsə və ya B-yə bərabərdirsə, ( A >= B) – A B-dən böyükdürsə və ya B-yə
bərabərdirsə icra edilir.
Yuxarıda izah olunan operatorlar təsdiqlənirsə icra edilir, “?” xüsusi şərtdir, əgər birinci şərt təsdiqləmirsə
ikinci nəticəni icra edir.
Şərt əmrləri – if, else
If- Əgər mənasına gəlir, şərtin başlandığı əmrdir, else(els) - başqa, əgər olmasa başqa şərt mənasına gəlir.
İstəyirəm birbaşa məsələ üzərində şərt əmrlərini izah edim. Məsələ məktəbi bitirən Bilal haqqındadır
Kodlardan göründüyü kimi bir neçə integer dəyişənim var. Universitetə qəbul ballarının şərtlərinə uyğun
olaraq Bilalın hansı ixtisasa qəbul olacağı müəyyənləşdirilir, əgər TQDK balı uyğun deyilsə və yaşı
27
əsgərə(müddətli həqiqi xidmət) getməyə uyğundursa onu göndəririk dağlar qoynunda xidmətə Bir az
texniki şəkildə belə deyə bilərik:
Əgər (şərt) {əgər şərt düzdürsə çap edilir} , if (5>0) System.out.println("5 sıfırdan böyükdür");.
Sadəcə bir if şərti ilə məsələ bitə bilər. Şərt təsdiqlənirsə çapa verilir, əgər təsdiqlənmirsə heç bir cavab
ekrana çıxmır. Şərtin düz olmadığı halda nəticə görmək istəyirsinizsə o zaman else if (yeni şərt
yazılır){istənilən nəticə çapa verilir}.
Sual operatoru
Fərz edək ki, proqramınızdan qeydiyyatdan keçən şəxsə Cənab və ya Xanım kimi müraciət etmək istəyirsiniz
bu zaman “?” operatorundan aşağıdakı kimi istifadə etmək olar.
Ardıcıllıq aşağıdakı kimidir:
1.
Şərt yazılır
2.
“?” işarəsi
3.
“Şərt doğrudursa 1-ci cavab dırnaqda String” və ya dırnaqsız integer
4.
İkinöqtə ilə “:” və ya
5.
“Şərt doğru deyilsə 2-ci cavab dırnaqda String” və ya dırnaqsız integer
Şərt əmrləri - switch, case, break, default
If və else ilə yazılan proqramlarda şərtlər çox olanda else if ()-dən bir neçə dəfə istifadə etməli oluruq.
Şərtləri çox olan məsələlər üçün daha sadə olar ki switch(sviç – dəyişmək, keçirtmək)-dən istifadə edilsin.
Switch() - in qarşısındakı mötərizədə String, integer, char və digər dəyişənlər yazıla bilər. Case(keys-hal)-in
qarşısındakı dəyər switch-in mötərizəsindəki dəyərlə eyni olduğu zaman şərt icra edilir. Əgər eyni deyilsə o
zaman növbəti case yoxlanılır. Bütün case-lər icra olunmadığı halda default(difolt) icra olunur. Default-un
azərbaycan dilində düzgün tərcüməsi yoxdur və ya tapa bilmədim, amma İT-də qarşılaşdığım anlamı əsasən
“standart olaraq”, “sabit seçim” kimi mənaya uyğun gəlir. Break(breyk- qırma) icra olunacaq Case-dən sonra
icranı dayandır, qır mənasına gəlir. Hər bir case icra olunandan sonra break yazılmasa proqram case-dən
sonra yazılan digər mümkün əmrləri yerinə yetirəcəkdir.
28
Qeyd: Switch daxilində hansı tip dəyişən (integer, string, char) varsa case-də də həmin tip dəyişən istifadə
olunmalıdır. Əks halda compile olmayacaq. Digər bir məsələ dəyişənlərin adları yox onların dəyəri case-ə
yazılmalıdır. Aşağıda göstərildiyi kimi:
String ad = “Zabil”;
------ case “Zabil”
char birhərf = ‘ Z ’;
------ case ‘ Z ’
İnt
yaş = 27;
------ case 27
29
Dövr əmrləri - for , do, while
İngilis dilində dövr əmrləri loop(lup) adlanır. Dövr daxilində yazılan şərtləri və hesablamanı yuxarıdan
aşağıya işləyərək şərtlərdə verilmiş son həddə çatana kimi proqramı təkrar edir.
For
Əsasən ədədləri ardıcıl və ya müəyyən şərtə uyğun olaraq saymaq kimi əmrləri yerinə yetirir. Müəyyən
olunmuş həddə dövr ilə çatmaq üçün dizayn olunmuşdur. For dövrünün daxilində başlanğıc ədəd, şərt və
şərtə çatmaq üçün hesablama funksiyası olur. Aşağıdakı misalda şərt olaraq 15-dən kiçik və ona bərabər olan
ədədləri sıralamaq istəyirəm. Bunun üçün başlanğıcda 1 ədədi şərt ilə yoxlanılır 15-ə bərabər olmadığı üçün
z++ ilə üzərinə bir ədəd əlavə edilir. Sonra həmin ədəd təkrar yoxlanılır və15-ə bərabər olana qədər davam
edir.
Yuxarıdakı izaha uyğun olaraq ədədlər sıralananda 2-dən başlamalıdır amma nəticədə 1-dən 15-ə qədər
sıralanmışdır. For-un bu xüsusiyyətini gələcəkdəki hesablamalarınızda nəzərə almaq yaxşı olar. For daxilində
şərtlər “;” ilə ayrılmalıdır. For-dan sonra System.out.println();-dən başqa şərtlərdə istifafə etmək
mümkündür.
3-ə bölünərkən qalığı sıfıra bərabər olan ədədlər çap edilib. 0, 3, 6, 9, 12, 15
QEYD: Yazdığınız proqram sonsuz dövrə girdiyi halda NetBeans-də nəticə göstərilən pəncərənin altında
RUN proses zolağına x basaraq dövrü dayandıra bilərsiniz.
Mürəkkəb For əmrləri
Yuxarıda izah olunan məsələ üzərində for dövrünün quruluşunu daha rahat anlamaq mümkündür. Əslində
for-un qarşısındaki mötərizədə dəyişən yazmamaq və ya bir neçə dəyişəni eyni vaxta daxil etmək
mümkündür. Aşağıdakı misalda 5-in vurma cədvəlini bu üsulla əldə etmişəm. Z=5 mötərizədən çöldə
yazılıb.
30
While
While(vayl – nə qədər ki; o vaxta qədər ki;) for-dan fərqli olaraq bir mümkün vəziyyətin dəyişəcəyi vaxta
qədər şərti icra etmir. Əgər şərt doğrudursa(true) dövr sonsuz davam edir və şərtlər təkrar-təkrar yoxlanır.
Yuxarıda temperaturun 0 dərəcədən aşağı olduğu halda sobanın yandırılması şərti verilmişdir. Şərt doğru olan
kimi loop(dövr) işə düşür. Şərt loop-un işlədiyi vaxt dəyişsə False olsa loop ekrana nəticəni çıxartmır. Şərt
doğru olduğu halda sonsuz dövr gedir və loop-un bitdiyi sətirdən sonra
break
əlavə olunmaqla sonsuz
dövrün qarşısı alınır. Aşağıdakı məsələdə şərtin yanlış olduğu ana qədər dövrün işləməsi göstərilibdir.
31
Ac olanda cibindəki 5 konfeti yeyən adamın hesabatını görürsünüz. While daxilindəki şərtlərin və digər
funksiyaların istifadə olunma qaydasını təsvir edən sadə proqram.
Continiue
Yuxarıda yazdığım konfetlə bağlı proqramda yəqin diqqət yetirmişiniz ki 3, 4 ilə qurtaran rəqəmlərin sonluğu
düzgün yazılmayıb. “3-ni”, “4-ni” yazılıb. Continue bizə 3 və 4 ədədi yarandıqda həmin case-ə aid olan
yazını ekrana verməyə kömək edir. Break yazılan sətirdə proqram tamamı ilə dayanır. Continue isə dövrün
həmin sətirdən aşağıya getməsinə imkan vermir və dövrü proqramı əvvəlindən aşağı gəlməyə məcbur edir.
Do while
Do(du- yerinə yetirmək) – demək olar ki while kimidir. Şərt True olduğu halda dövr sonsuz davam edir.
False olduğu halda dövr dayandırılır. Do while -ın while-dan fərqi şərtin false olduğu halda belə əyri mötərizə
daxilindəki mətn dövr yoxlandığında ən azi bir dəfə işlənir. Bu məsələdə “Zabilin 28 yaşı var” false olmasına
baxmayaraq bir dəfə ekrana verilibdir.
Dövrün adlandırılması
Dövrün adlandırılması dedikdə müəyən bir dövrün qarşısına ona vermək istədiyiniz adı və “:”-ni yazırsınız.
Daha sonra dövr müəyyən həddə çatanda adı olan dövrü qeyd edərək ona istədiyiniz əmri verə bilərsiniz.
32
Yuxarıdakı proqramda ilin günlərini dövrə salmışam və hər 31 gündən sonra aya bölgü aparmaq istəmişəm.
While-ın yuxarısında yazılan “ayın_günleri” while dövrü üçün seçilmiş şəri addır. Dövr 31-ə çatanda break-in
qarşısında yazılan dövr dayandırılır.
Array
Array(ərey) – matris, düzülüş deməkdir. Bir ad altında bir neçə dəyişənin birləşməsi üçün istifadə edilir.
Bəzən dəyərlər həddindən artıq çox olur. Hər bir dəyər üçün yeni bir dəyişən yazmaq mümkün olmur. Bu
səbəbdən eyni tipli dəyişənləri bir ad altında toplu(massiv) yadda saxlayırıq.
Yuxarıdakı şəkildə göstərildiyi kimi “login_toplu” və “pass_toplu” adı altında hər birinə aid 3 dəyər qeyd
edilmişdir. Burada qeydiyyatdan keçən şəxsləri cədvələ əlavə etmişik. Proqrama daxil olmaq istəyənləri array
daxilindəki qeydiyyata uyğun olaraq yoxlayırıq. Aşağıda bu proses qismən əks edilmişdir.
Array iki üsulla yaradıla bilər. Yuxarıdakı misalda array-in yaradılmasında əyri mötərizələrdən istifadə edilib.
33
Birinci üsul -
Array yaradarkən onun tipi(int, String, char...) qeyd edilir. Sonra array-in dəyişəninə ad
(login_toplu və ya pass_toplu) verilir. Sonra array olmasını göstərən “ [ ] ” kvadrat mötərizələr daxil edilir.
Bərabərlikdən sonra “{ }” əyri mötərizələr daxilində qeyd olunan dəyərlər “element” adlanır və aralarında
vergül qoyulmaq şərti ilə ardıcıl qeyd olunurlar. Yuxarıdakı məsələdə şifrə yoxlama üsulu əslində düzgün
həll deyildir. Bu üsulla hər dəyişəni ayrıca kodla yazılmalı və yoxlanmalı olsaq çox çətin və ağır proqram
yazmış olarıq. Yuxarıdakı proqram indiyə qədər öyrəndiyimiz materialları təkrar etmə məqsədi daşıyır.
İnşallah kitabın sonunda bir layihəni tam olaraq işləyib düzgün yanaşmaları tətbiq edəcəyik.
Qeyd: Array-lər daxilindəki elementləri 0-dan başlayaraq sayır. Birinci dəyər 1-dən başlamır.
İkinci üsulu -
Array-in “new” əmrindən istifadə etməklə yaradılır. Birinci array-in tipi, adı, kvadrat
mötərizələr, bərabərlikdən sonra “new” sonra array-in tipi, kvadrat mötərizə daxilində array-in sayı və nöqtə
vergül yazılır. Birinci sətirin altından array dəyişəninin adı kvadrat mötərizədə elementin yerləşdiyi sıra
nömrəsi və bərabərlikdən sonra elementin özü qeyd olunur.
Array-in sayı əvvəldə göstərilməlidir. Əvvəlcədən nəzərdə tutulmamış element əlavə etmək istəsəniz mütləq
ümumi array sayında dəyişiklik etməlisiniz. İstifadə etdiyimiz “ .length” metodu array daxilindəki
elementlərin sayını göstərir. Əgər array-in elemetleri qeyd olunmazsa default olaraq elemetler aşağıdakı
dəyərləri qazanacaqlar.
String – null
boolean - false
34
Char – ‘ \0 ’
integer, double, long, short(bütün rəqəm dəyişənləri) – 0
Çoxölçülü Array
Çoxölçülü array bir dəyərdən əlavə dəyərlərə sahib olması ilə fərqlənir. Dəyərləri verilmədikdə çoxölçülü
array-də eynən tək ölçülü kimi default dəyərlərə sahib olur. Aşağıdakı şəkildə çoxölçülü array təsvir edilib.
Əsasən çoxölçülü array koordinat nöqtələrinin(x, y) göstərilməsini tələb edən məsələlərdə istifadə edilir.
Yuxarıdakı məsələdə iki koordinat nöqtəsinə uyğun olaraq Char elementlər daxil edilib. Daha sonra dövrdən
istifadə edərək koordinatların avtomatik əldə olunmasını və elementlərin yerləşdiyi koordinatdan çağırılıb
ekrana verilməsini təşkil etmişəm.
35
Built-in Java Packages
Java-da proqramlaşdırmaq üçün endirdiyimiz JAVA JDK(Java Development Kit) tərkibində Java Runtime
Enviroment(JRE) - Java-nın işləməsi üçün mühiti daşıyır. JRE-yə elə JVM(Java Virtual Machine)-də demək
olar. Bütünlükdə Java-nın işləməsini təşkil edən parçalardır. Oracle Java-ya bir neçə ildən bir yeni əlavələr
edir. Bu əlavələrdən olan JRE-nin tərkibindəki Built-in Java Packages (daxilində Java paketləri quraşdırılmış)
hazır proqramlar təklif edir. Package elə bizim yaratdığımız “com.ZJAVAKITABI” paketi ilə eyni funksiyanı
daşıyır. Oracle bəzi ümumiləşmiş məsələləri yenidən yazmamaq üçün istifadəçilərə hazır yazılmış class-lar
yəni hazır yazılmış proqramlar təklif edir. Hər yenilənmədə yaradılmış paketlər Oracle-ın müəyyən
səhifələrində yer alır. Aşağıdakı linkdə bizim endirdiyimiz SE8(Standart Edition –Standard buraxılış) yer alır.
http://docs.oracle.com/javase/8/docs/api/
Səhifədə solda birinci pəncərədə paketlərin siyahısını görürsünüz və onun altındakı pəncərədə paketlərin
tərkibindəki class-lara baxa bilərsiniz. Sağ tərəfdə isə seçdiyiniz class-ın tərkibi izah edilir.
Qeyd: Belə sual yarana bilər, əgər built-in package-lər varsa niyə Netbeans-də “com.ZJAVAKITABI” paketi
kimi solda görünmürlər. Bu OOP-dən yadınızdadırsa Encapsulasiya-nı xatırladır. Proqramın funksiyası var
amma özü görsənmir. Hazır class-ların çox olduğunu nəzərə alsaq Oracle-ın bu üslubu niyə seçdiyini
anlamaq çətin deyil.
İmport
Built-in Package-lər İmport(idxal etmək, daxil etmək) əmri vasitəsilə istifadə olunur. Çağırılmış paketlərin
tərkibində funksiya göstərməyə hazır proqramlar və tətbiq olunmağı gözləyən method-lar mövcuddur.
Aşağıdakı misalda təqvim və tarixi əldə etmək üçün “java.util.java” paketindən istifadə olunmuşdur.
36
İmport –dan sonra çağırmaq istədiyiniz paketin adı yazılır. Paketin adı yazıldıqdan sonra onun daxilindəki
method-lar çağırılmağı gözləyir. Belə ki, bizdə sadə şəkildə “tarixdeyiseni”-nə həmin dəyərləri vermişik. Hər
bir paketin və ya method-un istifadə olunma qaydası var. Bunlar Oracle-ın səhifəsində hər paket üzrə ayrıca
izah edilmişdir.
Access control(akses kontrol – girişin idarə olunması)
Access control yazdığınız class-ların, onların tərkibindəki method-ların və ümumilikdə yaratdığınız
obyektlərin çağırılması və ya onlara müdaxilə olunması qaydalarını tənzim edir. Aşağıdakı cədvəldə public,
private(prayvet-xüsusi) və protected(protektd-qorunan) access control əmrləri təsvir edilib.
Y-yes(bəli) N-no(xeyr)
Əsasən proqramlar private və ya public olaraq təyin edilir. Belə ki, public əmrini istifadə etsək proqram bütün
siniflər üzrə açıq olur. Private sadəcə class daxilində proqramı istifadə olunmasını təmin edir. Digər pakage-
lər onu görmür. Protected bir o qədər də istifadə olunmayan əmrdir və demək olar ki, public onu hər yerdə
əvəz edə bilir. No modifier(modifayə) bəndində hər hansı bir əmr bildirilməzsə o zaman pakage-in ümumi
access control dəyəri avtomatik mənimsədilir.
37
Method nədir?
Method bir növ dəyişənə bənzəyir. Hər hansı bir dəyər ona verilmiş ada mənimsədilir. Aşağıdakı misalda
method(); -un yazılış şəkli göstərilmişdir. Dəyişəndən fərqli olaraq method-un daxilindəki dəyər ondan
aşağıda main-dən yəni əsas proqramdan ayrı amma eyni class-ın daxilində yazılır. Method yaratmaq üçün
bizə 4 parametr lazımdır.
1.
Access control – public, private, protected
2.
Return type – void(method-dan nəticə qaytarmır), return(hesablayıb nəticə qaytarır)
3.
Name – hər hansı bir ad verilir
4.
Parameter – istifadə edəcəyi parametrlər(dəyərlər)
Bildirdiyimiz kimi method-un hesablama hissəsi main-dən ayrı yazılır. İkinci “ public static int method”
yazılan hissədən başlayaraq izah edək.
Method-da class kimi access control əmrlərini tələb edir. Method-un public olması onun bütün
proqramlar tərəfindən çağırıla bildiyini göstərir.
Static yazılması instansının olmaması deməkdir.
Burada “ İnt” return type-dır. Mötərizə daxilindəki dəyərlər integer tiplidir və return type-da istifadə
olunacaqdır. Return özü proqramın sonunda yazılmasına baxmayaraq qaytaracağı nəticənin tipini
əvvəlcədən qeyd etməyi tələb edir.
Sonra method-a ad verilir.
Ad veriləndən sonra mötərizə açılır parametrlərin tipi və adı yazılıb mötərizə bağlanır. Mötərizə
daxilində main body-də olan və method-da istifadə olunacaq parametrlər yazılır. Yuxarıdakı misalda
a və b parametrləri götürülüb və onların tipi integer-dir. Əgər nəticə qaytarılmayacaqsa tipin yerinə
void yazılır.
Aşağıda return type-ı void ilə dəyişdirib fərqi göstərmişəm. Void yazıldığı zaman misalın tamamən dəyişməsi
lazımdır. Dəyərlər hesablanıb geri qaytarılmayacağı üçün method-un funksiyasıda anlaşılmır və aşağısından
qırmızı xətt çəkilərək səhv qeyd edilib.
38
Void-dan aşağıdakı kimi düzgün istifadə etmək olar.
Void-lə method yaratdığımız zaman method istifadə olunan yerdə öz dəyərini əks etdirir amma onu hər hansı
bir hesablamada istifadə etmək olmur çünki dəyərinin hansı tip olması bəlli deyildir.
Dostları ilə paylaş: |