android'e giriş eğitimleri 1_1
TRANSCRIPT
Android‘e Giriş Eğitimi Dökümanları 1/1
Android Uygulama Geliştirme Ortamının İncelenmesi Bilgi Teknolojisi Eğitim Programları
Bu Çalışma Univerist Materyal geliştirme ekibi tarafından Bilgi Teknolojileri Eğitimleri için derlenmiştir. Dökümanla ilgili kaynaklar
makalenin sonunda “Kaynakça” kısmında detaylı bir şekilde belirtilmiştir.
1
1.ANDROİD EĞİTİMLERİNE BAŞLARKEN...
Android işletim sistemine mobil uygulama geliştirirken kullanılacak en temel programlama dili
Java'dır. Java ile ilgili genel bilgilere buradan ulaşabilirsiniz.
Android tüm bileşenleriyle son derece geniş bir ekosistemdir. Bu ekosistemin anlatımında aşağıdaki
başlıklar temel alınmıştır:
Android’e Giriş 1 eğitiminde, temel Java bilgisine sahip olmanız ve basit Java uygulamalarını
bilgisayarınızda çalıştırabilmeniz hedeflenmektedir. Java dünyasıyla ilk kez tanışacaklar için hem
dilin temel kavramları hem de uygulamaya yönelik kod örnekleriyle birlikte bir anlatım esas
alınmıştır.
Android’e Giriş 2 eğitiminde, Android platformunun detaylarına ve geliştirme ortamına değinilmiştir.
Platform özelinde bilgiler, cihazların özellikleri ve Android için geliştirme ortamının kurulumu yer
almaktadır.
içindir.
2.JAVA GELİŞTİRME PAKETİ'NİN (JDK) KURULUMU
Java uygulamaları geliştirmek istiyorsanız, öncelikle onu geliştireceğiniz ve derleyip çalıştıracağınız
araçları temin etmeniz gerekir. Geliştirme ortamı olarak Geleceği Yazanlar'da Eclipse'i kullanıyoruz.
Eclipse'i nasıl kuracağınızı öğrenmek için Eclipse IDE'sinin Kurulumu belgesine bakabilirsiniz.
Bir Java uygulaması, sadece yazdığınız *.java dosyalarıyla çalışmaz. Hiçbir görevi yerine getirmese
bile (açılıp kendini kapatan bir uygulama yapsanız bile) bazı altyapı ihtiyaçları vardır. Derlenmesi ve
üzerinde çalışacağı işletim sistemine uygun biçimde paketlenmesi gerekir. Bu altyapı ihtiyaçlarını
karşıladıktan sonra yazdığınız Java kodunu herhangi bir işletim sisteminde çalıştırabilirsiniz.
Java uygulamasını farklı işletim sistemlerinde aynı şekilde çalıştırabilen aracın adı Java Sanal
Makinesi'dir (Java Virtual Machine). Java Sanal Makinesi, bytecode bulunduran *.class dosyalarını
çalıştırır. Yazdığınız *.java kodunu *.class dosyasına çeviren aracın adı da javac'dir.
Java Geliştirme Paketi (JDK), normalde sadece Java uygulamaları çalıştırmak için gereken Java
Çalışma Zamanı Ortamını (Java Runtime Environment - JRE) da içinde barındırır. JRE içinde Java
Sanal Makinesi (JVM) ve açık kaynak kodlu Java API'leri yer alır.
Java kodunu bytecode'a çevirmek (javac'nin işi), onu JVM'e yüklemek (java'nın işi) ve farklı işletim
sistemlerinde çalıştırmak (JVM'in işi) gibi işlemlerin yanında Java uygulamaları geliştirmek ve
çalıştırmak için gerekli tüm araçları bulunduran Java Geliştirme Paketi'nin (JDK) kurulumunu bir
sonraki içeriklerde bulabilirsiniz.
2.1.Windows Ortamında Java Geliştirme Paketi (JDK) Kurulumu
Java Geliştirme Paketi (JDK) işletim sisteminizle birlikte kurulu gelmemektedir. Bu nedenle, önce
bilgisayarımıza JDK'yı kurmamız gerekiyor. Farklı bir sebepten ötürü JDK'yı daha önce kurmuş
olsanız bile, Android geliştirme ortamı tarafından desteklenen güncel JDK 7 sürümünü kullanmanızı
salık veririz.
2
Oracle tarafından JDK 8'in duyurulmuş olması, kafanızı karıştırabilir. Aklınız karışmasın, çünkü JDK
7 (Java 1.7) güvenlik güncellemeleri yapılan ve Android geliştirme araçlarıyla uyumlu olan sürüm.
JDK 8'i kullanmanız durumunda, projelerinizde çeşitli sorunlar yaşayabilirsiniz.
Eğitimlerdeki anlarımlarımız bu yazının hazırlandığı 7u67 sürümüne göre yapıldı. Anlatımda verilen
kodlar, JDK 7'nin güncel her sürümünde aynı şekilde çalışacaktır.
Bu bağlantıdan JDK 7 indirme sayfasına ulaşalım.
Aşağıdaki ekran görüntülerinde belirtildiği gibi, sayfada önce JDK indirme düğmesine bastıktan
sonra lisans koşullarını kabul ederek, işletim sistemimize uygun JDK sürümünü indiriyoruz. Bu
anlatımda Windows 32 bit sürümü (x86) esas alındı, ancak sizin bilgisayarınızın işletim sistemine
uygun indirme bağlantısını seçmeniz gerekiyor.
İşletim sisteminiz 64 bit ise, ilgili bağlantıdan JDK'nın 64 bit sürümünü indirmenizin daha isabetli
olacağını hatırlatmakta fayda var.
NOT: JDK kurulumu sırasında varsayılan ilerleme yollarını takip etmeniz, kurulumun sonraki
anlatımlardaki sıraya uygun şekilde ilerleyebilmesi için önemlidir. Bu yüzden ilk kez kurulum
yapacakların, JDK kurulumunu varsayılan şekilde, dosya kayıt yerlerini değiştirmeden yapmaları
önerilir.
3
Sisteminizin Kaç Bit Olduğunu Nereden Bulacaksınız?
Windows 7 kullanıcıları Denetim Masası > Sistem ve Güvenlik > Sistem yolunu takip ederek,
aşağıdaki ekran görüntüsünde olduğu gibi bu durumu kontrol edebilirler:
Windows 8 kullanıcıları Denetim Masası > Sistem ve Güvenlik > Sistem yolunu takip ederek,
aşağıdaki ekran görüntüsünde olduğu gibi bu durumu kontrol edebilirler:
2.2.Mac OS X Ortamında Java Geliştirme Paketi (JDK) Kurulumu
Bu eğitim içeriğinde JDK'yı Mac OS X yüklü bilgisayarınıza nasıl kuracağınızı öğreneceğiz.
Öncelikle buradan JDK indirme sayfasına gidip aşağıdaki adımları uygulamanız gerekir. JDK hakkında detaylı
bilgiye de buradan ulaşabilirsiniz.
4
İndirme sayfasında "Mac OS X x64" için verilen dosyayı indirin.
Dosyayı çalıştırdığınızda aşağıdaki ekranla karşılacaksınız. Çıkan simgenin üstüne çift tıklayın.
JDK'nın aşağıdaki yükleme penceresi açılacak. Adımları "Continue" ile geçerek yüklemeyi
tamamlayın.
5
JDK başarıyla cihazınıza yüklendi.
2.3.Linux Ortamında Java Geliştirme Paketi (JDK) Kurulumu
Standart Java platformunun açık ve özgür bir gerçekleştirimi olan OpenJDK'yi (Open Java
Development Kit) kullanmak veya Oracle'ın sunduğu Oracle Java SE JDK'yi kullanmak. Oracle JDK,
özellikle yeni tümleşik geliştirme ortamı Android Studio'yu tercih edenler için IDE'nin geliştiricisi
(Google) tarafından öneriliyor. Onun dışında Android uygulaması geliştirirken standart Java
kütüphanelerinden faydalandığınız için bu iki JDK'den istediğinizi seçebilirsiniz.
6
OpenJDK'yi çoğu Linux dağıtımında paket yöneticisiyle kurmak kolayken Oracle'ın sunduğu JDK'yi
kurmak için ek birkaç adım atmak gerekiyor. Lisans durumları, dağıtım şeklini biraz etkiliyor.
Şuradaki aşamaları takip ederek istediğinizi kurabilirsiniz.
OpenJDK kurulumu
Paket yöneticiniz, kullandığınız Linux dağıtımına göre değişmekle beraber, kurmanız gereken paket
genellikle openjdk-7-jdk ismini alır. Bu paketi Ubuntu Linux'ta Terminal aracılığıyla şu sırayla
kurabilirsiniz:
Öncelikle şu komutu yazarak paket listenizi güncelleyin: sudo apt-get update
Ardından aşağıdaki komut ile openjdk-7-jdk ve openjdk-7-jre'yi kurun:
sudo apt-get install openjdk-7-jdk openjdk-7-jre
Bağımlılıkları kurmak için onayınızı "E" tuşuyla evet olarak verdikten sonra OpenJDK sisteminize
kurulmuş olacaktır. Konsola
java -version
komutunu verdiğinizde OpenJDK'nin son sürümünü kullanıyor olduğunuzu görebilirsiniz.
Oracle JDK kurulumu
Oracle JDK, bazı lisans nedenlerinden dolayı resmi Ubuntu depolarında yer almıyor. Ancak yine de
paket yöneticisiyle kurmak mümkün. Bunun için gönüllülerin oluşturduğu depodan ve oradaki bir
paketten faydalanacağız. Dünya çapında büyük Ubuntu kullanıcı kitlesinin takip
ettiği WebUpd8 takımı, bizler için bir depo oluşturmuş.
Öncelikle bu paketi depomuza ekleyeceğiz. Terminal'i açıp şu komutu verin:
sudo add-apt-repository ppa:webupd8team/java
Ardından bu yeni depodaki paketlerin de ulaşabilir olması için paket listenizi şu komutla güncelleyin:
sudo apt-get update
Şimdi de bize Oracle JDK'i indirip hazır edecek olan paketi şu komut ile kurun:
sudo apt-get install oracle-java7-set-default oracle-java7-installer oracle-jdk7-installer
Bu komuttan sonra Oracle'ın sunucularından sisteminize uygun JDK paketi indirilecek ve
kurulacaktır. Bunun süresi bağlantı hızınıza göre değişebilir.
JDK kurulumunu yaptıktan sonra tekrardan konsola:
java -version
komutunu vererek hangi Java sürümünü kullandığınızı görebilirsiniz.
3.ECLİPSE GELİŞTİRME ORTAMININ KURULMASI
Buraya kadar geldiğinize göre temel gereksinim olan Java Development Kit'i (JDK) kurma görevini
yerine getirmiş olmalısınız. Bundan sonrasında Java uygulamalarını daha hızlı geliştirmek için bir
tümleşik geliştirme ortamı (Integrated Development Environment) kullanmanız gerekiyor. Tümleşik
7
geliştirme ortamlarıyla kolayca proje oluşturabilir, kod yazarken yardım alabilir, renklendirilmiş
kodlarla kodunuza daha kolay hakim olabilir, hata durumlarını önceden fark edebilirsiniz.
Standart Java Uygulamaları Geliştirmek için Eclipse
Android 1 eğitim içeriklerinde Java programlama dili üzerine yoğunlaşacağınız için standart Java
uygulamaları geliştirmenize yardımcı olacak Eclipse'i kullanacağız. Bu yüzden Java dilini öğrenirken
Eclipse'i kullanmanızı ve Android uygulaması geliştirmeye başladığınızda da Android Studio'yu
kullanmanızı öneriyoruz.
Elbette ki Java öğrenirken Eclipse yerine NetBeans, IntelliJ IDEA gibi farklı IDE'leri de tercih
edebilirsiniz.
Ne Zaman Android Studio Kullanmaya Başlayabilirsiniz?
Android projeleri için uzun süre kullanılan emektar Eclipse IDE'si, yerini daha esnek ve geliştiricilere
çok daha fazla olanak sunan Android Studio'ya bırakıyor. Bu nedenle Android uygulaması
geliştirmeye başladığınız Android 201 bölümünde geliştirme ortamı olarak Android Studio'yu
kullanabilirsiniz. Android Studio'nun nasıl kurulacağını yine Android 201 bölümündeki eğitim
içeriklerinde bulabilirsiniz.
Sıradaki eğitim içeriğinde Eclipse tümleşik geliştirme ortamının (IDE) Windows, Mac OS X ve Linux
ortamlarında nasıl kurulduğunu görebilirsiniz.
3.1.Eclipse IDE'sinin Windows Ortamında Kurulumu
Eclipse sürekli güncellenen bir IDE olduğundan, bu sayfada yer alan ekran görüntüleri ve sürüm
numaraları güncel sürümlerden farklılık gösterebilir. Eclipse IDE'yi işletim sisteminize uygun
olarak buradan indirebilirsiniz.
8
Yukarıda gösterildiği gibi indirdiğiniz Eclipse IDE'si, bilgisayarınıza .zip formatında kaydedilecek.
Bundan sonra tek yapmanız gereken, sıkıştırılmış .zip klasörünü istediğiniz bir yere açmak. Açtıktan
sonra oluşan Eclipse klasöründe eclipse.exe çalıştırabilirsiniz.
Not: Eclipse IDE'sinin ilk açılışı biraz zaman alabilir. Bu açılış ve kullanım süreleri, özellikle emülatör
kullanımı sırasında, bilgisayarınızın donanımına bağlıdır.
3.2.Eclipse IDE'sinin Linux Ortamında Kurulumu
Linux kullanıcıları Eclipse'i şu iki yolla kurabilir:
1. Eclipse resmi sitesi
2. Paket yöneticisi
Eclipse Resmi Sitesi Üzerinden Eclipse'in Kurulumu
Öncelikle Eclipse'in doğrudan çalıştırılabilir halini bu bağlantıdan indirmelisiniz. Kullandığınız Linux
dağıtımının kaç bitlik bir mimaride olduğunu bilmiyorsanız, Terminal'e getconf LONG_BIT komutunu
yazarak bunu öğrenebilirsiniz.
Eclipse.org'tan uygun Eclipse sürümünü indiriniz. İndirdiğiniz "*.tar.gz" uzantılı dosya hangi dizinde
ise o dizine girip tar -xvzf eclipse*.tar.gz komutunu çalıştırarak sıkıştırılmış dosyayı bir dizine
çıkartmalısınız. Böylelikle eclipse.org'tan son sürümünü indirdiğiniz Eclipse artık çalıştırılmaya hazır.
Sırasıyla cd eclipse/ ve ./eclipse komutlarını çalıştırdığınızda Eclipse IDE'sinin çalıştığını göreceksiniz.
9
Paket Yöneticisi ile Kurulum
Linux dağıtımlarında paket yöneticisi yardımıyla birçok yazılımı kolayca kurarsınız. Örneğimizde
Ubuntu Linux'un Aptitude isimli paket yöneticisini kullanacağız. Öncelikle terminale geçip sudo apt-
get install eclipse komutunu yazın ve çalıştırın. Bu sayede Eclipse'in Ubuntu depolarında yer alan
sürümü bilgisayarınıza kurulacak. Diğer yol ise Eclipse IDE'sini Ubuntu Yazılım Merkezi'ni
kullanarak kurmaktır:
4.BİR JAVA PROGRAMININ IDE ORTAMINDA ÇALIŞTIRILMASI
Uygulamanızı komut satırında çalıştırmaktan daha kolay ve hızlı bir yöntem, mevcut Eclipse IDE'sini
kullanmaktır. Eclipse sayesinde hem uygulamalarınızı daha kolay bir şekilde hazırlar hem de anında
çıktılarını gözlemleyebilirsiniz. Android 101 eğitimlerinde basit Java uygulamaları yazacağımız için,
sizlere kurulumunu anlattığımız Eclipse IDE'si üzerinden bu uygulamaları nasıl çalıştırabileceğinizi
göstereceğiz.
Eclipse Geliştirme Ortamı başta son derece karmaşık gibi görünse de, Android 101 eğitiminde
işleyeceğimiz konuların tamamını kapsayacak şekilde bir kurulum yöntemiyle bu durumun
üstesinden geleceğiz.
Eclipse IDE'sini bilgisayarımıza kurup çalıştırdıktan sonra bizi karşılayacak ilk ekran aşağıdaki gibi
olacaktır:
Burada öntanımlı olarak projemizi çalıştıracağımız ortamı seçmemiz istenecektir (bu klasör
genellikle workspace olarak adlandırılır). İsterseniz siz bu yolu ve klasörü değiştirebilirsiniz fakat
anlatım bu yola göre esas alınacağı için yeni başlayanların değiştirmemesini öneririz. Sonrasında
Eclipse IDE'sinin tanıtım ekranı sizi karşılayacaktır:
10
Bu ekran geliştirme ortamına yeni başlayacak kişilere yardımcı olması amacıyla hazırlanmıştır. Bu
açılış sekmesi yalnızca ilk açılışta çıkacaktır.
Bu sekmeyi kapattığınızda, karşınıza boş Eclipse çalışma ortamı gelecektir:
11
Yeni Java Projesi oluşturmayı seçtikten sonra
aşağıdaki pencere açılacaktır. Buradan gerekli
ayarlamaları yaptıktan sonra Next diyerek
ilerliyoruz.
Önemli Not: Kullandığınız JDK sürümünü
burada seçmek çok önemlidir. Eğer JDK 1.8
kullanıyorsanız, lütfen Use a project specific
JRE seçeneğini bu şekilde işaretleyin:
12
13
Bu pencerede dikkat etmemiz gereken, aşağıdaki ekran görüntüsünde belirttiğimiz şekilde, "add
project to build path" seçeneğini işaretlemektir. Bu şekilde tanımlandığında yeni eklenecek class'lar
projenizin yoluna eklenmiş olacaktır. Seçmediğiniz takdirde, mevcut projenizden bağımsız, class
veya diğer bileşenleri de yine Eclipse üzerinden geliştirebilir, sonrasında bu yola ekleyebilirsiniz:
Finish düğmesine tıkladıktan sonra, artık ilk Java projemizi oluşturmuş olduk. Şimdi projemize yeni
bir class eklememiz gerekiyor. Bunun için yine Eclipse ekranında sol sütünda yer alan projenin
üstüne gelip sağ tıklayın ve aşağıdaki ekrandaki yönergeleri izleyerek yeni bir class oluşturun:
14
Yeni bir class oluşturmak istediğimizde bizi aşağıdaki pencere karşılayacaktır ve gerekli adımları
yine bu ekrandan takip ederek Finish düğmesi ile sonlandırabiliriz:
Artık ileride alacağınız eğitimlerde, sizlerle paylaştığımız kodları ve yeni uygulamalarınızı
hazırlayabileceğiniz geliştirme ortamınız kurulmuştur. Bundan sonra tek yapmanız gereken
uygulamanızı yazmak ve RUN seçeneğini kullanarak onu çalıştırmaktır. Bunun için sizlere aşağıdaki
gibi bir örnek kod parçası verelim:
1. public class Test {<br />
2. public static void main(String args[])<br />
3. {<br />
4. System.out.println("Guzel Yurdum Turkiye");<br
/>
5. }<br />
6. }
Bu kodu Eclipse editörümüze aynen yazalım ve RUN seçeneği ile çalıştırarak, hemen altta konsol
çıktısını kontrol edelim:
15
Önemli Hatırlatma: Daha önce çalıştırdığınız bir uygulamayı aynı workspace içerisinde tekrar
çalıştıramayabilirsiniz. Bu yüzden Eclipse ortamına yeni çalışmaya başlayanlar için aynı adlı
uygulamalarınızı tekrar denemek istediğiniz de farklı bir workspace tanımlamanızı öneririz.
5.JAVA PROJESİNİN VE ECLİPSE'İN TEMELLERİ
Bu bölümde sizlere Java'da programlamaya başlamadan önce bilmeniz gereken bazı bilgileri
vereceğiz.
Yeni Bir Proje Oluşturmak
Bundan sonraki bölümlerde Java ve Android uygulamaları geliştirmek için Eclipse adlı IDE'yi tercih
edeceğiz. Eclipse’de yeni bir Java projesi oluşturmak için File -> New -> Java Project seçeneğini
seçmeniz yeterlidir.
16
Daha sonra karşımıza çıkan sihirbaz bize projemizle ilgili birtakım özellikleri belirtmemizi ister.
Burada projenizin adını ve hangi Java sürümünde çalışacağı bilgisini girdikten sonra projeyi
başlatabilirsiniz:
Yeni bir proje oluşturduktan sonra Eclipse'in sol tarafında proje dosyalarımızı görebiliriz (kırmızı
kutu). Orta bölgede ise seçilen dosyayla ilgili bir editör penceresi açılacaktır (mavi kutu). Alt bölümde
proje ile ilgili çeşitli bilgileri görebileceğimiz bir pencere yer alır. Bu bölümde hazırlayacağımız
uygulamaların konsol çıktılarını Console adlı pencereden takip edebiliriz (yeşil kutu).
NOT: Bu bölümde yapacağımız Java uygulamalarında kullanıcıya gösterilecek çıktılar veya
kullanıcıdan alınacak girdiler bu pencere aracılığıyla iletilir.
17
Projenin Anatomisi
Bir Java projesinde kaynak kodlarımız src adlı klasörde tutulur. Oluşturacağımız her türlü Java
uzantılı dosya (Java sınıfları) bu klasörde saklanır ve uygulamayı çalıştırdığımızda bu klasör içinden
derlenir. libklasör ise harici Java kütüphanelerini projemize eklemek için kullanılan jar dosyalarının
saklandığı klasördür.
NOT: Herhangi bir jar dosyasını projeye ekleyerek içerisindeki sınıfları kullanmak için
bir jar dosyasını sağ tuşla tıklayarak Build Path -> Add to Build Path demeniz yeterlidir.
6.JAVA YAZIM KURALLARI VE ÖNERİLERİ
Her dilin olduğu gibi programlama dillerinin de kendi içinde belli kuralları var. Bu kurallara uyarak
yorumlayıcıya veya derleyiciye kodunuzu doğru biçimde ifade edebilirsiniz. Öncelikle neden
ihtiyacımız olduğuna değinelim: (Kaynak: Oracle Code Conventions)
Yazılım üretimindeki %80'lik zaman dilimi, kod bakımına (maintenance) harcanıyor.
Çok az yazılım, yaşamı boyunca ilk yazarınca geliştirilir.
Kod yazma gelenekleri yazılımın okunmasını ve anlaşılmasını kolaylaştırır.
Mühendislerin yeni kodu hızlı ve verimli bir şekilde anlamasını sağlar.
Kodunuzu açmaya karar verdiğinizde daha anlaşılır olacağı için daha kolay destek bulursunuz.
Android için Java kodu yazarken bu belgede önerilen bazı kurallara mutlaka uymanız gerekiyor.
Bunun yanında geleneksel olarak kabul görmüş bazı önerileri de burada bulabilirsiniz.
Değişken tanımlama kuralları ve önerileri
Fonksiyon tanımlama kuralları ve önerileri
Sınıf tanımlama kuralları ve önerileri
Yorum satırı önerileri
18
6.1.Değişken Tanımlama Kuralları Ve Önerileri
Kural: Bir değişken yazarken önce onun tipini, sonra adını yazmalısınız:
Öneri: Değişken ismi yazmanın belli kuralları var. Örneğin CamelCase kuralıyla isimlendirme
yaparken isimlerin ilk harfi büyük olmalı. Eğer değişken ismi iki kelimeden oluşuyorsa ikinci
kelimenin de ilk harfi büyük olmalı. Örn:
Integer UyeSayisi
Öneri: Geleceği Yazanlar'da genellikle Mixed Case olarak isimlendirilen, ilk harfinin küçük olması
dışında CamelCase'e benzeyen yaklaşımı tercih ediyoruz. (Çünkü CamelCase, çoğunlukla sınıf
isimlendirmelerinde kullanılır) Örn:
Integer uyeSayisi
Kural: Değişken isimlerinde Türkçe karakter kullanamazsınız.
Kural: Değişken adları rezerve edilmiş Java sözcüklerinden oluşamaz (int, float, public, static,
volatile vs). Bu sözcükler Java derleyicisinde bir anlam ifade ettiğinden değişken adı olarak
kullanılamazlar.
Kural: Değişken isimleri rakamla başlayamaz ancak içinde rakam olabilir. Örn:
Integer dogrulamaKodu2;
Öneri: Sabit-değeri değişmeyen değişkenleri büyük harfle ve kelime aralarına alt çizgi koyarak
yazınız. Örn:
public static final Integer VARSYLN_CARPISMA_KATSAYISI;
Öneri: Java'da uygulamalar sınıflar halinde yazılır. Ayrıntılarını ilerleyen bölümlerde göreceksiniz.
Bir sınıfın üyesi olacak değişken tanımlayacağınız zaman onun isminin önüne m getirebilirsiniz.
Böylelikle kodunuzu okuyan kişi, bu değişken ismini nerede görürse görsün, sınıfın üyesi
(member) olduğunu anlayacaktır.
19
Örn:
1. public class ProfileTask {
2.
3. private Integer mArkadasSayisi;
4.
5. }
Öneri: Bazı sınıf değişkenleri static olarak tanımlanırlar. Böyle değişkenlerin adının önüne s ön eki
getirebilirsiniz. Bu da onun diğer değişkenlerden ayrılmasını kolaylaştırılacaktır. Örn:
1. public class ProfileTask {
2.
3. private Integer mArkadasSayisi;
4. private static Integer sEtkinIslemSayisi;
5.
6. }
Öneri: Fonksiyonlara parametre olarak gönderdiğiniz değişken isimlerinin önüne alt çizgi
koyabilirsiniz. Böylelikle fonksiyon içinde çalışırken hangisinin parametre, hangisinin sınıfın ya da
nesnenin kendi değişkeni olduğunu karıştırmamış olursunuz. Örn:
1. public class ProfileTask {
2.
3. private Integer mArkadasSayisi;
4. private static Integer sEtkinIslemSayisi;
5.
6. ...
7.
8. public static Boolean isEtkinIslemSayisiBigger(Integer _islemSayisi) {
9. if (_islemSayisi>sEtkinIslemSayisi) {
10. return true;
11. } else {
12. return false;
13. }
14. }
15.
16. ...
17.
18. }
20
6.2.Fonksiyon Tanımlama Kuralları Ve Önerileri
Kural: Bir fonksiyonun işini bitirdikten sonra döndüreceği değerin tipi fonksiyon adından önce yazılır.
Örneğin:
1. public Integer getArkadasSayisi(){
2. return mArkadasSayisi;
3. }Burada getArkadasSayisi() isimli fonksiyonun Integer türünden değer döndüreceğini
anlıyoruz.
Öneri: Kendi oluşturduğunuz fonksiyonların isimlerini fonksiyonun görevini ifade edecek
şekilde seçmelisiniz. sayi() yerine getDersSayisi() gibi.
6.3.Sınıf Tanımlama Kuralları Ve Önerileri
Kural: Sınıf ismiyle, o sınıfı sakladığınız dosyanın ismi aynı olmalıdır.
Örneğin LoginManager sınıfıLoginManager.java dosyasında saklanmalı.
Kural: Sınıf isimleri verirken değişken tanımlarken uyguğunuz kurallara uymalısınız.
Öneri: Sınıfları isimlendirirken fiilleri kullanmak yerine özellikle isimler kullanmalısınız. Çünkü sınıflar
gerçek hayattaki nesnelerin karşılığıdır. Örneğin User, UserManager birer isimdir. Register, Login,
Delete gibi işlemler birer fiildir.
Öneri: Sınıf isimleri CamelCase biçiminde verilmelidir.
public class usermanager {...}
yerine
public class UserManager
kullanmak kodunuzu daha okunur kılacaktır.
6.4.Yorum Satırı Kuralları Ve Önerileri
Yazılan kodu ister siz ister başkası yazmış olsun, sonradan okuyan herkes için kodu anlatmanın en
kolay yollarından biri ona yorumlar bırakmaktır. Java'da satıra ya da birçok satıra blok olarak yorum
koyulabilir.
Kural: Java'da bir yorum satırı oluşturmak için satırın başına "//" (iki tane bölü işareti) getirmek
yeterlidir. Birden fazla satırı aynı anda yorum satırı haline getirmek için tek tek hepsinin başına "//"
koymak yerine en baştaki satıra "/*" ve en sondaki satırın sonuna da "*/" koymak yeterlidir.
Örnek:
1. /*public Integer getArkadasSayisi(){
2. return mArkadasSayisi;
3. }*/
21
4. ...
5.
6. public static Boolean isEtkinIslemSayisiBigger(Integer _islemSayisi) {
7. if (_islemSayisi>sEtkinIslemSayisi) {
8. return true;
9. } else {
10. //return false;
11. return 0;
12. }
13. }
14.
15. ...
Öneri: Bir sınıfı tanımlarken o sınıfın ne işe yaradığını hemen sınıf tanımlamasının üzerine
yazabilirsiniz. Örneğin:
1. /*
2. * Kullanıcının ilk göreceği Activity sınıfıdır.
3. *
4. * Burada iki adet farklı giriş seçeneği sunulmaktadır. Bunlar
5. * LoginService ve SignupService isimli servislerle konuşur.
6. *
7. */
8. public class MainActivity extends Activity {
9.
10. ...
11. }
7.JAVA DİLİNDE KÜTÜPHANELER
Programlamadaki anlamıyla kütüphane, birçok sınıfı, fonksiyonu bir arada bulunduran, özel bir
amaca yönelik yazılmış kodlar topluluğudur. Paket, kitaplık veya modül olarak da adlandırılır.
Java'da daha çok paket olarak anılır. Kütüphane kullanarak bir programlama diliyle
yapabileceklerinizi artırabilirsiniz ve çoğu zaman işlerinizi kolaylaştırırsınız.
Java programlama dili, kütüphaneler bakımından çok zengin bir dildir. Çekirdek Java, eski sahibi
olan Sun MicroSystems tarafından özgür ve açık kaynaklı olarak 2007 yılında sunuldu. Bu tarihten
sonra özgür ve açık kaynaklı kütüphanelerin sayısı da epey artmıştır.
Bu eğitim içeriğinde Java'daki paket yapısına, Java'nın temel kütüphanelerine ve onları kaynak
koduna nasıl ekleyebileceğimize değineceğiz.
22
7.1.Bir Kütüphaneyi Kullanmak
Kütüphanedeki sınıfları kendi kodumuza dâhil etmek için o sınıfı nasıl çağıracağımızı bilmemiz
gerekir.
package ifadesi
Bir önceki eğitim içeriğinde Java'da kodların sınıf içinde yazıldığına değinmiştik. Sınıflar, bir
programın temel birimleridir. Daha düzgün yapılandırılmış, kolay anlaşılır programlar için paket içine
alınmalıdırlar. Yazdığınız bir sınıfı paket içinde ifade etmek için, kodunuzun en tepesine
package paketadı;
ibaresini eklemeniz gerekir. Böylece yazdığınız sınıf bir paketin altında yer alacak şekilde
çağrılabilecektir.
Paket içine alınmış VideoActivity isimli sınıfın Eclipse'te nasıl göründüğüne ilişkin bir örnek:
Not: Bir Java sınıfını package ifadesiyle kullanma kararı programcıya aittir. Kodu daha iyi
gruplayabilmek için paket kapsamına almak iyi bir alışkanlıktır.
import ifadesi
Kütüphanenin içindeki bir sınıfı kodunuza dahil etmek için, Java kodunuzun en tepesine
import paketadı.sınıfadı;
ibaresini eklemelisiniz. import ifadesinden sonra eklemek istediğiniz kütüphanenin paket adını ve
sınıf adını koyarsınız. Bu paket adı eşsiz bir ifadedir ve o kütüphaneye özeldir.
Ufak bir örnek:
Android'te yazılım geliştirme yaparken birçok import ifadesiyle karşılaşacaksınız. Örneğin bir yerde
düğme (Button sınıfı) kullanmak için
import android.widget.Button;
ifadesini kodunuzun tepe kısmına eklemeniz gerekecektir. Böylece Button sınıfını doğrudan kendi
kodunuzda kullanabilir duruma gelirsiniz. Button ibaresinden önceki android.widget, Button sınıfının
23
paket adı oluyor. Eğer Button.java dosyasına ulaşırsanız ilk satırın package
android.widget; olduğunu görebilirsiniz.
Not: Kod yazarken import ifadesini eklemeyi unutsanız da çoğu IDE size bunu hatırlatacaktır.
7.2.Java'daki Temel Kütüphaneler
Android'in üzerine inşa edildiği kütüphanelerin çoğu Java diliyle yazılmış kütüphanelerdir. Java'nın
da temel kütüphaneleri vardır. Genelde saf Java kodlarken kütüphane ekleme konusunda pek bir
şey yapmazsınız. Örneğin Windows, Linux ya da Mac OS X yüklü bir bilgisayarda konsol ekranına
bir şeyler yazdırmak için
System.out.println("Ekrana yazilacak bir seyler...");
kullanırsınız. Bu println metodunu Android 101'deki temel Java'dan bahseden derslerin birçoğunda
göreceksiniz. println metodu, aslında java.lang paketinin içindeki System sınıfında yer alan bir
metottur. Fakat kodunuzun tepesinde
import java.lang.System;
gibi bir ekleme yapmanıza gerek duyulmaz. Çünkü kodunuz derlenirken java.lang paketinin altındaki
sınıflar otomatik olarak Java Sınıf Yükleyici tarafından kodunuza eklenir. Çünkü java.lang, Java
uygulamalarının çalışması için gerekli en temel pakettir. Java'daki tüm sınıfların atası Object sınıfı
dahi, java.lang paketinin içindedir.
Sınıflar ve metotları konusunda ilerleyen derslerde daha ayrıntılı açıklamalar bulabilirsiniz.
8.JAVA DİLİNDE İFADELER VE İŞLEM OPERATÖRLERİ
Yazdığınız program bir veri üzerinde işlem görecekse, öncelikle o verilerin tanımlanması gerekir. Bu
tanımlanma bilgisayarın o verileri nasıl ve hangi şekilde kullanacağının önceden belirlenmesi olarak
da nitelendirilebilir. Java dilinde kullanılacak ifadeler ve işlem operatörleri de bu başlıkta anlatılmıştır.
Sabitlerden Oluşan İfadeler
Sabitler; değişkenler gibi veri tutan sınıf öğeleridir. Ancak C dilinde olduğu gibi sabit öğe kavramı da
yoktur. Java'da sabitler bir değişken bildirimi yaparak hareket ederler. Sabitlere atanan değerler
değiştirilemez ve sabit bildirimi yapıldığı anda değeri atanmalıdır.
Sabitlerden (constants) oluşan ifadeler, sadece sabit ve operatör içerirler. Örneğin;
17 + 2
3
'b' – 200 / 3
24
Burada ilk ifadenin sonucu 19 sabitidir. İkinci ifade zaten sadece 3 sabitinden oluşuyor. Üçüncü
ifadenin sonucu ise, b karakterinin ASCII kodu 98 olduğu için:
98–200/3
şeklinde hesaplanacaktır. Önce bölme yapılacağı için 200/3’ün sonucunu 66 olarak buluruz; çünkü
iki tam sayı arasındaki işlemin sonucu daima bir tam sayıdır. Bu durumda sonuç;
'b'–200/3=98-66=32
Olarak hesaplanacaktır.
Bu sonucu elde eden ve yazdıran Java programını Eclipse IDE'si üzerinden deneyebilirsiniz.
int Türü İfadeler
int türünde tamsayı sabit ya da değişken içeren ifadeler, sonuçta tamsayı (int) değer
üretecektir. Örneğin,
int a,b,c;
a=9;
b=12;
c=13;
şeklindeki atamalar ile,
a + b / c
ifadesi,
9+12/13=9+0=9
olarak hesaplanacaktır. 12 ve 13’ün int türünde olduğunu ve bu nedenle 12/13 işleminin sonucunun
da int türünde olacağını ve 12/13’ün int türündeki sonucunun da 0 olacağını hatırlatalım.
b – c % a + ‘x’ – 3 + (int) 8.7
ifadesi ise
12 –13%9+120 –3+8
12 – 4 + 120 –3+8=133
aşamalarından geçerek 133 olarak hesaplanır. ’x’ karakter sabiti yerine onun ASCII kodu olan 120
değeri alınır. 13%9 ifadesi ise 13’ün 9 ile bölümünden elde edilecek olan kalanı hesaplanır. (int)
8.7 ifadesi ise 8.7 ondalık sayısını int türüne yani 8’e dönüştürür.
Aşağıdaki program bu hesaplamaları gerçekleştiriyor:
1. public class Uyg2 {
2. public static void main(String[] args) {
3. int a, b, c;
4. a=9;
5. b=12;
6. c=13;
25
7.
8. System.out.println("a="+a);
9. System.out.println("b="+b);
10. System.out.println("c="+c);
11. System.out.println("a + b / c="+(a+b/c));
12. System.out.println("'x'in ASCII kodu="+(int)'x');
13. System.out.println("b - c %a + 'x' - 3 + (int) 8.7="+(b - c % a + 'x' - 3 + (int) 8.7));
14. }
15. }
Programın çıktısı ise şöyle:
float Türündeki İfadeler
Programlamada özellikle hesaplama aşamasındayken, sadece tamsayılar üzerinden gitmek sizi
sınırlayabilir. Rasyonel sayıları kullanmak istediğinizde, yeni değişken türlerini de kullanmalısınız.
Java dilinde float ve double türündeki değişkenler ile rasyonel sayıları tutabilirsiniz.
Float ve double türünden değişkenlerin adını kayan noktalı (floating point) değişkenler olarak da
duyabilirsiniz. Buradaki nokta kısmı, tam sayı kısmı ile ondalıklı sayı kısmını bölen virgül oluyor.
Float ve double türlerinin arasındaki fark, virgülden sonraki ondalık kısımda tutabildikleri hane
sayısıdır. Bu yüzden bir float değişken sanal bellekte 32 bitlik yer tutarken, double türündeki bir
değişken 64 bit yer tutacaktır.
Kayan noktalı bir tip yerine tamsayı tipini kullandığınızda olacakları daha iyi anlamak için aşağıdaki
örneği inceleyiniz:
1. public class FloatDeneme1 {
2. public static void main(String[] args) {
3.
4. int sinav1=50;
5. int sinav2=55;
6.
7. int ortalama_yaklasik =(sinav1+sinav2)/2;
8. float ortalama_tam =(float) (sinav1+sinav2)/2;
9.
10. System.out.println("Sinav ort. (yaklasik): "+ortalama_yaklasik);
26
11. System.out.println("Sinav ort. (tam olrk): "+ortalama_tam);
12. }
13. }Bu programın çıktısı şu şekilde olacaktır:
Gördüğünüz gibi int tipindeki ortalama_yaklasik değişkenin 52,5 çıkan sonucu, tamsayı tipinde
olduğu için 52'ye yuvarladı. float tipindeki ortalama_tam değişkeni ise olması gerektiği gibi 52,5
olarak kaldı.
Not: float ortalama = (float) (sinav1+sinav2)/2; satırındaki (float) ifadesi ile "(sinav1+sinav2)/2"
işleminden gelen sonucun float olarak tutulmasını sağlıyoruz.
Gördüğünüz gibi kayan noktalı değişkenleri tanımlarken bazı ifadelere dikkat etmek gerekiyor.
Şimdi de float ile double türlerinin hassasiyetleri üzerine bir örneğe göz atalım:
1. public class FloatDeneme2 {
2. public static void main(String[] args) {
3.
4. //Math.PI, bize PI sayısını döndürür
5. float PI_float =(float) Math.PI;
6. double PI_double=Math.PI;
7.
8. System.out.println("PI sayisi: "+PI_float);
9. System.out.println("PI sayisi: "+PI_double);
10. }
11. }
Çıktısı şöyle olacaktır:
Not: Math.PI ifadesi, PI sayısını tutan bir ifadedir.
Gördüğünüz üzere double türündeki PI_double değişkeni, PI sayısına ilişkin daha fazla ondalık
değeri tutabiliyor. Bu yüzden double değişkenler, daha hassas hesaplama gereken yerlerde
kullanılır.
Tekli Operatörler
Bu bölümde negatifini alma (–), pozitifini alma (+), artım (++) ve azaltım (––) operatörlerini
inceleyeceğiz. Negatifini alma operatörü (–) tek bir operand üzerinde etkili olduğu için, iki
operand ile işleme giren (––)sembolü ile karıştırılmamalıdır.
27
Örnek:
1. public class Uyg5 {
2. public static void main(String[] args){
3. int x, y=-5;
4.
5. x=16- -y;
6. System.out.println("x="+x);
7. }
8. }
Bu programda x’in değeri 11 olarak bulunacaktır. –y – (–5)= +5 olarak hesaplanır. 16’yı izleyen
çıkarma operatörü (–) ile y’nin önündeki negatifini alma (–) operatörü arasında mutlaka bir boşluk
olmalıdır. Aksi halde (–) ifadesi azaltım operatörü olarak algılanacaktır.
Tablo T.1-Tekli Operatörler
operatör sembolü kullanlışı işlem sonucu
tekli negatif alma – –a a’nın negatifini alır
son artım ++ a++ önce a’nın değerini al, kullan, sonra 1
artır.
ön artım ++ ++a önce a’nın değerini 1 artır, sonra kullan.
son azaltım –– a–– önce a’nın değerini al, kullan, sonra 1
son azaltım azalt.
ön azaltım –– ––a önce a’nın değerini 1 azalt, sonra kullan.
Son artım ve son azaltım operatörlerinde derleyici, değişkenin o andaki değerini bellekte geçici bir
değişkene atayarak saklar. Sonra değişkenin değerini 1 artırır (son artım) veya 1 azaltır (son
azaltım). Geçici değişkendeki değer ise ifade içinde kullanılır.
Örnek Proje:
1. public class Uyg6 {
2. public static void main(String[] args){
3. int x=4, y=8, z;
4.
5. z= x++ + y--;
28
6.
7. System.out.println("z="+z);
8. System.out.println("x="+x);
9. System.out.println("y="+y);
10. }
11. }
Projenin Çıktısı:
Açıklama:
Önce x ve y’nin o andaki değerleri geçici bellek alanlarına atanmış (4 ve 8), bu değerlerle ifade
hesaplanmış (z=12) sonra x’in değeri 1 arttırılmış ve y’nin değeri 1 azaltılmıştır. İfadeyi z= x+++y--;
şeklinde boşluksuz yazsak da sonuç değişmezdi. Derleyici bu durumda +++’nın mevcut operatörler
içinde mümkün olan en uzununu (++) alır ve ifadeyi şu şekilde yorumlardı:
z=(x++) + y–– ;
Aynı ifadeyi z=x+++ veya y––- şeklinde yazsak da aynı sonucu elde ederdik. Ön artım ve ön azaltım
operatörleri kullanıldığında ise, önce artım (mevcut değere 1 ekleme) veya azaltım (mevcut
değerden 1 çıkarma) gerçekleşecek, sonra ifade hesaplanacaktır.
Örnek Uygulama:
1. public class Uyg7 {
2. public static void main(String[] args){
3. int x, y, z, m;
4.
5. x=10;
6. y=5;
7. z=16;
8.
9. m=++x - --y + z++;
10.
11. System.out.println("z="+z);
12. System.out.println("x="+x);
13. System.out.println("y="+y);
14. System.out.println("m="+m);
15. }
29
16. }
Uygulamanın Çıktısı:
Artım Ve Azalım Operatörleri İçin Bir Diğer Örnek Uygulama
1. public class Uyg8 {
2. public static void main(String[] args){
3. int m, n, p, q;
4.
5. m=4;
6. n=2;
7. p=10;
8. q=8;
9.
10. m= -m++;
11. n= n--;
12. p= --p;
13. q= -++q;
14. System.out.println("m="+m);
15. System.out.println("n="+n);
16. System.out.println("p="+p);
17. System.out.println("q="+q);
18. }
19. }
Uygulamanın Çıktısı
30
İkili Aritmetiksel Operatörler
Operatör Sembolü Kullanılışı İşlem Sonucu
çarpma * a*b a ile b’nin çarpımı
bölme / a/b a’nın b’ye bölümü
kalan % a%b a’nın b’ye bölümünden kalan
toplama + a+b a’nın b ile toplanması
çıkarma – a-b b’nin a’dan çıkarılması
*, / ve % operatörleri, + ve –'ye göre önceliklidir. *, /, + ve – operatörlerinin int veya float
(double) türde operand kabul etmelerine karşılık kalan operandları sadece int türde operand olarak
kabul eder. % operandı bölmede kalanı hesaplar.
Örnek:
17 % 3 işleminin sonucunda 2 değeri (17’nin 3 ile bölümünden kalan) elde edilir. ANSI standardı,
kalan ve bölme operatörleri arasında aşağıdaki bağıntının bulunmasını zorunlu kılar:
a = a % b + (a /b) *b (a ve b tamsayı)
Örnek Uygulama:
1. public class Uyg9 {
2. public static void main(String[] args){
3. int a, b, c;
4. double p, q, r, x, y, z, k;
5.
6. a=7; b=4; c=15;
7. p=2.7;
8. q=13.8;
9. r=12.45;
10.
11. x= a % b * 15 - c / b * a;
12. y= a * 2 % (b + 1) - c / (a +b);
13. z=x / y * a - b ++ * --c;
14. k=p -q / (r +z) * (q -r) + b++ * z;
15.
16. System.out.println("x="+x);
31
17. System.out.println("y="+y);
18. System.out.println("z="+z);
19. System.out.println("k="+k);
20. }
21. }
Örnek Uygulamanın Çıktısı:
x değeri
7 % 4 * 15 – 15 / 4 * 7
3 * 15 – 3 * 7
45 – 21
24
y değeri
7 * 2 % (4 + 1 ) – 15 / (7 + 4)
14 % 5 – 15 / 11
4 – 1
3
z değeri
24 / 3 * 7 – 4++ * 15 ,
8 * 7 – 4 * 14
56 – 56
0
olarak hesaplanır.
k’nın değerini siz kontrol edebilirsiniz.
32
Aritmetiksel Atama Operatörleri
Operatör Sembolü Kullanılışı İşlem Sonucu
Atama = x = y y’nin değerini x’e ata
Topla-ata + = x + = y x + y’nin değerini x’e ata
Çıkar-ata – = x – = y x – y’nin değerini x’e ata
Çarp-ata * = x * = y x * y’nin değerini x’e ata
Böl-ata / = x / = y x / y’nin değerini x’e ata
Kalanını ata % = x % = y x % y’nin değerini x’e ata
Tablodan kolayca anlayacağımız üzere, x + = y ifadesi x = x + y ifadesine, x % = y ifadesi de x =
x % yifadesine denktir.
= operatörünün atama amacı ile kullanıldığını biliyoruz. Sembolün sol tarafındaki operand bir sol
taraf operandı (left hand operand, Lvalue) olmalıdır.
Sol taraftaki operand (değişken, dizi elemanı, yapı elemanı vb.) sağ taraftaki operandın değerini
bellekte saklar.
Örnek:
int k;
double l;
l = k = 13.72;
Yukardaki komutlar ile (=) sembolünün birleşme özelliği sağdan sola olduğu için,
( l = (k = 13.72));
sırasıyla atamalar yapılacaktır. Java hassasiyetin kaybolmasına izin vermeyeceği için k=13.72
atamasında,
“possible loss of precision” veya Eclipse'te "cannot convert from double to int"
şeklinde bir hata mesajı verilecektir. Java’da sadece programcının açıkça cast ifadeleri ile,
(int) 13.72
gibi, hassasiyetin kaybolmasına özellikle izin verdiğini belirtmesi halinde bu tür atamalar yapılır.
33
Atama Operatörleri: Örnek Program
1. public class Uyg10{<br />
2. public static void main(String[
] args){<br />
3. <br />
4. int k;<br />
5. double l;<br />
6. l = k =13.72;<br
/>
7. <br />
8. System.out.println("l="+l);<br />
9. System.out.println("k="+k);<br />
10. }<br />
11. }
Örnek Programın Çıktısı
Örnek Program: Cast İfadesinin Kullanımı
1. public class Uyg10{<br />
2. public static void main(String[ ] args){</p>
3.
4. <p> int k;<br />
5. double l;<br />
6. l = k =(int)13.72;</p>
7.
8. <p> System.out.println("l="+l);<br />
9. System.out.println("k="+k);<br />
10. }<br />
11. } Cast İfadesini Kullanan Örnek Programın Çıktısı:
34
9.JAVA'DA KONTROL YAPILARI
Diğer programlama dillerinde olduğu gibi Java'da da kontrol yapıları dilin en önemli parçasını
oluşturur. Başka bir deyişle, kontrol yapıları olmasaydı bilgisayar programları, bilgi giriş-çıkışı ve
bazı hesaplamalar dışında bir işlemi gerçekleştiremezlerdi. Bu bölüme kadar verilen programlar bir
bakıma düz hat programları olarak görülebilir. Yani şu ana kadar verilen programlarda bir komuttan
sonra aradaki komutları atlayarak başka bir noktaya sıçrama söz konusu değildi. Bir bilgisayar
programında komutlar normal olarak yazılış sırasına göre çalıştırılır. Örneğin, herhangi bir
programlama dilinde yazılmış olan,
Komut1
Komut2
Komut3
........
Komutn1
Komutn
şeklindeki bir programda, önce Komut1 sonra Komut2 daha sonra Komut3 ... Komutn1 ve en son
da Komutn çalıştırılır.
Programlama problemlerinden birçoğu bu kadar basit değildir. Programlama dillerinin gücü, aynı
işi tekrar tekrar yapabilmelerinden ya da farklı parametre değerleri için değişik işler
yapabilmelerinden gelir. Kontrol komutları, yukarda bahsedilen doğrusal akış sırasını değiştirebilen
komutlardır. Örneğin Komut2 bir kontrol komutu olsaydı, bu komut bir koşulu kontrol ederek koşulun
sonucuna göre, Komut3 ,Komut4 veKomut5’i atlayarak programın icrasını doğrudan Komut6’ya
gönderebilirdi. Bir bilgisayar programında programın kontrolünün aradaki komutlar atlanarak bir
komuttan diğerine sıçramasınadallanma (branching) diyoruz. Bu anlamda kontrol komutları
dallanmayı gerçekleştiren komutlardır. Diğer programlama dillerinde olduğu gibi, Java dilinde de
esas olarak iki farklı tür kontrol yapısı ya da komutu mevcuttur:
1. Seçme (selection) işlemini gerçekleştiren kontrol komutları: Bu tip kontrol komutlarında bir ifade
kontrol edilerek ifadenin değerine göre çeşitli seçeneklerden bir tanesinde dallanma işlemi
gerçekleştirilir: if, if else, switch case gibi yapılar bu tür komutları oluşturur.
2. Tekrarlama (loop, repetition): Bu tip kontrol yapılarında bir işlemler grubu bir koşula bağlı olarak
belirli sayıda (10 kez, 50 kez vb.) tekrarlı olarak çalıştırılabilir.
Sonraki başlıklarda Java dilindeki kontrol yapılarını tüm ayrıntılarıyla ele alacağız.
35
9.1.if Deyimi
if deyimi, bir önceki sayfada sözünü ettiğimiz "ifadeyi denetleyerek, ifadenin değerine göre uygun
yollardan bir tanesiyle dallanma işlemini gerçekleştiren" bir kontrol deyimidir. Bu sayede şartlı
dallanma (conditional branching) adı verilen işlem gerçekleştirilir. Şartlı dallanma, bir
programlama dili için en temel kontrol yapısıdır.
Şartlı dallanma işlemiyle bir program, gidişatını daha önceden verdiğiniz yollardan biriyle devam
ettirmeye karar verebilir hale gelir. Bir şarta göre bir komut dizisini çalıştırır veya esgeçer.
Java dilinde şartlı dallanma if ve else anahtar sözcükleriyle gerçekleştirilir. if deyiminin basit
gösterimi şöyledir:
if (şart) komut 1
komut 2
Burada şartın değeri doğru (true) olarak sağlanıyorsa ancak komut 1 çalıştırılır. Daha sonra
program normal bir akışla komut 2’yi çalıştırmaya geçer. Şartın değeri yanlış (false) ise, bu
durumda program doğrudan komut 2’ye geçer ve onunla devam eder. Kısacası şartın
değeri yanlış ise komut 1 hiçbir zaman çalışmayacaktır.
Aşağıda if yapısını açıklayan bir akış diyagramı verilmiştir. Hemen ardından Java'da yazılan bir if
örneği verilmiştir.
if deyimi için akış diyagramı (flow chart)
1. if (fiyat==1) {</p>
2.
3. <p>//fiyat 1 ise çalıştırılacak komutlar</p>
4.
5. <p>}
Bu noktada, Java dilinde doğru ve yanlışın ne anlama geldiğini belirtelim: Şartın doğru olması, o
ifadenin matematiksel olarak 1 yani true (doğru) olan bir değer üretmesi demektir. Yanlış olması
36
ise, matematiksel olarak değerin 0 yani false (yanlış) olan bir değer üretmesi anlamına gelir.
Programlama dillerinde sadece bu iki değerden birini alabilen değişken türleri boolean olarak anılır.
Şartlı dallanmanın yarısını bitirdik, şimdi diğer yarısına bakalım.
Sizin de dikkat ettiğiniz gibi yukarıdaki örnek sadece şart sağlanırsa olacaklara ilişkin bir dallanmaya
gidiyor. Şimdi şart sağlanmazsa durumuna bakalım. Bunun için yeni bir deyim olarak else deyimi ile
tanışacağız. "else" deyimi sadece if ile birlikte kullanılan bir şartlı dallanma deyimidir. İkisinin beraber
kullanımı şöyle bir yapıda gerçekleşir:
if (şart) komut 1
else komut 2
komut 3
Bu durumda, şart doğru ise komut 1 çalıştırılır ve sonra komut 3’e geçilir. Şartın değeri yanlış ise,
bu durumda da komut 1 atlanarak doğrudan else’i takip eden komut 2’ye geçilir. Bu çalıştırıldıktan
sonra program yine komut 3 ile çalışmaya devam eder. Bu yapıya ilişkin aşağıdaki akış diyagramına
göz atalım ve sonra da Java programlama diliyle yazılan if-else örneğine göz atalım:
if else deyimi için akış diyagramı(flow chart)
if-else'li bir Java kodu da şöyle olur:
1. if (fiyat==1) {</p>
2.
3. <p>//fiyat 1 ise çalıştırılacak komutlar</p>
4.
5. <p>} else {</p>
6.
7. <p>//fiyat 1 değilse çalıştırılacak komutlar</p>
37
8.
9. <p>}
if deyiminde, şartın doğru olması koşuluyla çalışan komut 1 'den fazla komutun bir arada
çalıştırılması isteniyorsa, bu komutların etrafı süslü parantez { } sembolleri ile sarılmalıdır:
if(şart) {
komut 1
komut 2
...
komut n
}
komut z
...
Bu durumda şart doğru olarak sağlanıyorsa komut 1, komut 2 ... komut n ile belirtilen sırayla
komutlar yürütülecek ve ondan sonra komut z çalıştırılacak. Fakat şart doğru sağlanmıyorsa blok
atlanarakdoğrudan komut z çalıştırılıp yola devam edilecektir.
Aynı şey if else yapısı için de söz konusudur:
if(şart) {
komut 1
komut 2
...
komut n
} else {
komut x
komut y
....
}
komut z
...
Yukarıdaki yapıda şart doğru ise komut 1, komut 2 ... komut n ile belirtilen sırayla komutlar
yürütülecek ve sonra program akışına komut z'yi çalıştırarak devam edecektir. Fakat şart doğru
değilse if blokudediğimiz ve komut 1, 2 ... n aralığını ifade eden blok atlanarak else blokundaki
komutlar çalıştırılacak ve bundan sonra komut z'ye geçilecektir.
Şimdi iki basit Java örneğiyle if ve if-else kullanımının üstünden geçelim:
1. public class SartliDallanmaOrnek1 {
2. public static void main(String[] args) {
3. int parola=2013;
4.
38
5. if (parola==2013) {
6. System.out.println("Parolalar eşleşiyor.");
7. }
8.
9. }
10. }
Bu örnekte programın içinde tanımlanmış integer tipli 'parola' değişkeninin değerinin 2013 olup
olmadığı şartını denetliyoruz ve eğer şart doğru olarak ifade edilebiliyorsa ekrana 'Parolalar
eşleşiyor.' yazdırıyoruz.
Evet, yukarıdaki sahiden basit bir örnek. Genelde parola değişkeni gibi programcı
tarafından programın içinde oluşturulan ve program bittiğinde yok edilen değişkenler ile böyle
denetimler yapıp, programı şartlı dallanmaya uğratmayız. Programcının dışında olanlarla
ilgileniriz. Kullanıcıyla etkileşime geçerek veya bilgisayardaki başka değişenlere (saat, ağ
bağlantısının müsaitliği ve daha bir sürü değişebilecek durum) göre dallanma yaparız. Aşağıdaki
örnekte bunu deneyelim. Kullanıcıya İstanbul'un plaka kodunu soralım ve verdiği yanıta göre ona
tekrar yanıt dönelim:
Not: Aşağıdaki örnekte kullanıcıdan veri almak için Scanner adında bir sınıf kullanılmıştır. Scanner
sınıfı java.util paketi içerisinde bulunan bir sınıftır. Bazı basit tipteki ifadeleri klavyeden okumaya
yarayan sade bir yazı tarayıcı sınıfıdır. Scanner sınıfı hakkında bazı önemli noktalar şöyledir:
Bir Scanner girdiyi bazı kalıplara göre ayırıştırır. Bu ayrışım genellikle girdinin içerdiği
boşluklara göre olur.
Bir tarama işlemi kullanıcıdan girdi gelmesi için bekleme yapabilir.
Bu kod parçasında Scanner, konsolda kullanıcının girdiği metni alır ve bir değişkene atar.
1. import java.io.IOException;
2. import java.util.Scanner;
3.
4. public class SartliDallanmaOrnek2 {
5. public static void main(String[] args) throws IOException {
6.
7. Scanner giris=new Scanner(System.in);
8.
9. //String kullanicininYazdigi;
10. int istanbulPlakaKodu=34;
11. int girilenPlakaKodu;
12.
13. //soruyu ekrana basalım
14. System.out.println("Istanbul'un plaka kodu nedir?");
39
15. //klavyeyle girilen değeri integer olarak alalım
16. girilenPlakaKodu=giris.nextInt();
17.
18. if(girilenPlakaKodu==istanbulPlakaKodu) {
19. System.out.println("Evet! Dogru yanit.");
20. } else {
21. System.out.println("Hayir, Istanbul'un plaka kodu 34'tur.");
22. }
23.
24. }
25. }
Bu program ile basitçe kullanıcıdan İstanbul'un plaka kodunu girmesini istiyoruz ve girdiği değeri
öncekullanicininYazdigi değişkeninde tutuyoruz ve sonra onu girilenPlakaKodu değişkeninde
tutulacak bir hale çeviriyoruz. Bu sayede tamsayı tipindeki istanbulPlakaKodu değişkeniyle
karşılaştırabiliyoruz. Karşılaştırma sırasında == operatörü kullanıyoruz. Bu "eşit mi?" anlamına
geliyor. Eğer girilenPlakaKodu ile istanbulPlakaKodu değişkeni birbirine eşitse, bu şart bize true
(doğru) döndürüyor ve if bloku çalışıyor. Eşit değilse else bloku devreye giriyor ve kullanıcıya
olumsuz mesaj veriliyor.
if Deyimiyle İlgili Problemler
Problem 1:
f(x) ve g(x) fonksiyonları,
x > 0 ise f(x)= 1 / ( 1 + ln x ) ve g(x)= 1 / ( x + ln x )
x≤0 ise f(x) = 1 / ( 1+ x2 ) ve g(x)=1 / ( 1 + x + x2 )
şeklinde tanımlanıyor. x değeri klavyeden girildiğinde, f(x) ve g(x)’i hesaplatan ve yazdıran bir Java
programı yazalım.
1. import java.io.IOException;
2. import java.util.Scanner;
3.
4. public class If1 {
5. public static void main(String args[]) throws IOException {
6. Scanner giris = new Scanner(System.in);
7. double x, f, g;
8.
9. System.out.println("Bir sayi giriniz: ");
10. x = giris.nextDouble();
40
11.
12. if (x > 0.0) {
13. f = 1.0 / (1.0 + Math.log(x));
14. g = 1.0 / (x + Math.log(x));
15. } else {
16. f = 1.0 / (1.0 + x * x);
17. g = 1.0 / (1.0 + x + x * x);
18. }
19.
20. System.out.println("\nf(x)=" + f);
21. System.out.println("\ng(x)=" + g);
22.
23. }
24. }
Programın çıktısı:
x negatif bir değer olarak girildiğindeyse,
çıktısı elde edilecektir.
Not: Java'da birçok matematik kütüphanesi Math adında bir sınıfın altında
bulunur. log fonksiyonu, etabanına göre logaritma yani tabii logaritma hesaplayan bir Java
fonksiyonudur.
Hatırlatma: Buradaki örneklerin main() metotlarının sonunda yer alan "throws IOException" ifadesi
şu anlama gelir:
main() metodunun içinde meydana gelecek bir hatada IO yani girdi-çıktıyla ilgili bir istisnai durumu
fırlat/ortaya dök (throw). Bu gibi istisnai (exception) durumları ortaya dökmekle ilgili daha ayrıntılı
bilgiyi ilerleyen bölümlerdeki "Olağan dışı durumların değerlendirilmesi" ve sonraki eğitim
içeriklerinde bulabilirsiniz.
Problem 2:
Bir satış elemanının sattığı ürün miktarına göre alacağı günlük ücret aşağıdaki gibi belirleniyor:
41
Günlük satış miktarı 50 adetten az ise 15 TL tutarındaki sabit ücrete, satılan ürün başına 1 TL
değerinde prim eklenerek günlük ücret belirlenir.
Günlük satış miktarı 50 adet ya da daha fazla ise, bu durumda günlük sabit ücret 15 TL alınarak,
satılan ürün başına da ilk 50 adet ürün için 2 TL, 50 adedi aşan kısım için de 3 TL prim verilerek
günlük ücret belirlenir.
Bir satıcının günlük satış miktarı bilgisayara girildiğinde satıcının alacağı günlük ücreti
hesaplayan bir Java programı yazınız.
1. import java.io.IOException;
2. import java.text.DecimalFormat;
3. import java.util.Scanner;
4.
5. public class Satis{
6. public static void main(String args[]) throws IOException{
7. Scanner giris = new Scanner(System.in);
8. double satis, ucret;
9. //DecimalFormat tipiyle özel biçimlerde sayılar
10. //gösterebilirsiniz.
11. DecimalFormat nf = new DecimalFormat("###,###.00");
12.
13. System.out.println("Gunluk kac tane urun satiyorsunuz? ");
14. satis = giris.nextDouble();
15.
16. if (satis < 50) {
17. ucret = 15.0 + satis * 1.0;
18. } else {
19. ucret = 15.0 + 50 * 2.0 + (satis - 50) * 3.0;
20. }
21.
22. System.out.println("Buna gore gunluk ucretiniz: "+nf.format(ucret)+" TL");
23. }
24. }
Programın Çıktısı:
Gerekli tüm aralıkların kontrolü için program 10, 30 ve 60 adetlik satış miktarları için test edildiğinde
aşağıdaki sonuçlar elde ediliyor:
42
Problem 3:
Bilgisayara negatif olmayan bir sayı girildiğinde bu sayının karekökünü hesaplayan, negatif bir
sayı girildiğinde ise kullanıcıyı uyaran bir Java programı yazalım.
1. import java.util.Scanner;
2.
3. public class KareKok{
4. public static void main(String args[]) {
5. Scanner giris = new Scanner(System.in);
6. double sayi;
7.
8. System.out.println("Karekokunu bulmak icin bir sayi giriniz: ");
9. sayi = giris.nextDouble();
10.
11. if(sayi < 0)
12. System.out.println ("Olmadi, pozitif sayi girmeliydiniz");
13. else
14. System.out.println (sayi + "'nin karekoku: "+ Math.sqrt(sayi));
15. }
16. }Programın çıktısı:
Not: Programda, verilen bir sayının karekökünü hesaplayan sqrt fonksiyonu kullanılmıştır. Bu
fonksiyonmath kütüphanesinin bir elemanı olup sayının karekökünü bulur. Math kütüphanesinin
43
içinde matematik işlemlerini yapmak için daha birçok fonksiyon bulunur. Bu sayede programcı
matematiksel işlemleri math kütüphanesinin özelliklerini kullanarak çok rahat bir şekilde yapabilir.
9.2.İç içe if Deyimleri
Tek bir if deyimi, programınızın iki seçenekten birini seçmesine olanak sağlar ve tüm dallanma bu
kadardır. Öte yandan pratikte daha fazla dallanmaya ihtiyaç duyan uygulamalar yapmanız gerekir.
Birinci karardan sonra ikinci, ikinciden sonra üçüncü kararın (dallanmanın) alınması gerekebilir. Bu
şekilde giden bir program akışı için iç içe if deyimleri (nested if statements) kullanmalısınız.
Örneğin şöyle kullanabilirsiniz:
1. if (koşul) {
2. //koşul 1'in komutları
3. //if (koşul1a) {
4. //koşul 1a'nın komutları
5. //...
6. }
7. }İlk şartlı dallanmanın içinde tekrar bir şartlı dallanma yapmak gerektiğinde, iç içe if
kullanabilirsiniz. Bunun kullanımına ilişkin şu örneğe göz atınız:
1. public class IcIceIfDeyimi1 {
2. public static void main(String[] args) {
3. int sinav1=45;
4. int sinav2=50;
5. int sinav3=66;
6.
7. //ortalama'yı float olarak alıyoruz.
8. float ortalama= (float) (sinav1+sinav2+sinav3)/3;
9. String sonuc;
10.
11. if (ortalama<45) {
12. //0-44 arası ortalama zayıf
13. sonuc="Zayif";
14. } else if (ortalama<55){
15. //45-54 arası ortalama geçer
16. sonuc="Gecer";
17. } else if (ortalama<70) {
18. //55-69 arası ortalamaya orta
19. sonuc="Orta";
44
20. } else if (ortalama<85) {
21. //70-84 arası ortalamaya iyi
22. sonuc="Iyi";
23. } else {
24. //başka bir sonuç kalmadığı için tekrar
25. //if ile şart aramıyoruz
26. sonuc="Pekiyi";
27. }
28.
29. System.out.println("Ortalama: "+ortalama);
30. System.out.println("Buna gore sonuc: "+sonuc);
31. }
32.
33. }
Programın sonucu şöyle olacaktır:
NOT: İç içe if kullanırken dikkat etmemiz gereken şey, koşulları yazarken programın adım adım
bunları denetleyeceğini dikkate almamız gerektiğidir. En dıştaki veya en üstteki şart, ondan sonra
gelenlerle çelişmemelidir.
Yukarıdaki if deyimlerini daha kısa olacak şekilde şöyle de yazabiliriz:
1. if (ortalama<45)
2. sonuc="Zayif";
3. else if (ortalama<55)
4. sonuc="Gecer";
5. else if (ortalama<70)
6. sonuc="Orta";
7. else if (ortalama<85)
8. sonuc="Iyi";
9. else
10. sonuc="Pekiyi";Bu şekilde bir yazım genelde if'ten sonraki komut/deyim tek satırlık
olacaksa kullanışlıır.
Şimdi biraz daha gerçek bir iç içe if deyimi örneği üzerinde duralım. Bu örnekte kullanıcıdan 3 tane
sayı girmesini istiyoruz ve bu 3 sayıdan en küçüğünü bulup ekrana basıyoruz.
1. import java.io.IOException;
2. import java.util.Scanner;
3.
45
4. public class IcIceIfDeyimi2 {
5. public static void main(String[] args) throws IOException {
6. Scanner giris = new Scanner(System.in);
7.
8. int a,b,c; //sayılar, bu değişkenlere
9. int enKucukSayi; //en küçüğü bir yerde tutalım
10.
11. System.out.println("Birinci sayiyi giriniz: ");
12. a = giris.nextInt();
13.
14. System.out.println("Ikinci sayiyi giriniz: ");
15. b=giris.nextInt();
16.
17. System.out.println("Ucuncu sayiyi giriniz: ");
18. c=giris.nextInt();
19.
20. if (a < b) {
21. if (a < c) {
22. enKucukSayi=a;
23. } else {
24. enKucukSayi=c;
25. }
26. } else if (b < c) {
27. enKucukSayi=b;
28. } else {
29. enKucukSayi=c;
30. }
31.
32. System.out.println("En kucuk sayi: "+enKucukSayi);
33. }
34. }
Bu kodu çalıştırdığınızda ve sayıları girdiğinizde şöyle bir çıktı oluşacaktır:
46
Bu örnekte üç sayıdan en küçüğünü bulabilmek için önce ilk iki sayıyı ele alıyoruz.
Önce ilk sayı ikinci sayıdan küçük mü diye (a < b) bakıyoruz.
o Bu şart sağlanıyorsa bu sefer ilk sayıyla üçüncü sayıyı ele alıyoruz (a < c).
İlk sayı üçüncü sayıdan küçükse en küçük sayı ilk sayıdır.
İlk sayı üçüncü sayıdan küçük değilse en küçük sayı üçüncü sayıdır.
o İlk sayının ikinci sayıdan küçük olma şartı sağlanmıyorsa ikinci ile üçüncü sayıyı ele alıyoruz (b <
c).
İkinci sayı üçüncü sayıdan küçükse en küçük sayı ikinci sayıdır.
İkinci sayı üçüncü sayıdan küçük değilse en küçük sayı üçüncü sayıdır.
Bir sonraki derste if-else-if kullanımına dair örnekleri bulabilirsiniz.
9.3.Karşılaştırma İşlemleri
Şartlı bir ifadede iki değer arasında karşılaştırma işlemi gereklidir. İlişkisel
operatörler (relational operators) olarak da anılan 6 karşılaştırma operatörü vardır. Bunlar
aşağıdaki tabloda yer alıyor:
KARŞILAŞTIRMA OPERATÖRÜ İŞLEVİ
< den daha küçük
> den daha büyük
<= küçük ya da eşit
>= büyük ya da eşit
== (Art arda iki == sembolü) -e eşit
!= eşit değil
Pascal ve FORTRAN’da olduğu gibi, Java dilinde de karşılaştırma sonucu doğru
ise Boolean tipinde true (doğru) değeri elde edilirken karşılaştırma sonucu yanlış ise
de Boolean tipinde false (yanlış) değeri elde edilir.
İFADE DEĞER
-12 < 0 1
0 > 23 0
1 == 1 1
47
İFADE DEĞER
3 != 7 1
1 >= -2 1
6 > 8 0
Aşağıdaki Java programı, çeşitli karşılaştırma işlemlerinin sonuçlarını ekrana aktarıyor:
1. public class Lojik {
2. public static void main(String[] args) {
3. System.out.println("3>5 ifadesinin degeri
.."+(3>5));
4. System.out.println("3<5 ifadesinin degeri
.."+(3<5));
5. System.out.println("3!=5 ifadesinin degeri
.."+(3!=5));
6. System.out.println("5==5 ifadesinin degeri
.."+(5==5));
7. System.out.println("5>=4 ifadesinin degeri
.."+(5>=4));
8. System.out.println("-1<0 ifadesinin degeri .."+(-
1<0));
9. }
10. }Sonucu şöyle olacaktır:
Karşılaştırma işlemlerinde dikkat edilmesi önemli bir husus vardır. Aşağıdaki kod parçasını
inceleyelim:
1. import java.util.Scanner;
2.
3. public class Esit {
48
4. public static void main(String[] args) {
5. Scanner giris=new Scanner(System.in);
6. int girilenSayi=0;
7.
8. System.out.println("Bir sayi giriniz: ");
9. girilenSayi=giris.nextInt();
10.
11. if(girilenSayi==7){
12. System.out.println("Girdiginiz sayi 7'dir.");
13. }
14. }
15. }
Özellikle if blokuna yönelirsek;
Karşılaştırma işlemlerinde eşitlik kontrolünün == sembolü yerine (yani art arda iki = sembolü)
yanlışlıkla =sembolü ile yapılması durumunda Eclipse üzerinde aşağıdaki gibi hata mesajı alırsınız:
if’deki bu hatayı düzelterek, yani = yerine aşağıdaki gibi == yazarak
1. if(girilenSayi==7.0) {
2. System.out.println("Girdiginiz sayi 7'dir.");
3. }programı çalıştırdığınız takdirde aşağıdaki gibi beklenen sonucu elde ederiz:
9.4.if-else-if Basamak Yapısı
Birbirini izleyen çok sayıda koşul kontrolünü gerçekleştirmeye yarayan bir yapı if-else-if
basamağı adını alır ve yazılış biçimi aşağıdaki gibidir:
1. if(ifade1)<br />
2. Deyim1;<br />
3. else if (ifade2)<br />
4. Deyim2;<br />
5. else if (ifade3)<br />
6. Deyim3;<br />
7. ....<br />
8. ....<br />
9. else<br />
49
10. Deyim_n;<br />
11. Deyim_n+1;
Bu yapı şu şekilde çalışır:
Önce ifade1 kontrol edilir; bu ifade doğru ise, Deyim1 uygulanır ve sonra Deyim_n+1’e geçilir.
İfade1 yanlış ise, o takdirde, ifade2 kontrol edilir. Bu ifade doğru ise, bu durumda
sadece Deyim2uygulanır ve sonra Deyim_n+1’e geçilir.
İfade2 yanlış ise, o takdirde, ifade3 kontrol edilir. Bu ifade doğru ise, bu durumda
sadece Deyim3uygulanır ve sonra Deyim_n+1’e geçilir.
Bu işlemler daha fazla sayıda else if bulunduğu durumda aynı şekilde devam eder.
if’ler ile kontrol edilen ifadelerin tümü yanlış ise, bu durumda programın
kontrolü else’i izleyenDeyim_n’ye geçer ve bu deyim çalıştırılır. Daha sonra kontrol Deyim_n+1’e
geçer. Yukardaki yapı içinde Deyim1, Deyim2 ...Deyim_n ile belirttiğimiz birimler tek bir deyimden
ibaret olabileceduği gibi, { }sembolleri içine alınmış deyimler grubundan da oluşabilir.
Örnek Problem:
Bu örnekte basit bir vergi hesabı programı geliştirmek istiyoruz. Gelir vergisinin aşağıdaki kurallara
göre belirlendiğini varsayalım:
Gelir ≤ 150,000,000 ise vergi oranı %25
Gelir ≤ 300,000,000 ise vergi oranı %30
Gelir ≤ 600,000,000 ise vergi oranı %35
Gelir ≤ 1,200,000,000 ise vergi oranı %40
Gelir > 1,200,000,000 ise vergi oranı %50
Bu problemi Java dilinde programlayabilmek için aşağıdaki basit algoritmayı uygulayacağız:
a. Gelir bilgisi klavyeden girilecek.
b. Gelir bilgisi, yukardaki vergi hesaplama kurallarına göre kontrol edilerek vergi hesaplanacak.
c. Hesaplanan vergi ekrana yazdırılacak.
1. import java.util.Scanner;
2.
3. public class Vergi {
4. public static void main(String args[]){
5. Scanner giris = new Scanner(System.in);
6. double gelir, v, v1, v2, v3, v4;
7.
8. System.out.println("Gelir miktarınız (TL): ");
9. gelir = giris.nextDouble();
10.
50
11. v1 = 150000000 * 0.25;
12. v2 = 150000000 * 0.30;
13. v3 = 300000000 * 0.35;
14. v4 = 600000000 * 0.40;
15.
16. if (gelir <= 150000000)
17. v = gelir * 0.25;
18. else if (gelir <= 300000000)
19. v = v1 + (gelir - 150000000) * 0.3;
20. else if (gelir <= 600000000)
21. v = v1 + v2 + (gelir - 300000000) * 0.35;
22. else if (gelir <= 1200000000)
23. v = v1 + v2 + v3 + (gelir - 600000000) * 0.4;
24. else
25. v = v1 + v2 + v3 + v4 + (gelir - 1200000000) * 0.5;
26.
27. System.out.println("Odemeniz gereken vergi: " + v);
28. }
29. }
Programın çıktıları
Çıktı 1:
Çıktı 2:
Yukarıdaki programda uygulanan vergilendirme mantığı şöyledir:
Örneğin, bir kişinin geliri 200,000,000 TL olsun. Bunun ilk 150,000,000 TL’si %25 üzerinden,
kalan 200,000,000 – 150,000,000 = 50,000,000 TL’si ise %30 üzerinden vergilendirir. O nedenle
programın başında her aralığa ait sabit vergiler hesaplanarak v1, v2, v3 ve v4 değişkenlerine atanır.
İkinci Dereceden Bir Denklemin Köklerinin Bulunması
Lise yıllarında öğrendiğimiz ikinci derece denklem,
ax2 + bx + c = 0
şeklinde ifade edilir. Denklemin kökleri hakkında bilgi sahibi olabilmek için, denklemin diskriminantı
adı verilen,
∆=b2–4ac
51
ifadesini hesaplamamız gerekir. Diskriminantın değerlerine göre, eğer ∆<0 ise denklemin gerçel
sayılarla ifade edilebilecek bir kökü yoktur.
∆=0 ise denklemin, değerleri birbirine eşit olan iki kökü vardır ve bunlar,
x1=x2= –b/ (2a)
şeklinde hesaplanırlar. Bunlara iki kat kök ya da çakışık kök adı verilir.
∆>0 ise de denklemin birbirinden farklı iki gerçel kökü vardır ve bunlar,
x1=(–b+√∆)/(2a)
ve
x2=(–b–√∆)/(2a)
şeklinde hesaplanırlar.
Şimdi ikinci dereceden bir denklemin köklerini bulan Java programına bakalım.
Kod Bloğu:
1. import java.util.Scanner;
2.
3. public class IkinciDerece{
4. public static void main(String args[]){
5. Scanner giris = new Scanner(System.in);
6. double a, b, c, x1, x2, delta;
7.
8. System.out.println("a: ");
9. a=giris.nextDouble();
10.
11. System.out.println("b: ");
12. b=giris.nextDouble();
13.
14. System.out.println("c: ");
15. c=giris.nextDouble();
16.
17. delta = b * b - 4 * a * c;
18.
19. if (delta < 0) {
20. System.out.println("Gercek kok yoktur. \n");
21. }
22. else if (delta == 0) {
23. x1 = -b / (2 * a);
52
24. System.out.println("x1=x2=" + x1);
25. }
26. else {
27. x1 = (-b + Math.sqrt(delta)) / (2 * a);
28. x2 = (-b - Math.sqrt(delta)) / (2 * a);
29.
30. System.out.println("x1=" + x1);
31. System.out.println("x2=" + x2);
32. }
33. }
34. }
Örnek Çıktı 1:
Örnek Çıktı 2:
9.5.Soru İşareti Operatörü
if / else deyimi yerine kullanılabilecek bir seçenek de ? üçlü operatörüdür. Üçlü (ternary)
operatördenmesinin nedeni doğal olarak üç tane operand ile işlem görmesidir.
? operatörü ile kontrol yapısının yazılış biçimi aşağıdaki gibidir:
İfade1 ? İfade2:İfade3;
Çalışma biçimi şu şekildedir:
İfade1 hesaplanır. İfade1’in değeri doğru (true) ise bu durumda ifade2 hesaplanır ve bir sonraki
deyime geçilir. İfade1’in değeri yanlış (false) ise, ifade3 hesaplanır ve bir sonraki deyime geçilir.
? operatörü ile oluşturulan yukardaki kalıp,
if(ifade1) ifade2
else ifade3;
yapısına denktir.
53
? operatörü, ifade1’in doğru ya da yanlış olması durumunda sadece bir deyimin
çalıştırılacağı durumlar içinif / else yapısı yerine kullanılabilir. İfade2 ve ifade3 yerinde fonksiyonlar
da bulunabilir.
1. import java.io.IOException;
2. import java.util.Scanner;
3.
4. public class Soru{
5. public static void main(String args[]) throws IOException{
6. Scanner giris = new Scanner(System.in);
7. String sonuc;
8. double not;
9.
10. System.out.println("Sinav notunu (0-100) giriniz: ");
11. not = giris.nextDouble();
12.
13. sonuc = not >= 50 ? "Basarili" : "Basarisiz";
14.
15. System.out.println("Sonuc: "+sonuc);
16. }
17. }
Örnek programın çıktısı:
9.6.switch / case Yapısı
Bir programda çok sayıda koşul kontrolü ve bunların sonucuna göre gerçekleştirilmesi gereken
işlemler varsa, if-else yapıları ile akışın izlenmesi zorlaşabilir. Böyle durumlar
genellikle switch deyiminin kullanılmasının gerekli olacağı durumlardır. switch deyimi, tek bir
ifadenin değerine göre sınırsız sayıda çalıştırma yolu belirlemeyi sağlayan bir komuttur.
switch sözcüğünden hemen sonra gelen ifade parantez içinde yer almalı ve bir tamsayı ifade
olmalıdır.
case anahtar sözcüklerini izleyen ifadeler tamsayı sabit türünde ifadeler olmalıdır,
yani değişkeniçermemelidir.
54
switch deyiminin çalışma prensibi basittir. switch ifadesi hangi case’i izleyen sabitle çakışıyorsa,
programın kontrolü o case’i izleyen kısma geçer. Bu case’den sonraki deyimler de kontrol edilmeden
çalıştırılır.
case sabitlerinden hiçbiri ifade ile uyuşmuyorsa, programın akışı default‘u izleyen kısıma geçer. (Bu
kısım mevcutsa) default‘un en sonda olması şart değildir. Fakat en sona koymak iyi bir programlama
stilidir.
İki case sabiti aynı değeri alamaz.
Switch/case yapısında, programın kontrolünün ifadenin değerine göre case seçeneklerinden
sadece birini çalıştırıp bundan sonra switch/case yapısını terketmesini isiyorsak bu durumda
her case seçeneğinden sonra break komutu yerleştirmeliyiz.
C DİLİ: Switch/case yapısında, programın kontrolünün ifadenin değerine göre case seçeneklerinden
sadece birini çalıştırıp bundan sonra switch/case yapısını terketmesini istiyorsak bu durumda
her caseseçeneğinden sonra break komutu yerleştirmeliyiz.
C# DİLİ: Her case’den sonra break kullanmamız gerekir.
Örnek Program:
1. import java.util.Scanner;
2.
3. public class Cases{
4. public static void main(String args[]) {
5. Scanner giris = new Scanner(System.in);
6. int secim;
7.
8. System.out.println("Secim yapiniz (1 - 2 - 3)");
9. secim=giris.nextInt();
10.
11. switch (secim) {
12. case 1 :
13. System.out.println("A sinifi dergilerin listesi");
14. break;
15.
16. case 2 :
17. System.out.println("B sinifi dergilerin listesi");
18. break;
19.
20. case 3 :
21. System.out.println("C sinifi dergilerin listesi");
55
22. break;
23.
24. default :
25. System.out.println("Hatali secim! 1, 2 ya da 3'e basiniz.");
26. break;
27. }
28. }
29. }
Bu programın çıktısı aşağıdaki gibi gerçekleşecektir:
switch / case Yapısıyla İlgili Örnek:
Bir turizm şirketi farklı tur çeşitlerinden oluşan bir liste sunuyor. Kullanıcı bu listeden ilgilendiği bir
turu seçtiğinde, o turla ilişkili ayrıntılı bilgiye ulaşıyor. Burada aşağıdaki basit algoritmayı
uygulayacağız
1. import java.io.IOException;
2. import java.util.Scanner;
3.
4. public class Cases2{
5. public static void main(String args[]) throws IOException{
6. Scanner giris = new Scanner(System.in);
7. int i;
8.
9. System.out.println("Portakal Turizm A.S. Sunar");
10. System.out.println("(1) Orta Avrupa Turu");
11. System.out.println("(2) Amerika Turu");
12. System.out.println("(3) Uzak Dogu Turu");
13. System.out.println("Seciminiz?");
14. i = giris.nextInt();
1. Tur seçenekleri ekrana yazdırılır.
2. Kullanıcıdan bu tur seçeneklerinden bir tanesini seçmesi istenir.
3. Kullanıcının seçimine uygun olan tur hakkındaki bilgiler ekrana yazdırılır.
56
15.
16. switch (i) {
17. case 1 :
18. System.out.println("Ucak ile Viyana, Budapeste, Prag");
19. System.out.println("4 yildizli otellerde sok! 1700$\n");
20. break;
21.
22. case 2 :
23. System.out.println("Ozel ucak ile New York, Boston, Los Angeles");
24. System.out.println("5 yildizli otellerde sok! 3700$\n");
25. break;
26.
27. case 3 :
28. System.out.println("Ozel ucak ile Bang Kong, Hong Kong");
29. System.out.println("Tokyo, Pekin");
30. System.out.println("5 yildizli otellerde sok! 4000$\n");
31. break;
32.
33. default :
34. System.out.println("Hatali secim! 1, 2 veya 3 girilmeli");
35. break;
36. }
37. }
38. }
Programın çıktısı aşağıdaki gibi olacak:
9.7.while Döngüsü
Döngüsel işlem veya tekrarlı işlem (iterasyon, İng. iteration), bilgisayarı aynı işlem grubunu belirli bir
koşul sağlanana kadar tekrar tekrar yapmak için yönlendirir. Java dilinde döngü yapısını oluşturmak
için while döngüsü, do-while döngüsü ve for döngüsü kullanılır.
while döngüsü
57
While döngüsü bir şart sağlanıyor iken sürekli içindeki komutları çalıştırır. Kelime anlamı olarak
"olduğu müddetçe" anlamı çıkar. Yapısı şöyledir:
1. while (koşul) {
2. //komut 1
3. //komut 2
4. //...
5. //komutlar
6. }
While döngüsünde koşulun en başta olması ayırt edici bir özelliktir. Program akışı önce buradaki
koşulu mantıksal bir süzgeçten geçirir. Buna göre eğer koşula yazılan ifade matematiksel
olarak true (doğru)değer döndürüyorsa, süslü parantezlerle çevrili bloktaki komutlar sırasıyla
çalıştırılır. Ancak false (yanlış)değerini döndürüyorsa, bu komutlar hiçbir zaman çalışmayacaktır.
Bu durumda program akışına döngünün bittiği yerden devam eder.
Koşulun true (doğru) döndürmesinin ardından bloktaki komutlar sırasıyla çalıştırılır ve son komut
da çalıştırıldığında akış tekrardan koşulun olduğu satıra gelir ve koşulun true değer döndürüp
döndürmediği kontrol edilir. Koşul doğru olduğu müddetçe komutlar çalıştırılır.
Şimdi, while döngüsünü kullanarak 10'dan geriye doğru giden ve bu sırada sayıları ekrana basan
bir Java uygulaması yapalım:
1. public class WhileDongusu1 {
2. public static void main(String[] args) {
3.
4. int sayac=10;
5. while (sayac>=1) {
6. System.out.println(sayac);
7. sayac--;
8. }
9. }
10. }
Bu uygulamanın ekran çıktısı çok basitçe
şeklinde olacaktır.
While döngüsü yazarken şart ifadesinde mantıksal hatalar yapmamaya dikkat etmeliyiz.
58
Aşağıdaki programda bir faktöriyel hesabı yapalım. 1'den 10'a kadar olan sayıların faktöriyelini
ekrana basan bir Java programı olsun.
1. public class WhileDongusu2 {
2. public static void main(String[] args) {
3.
4. int faktoriyel=1;
5. int carpan=1;
6. while(carpan<=10) {
7. faktoriyel=faktoriyel*carpan; //1*1, 1*2, 2*3, 6*4, 24*5...
8. System.out.println(carpan+" faktoriyel: "+faktoriyel);
9. carpan++;
10. }
11. }
12. }
Bu programın örnek ekran çıktısı şöyle olacaktır:
Yukarıdaki örnekte while döngüsü, programcı tarafından sınırları belli bir alanda
çalışıyor: carpan değişkeni 10'a eşit veya küçük olduğu müddetçe. While döngüsü genelde tam sayı
gibi sınırları kesin olarak belli alanlarda kullanılmaz. Sınırları kesin belli olan tekrarlamalar için
sonraki bölümlerde göreceğiniz for döngüsü kullanılır.
Bir sonraki konuda, while döngüsünden tek farkı şartın yazıldığı yer olan do-while döngüsünü
göreceksiniz.
9.8.do ... while Döngüsü
while deyiminin önemli bir özelliği, test koşulunun döngünün başlangıcında olmasıdır. Bunun anlamı,
ilk anda koşulun yanlış olması halinde, while gövdesinin hiçbir zaman çalıştırılmayacağıdır. Ancak
gövdeyi hiç olmazsa bir kere çalıştırmamız gereken durumlar vardır. Bu durumlar çok yaygın olmasa
da gerektiği zaman do...while deyimini kullanmalıyız.
do..while döngü yapısının yazılışı şu şekildedir:
1. do {<br />
2. Deyim1;<br />
3. Deyim2;<br />
59
4. ...<br />
5. Deyim_n;<br />
6. } while(İfade) ;
do...while ve while döngüleri arasındaki tek fark, test koşulunun (ifadenin) do while döngüsünde,
döngünün sonunda yer almasıdır. Bunun anlamı, programın döngüyü hiç olmazsa bir kez
çalıştırmasıdır (ilk kez). Sonra, ifadenin değerine bağlı olarak, ifade doğru ise tekrar do'ya dönülerek
döngü sürebilir veya ifade yanlış ise bir sonraki deyimle devam edilebilir.
9.9.for Döngüsü
for deyimi ve for deyimi kullanılarak oluşturulacak döngü yapısı, işlemlerin tekrar sayısının önceden
belli olduğu durumlarda kullanılır.
for deyiminin yazılışı:
1. for(ifade1;ifade2;ifade3) Deyim;<br />
2.
Deyim
_x;
veya
1. for(ifade1;ifade2;ifade3)<br />
2.
{ Deyim
1;<br />
3.
Deyim2;<br />
4.
...<br />
5.
Deyim_n;<br />
6. }<br />
7. Deyim_x;
şeklindedir.
60
1. İlk olarak ifade1 hesaplanır; bu genellikle bir ya da daha fazla değişkene ilk değeri
veren bir atamadeyimidir.
2. Sonra ifade2 hesaplanır. Bu, deyimin koşulsal kısmıdır.
3. ifade2 yanlışsa, programın kontrolü for deyiminden çıkar ve program akışı programdaki bir sonraki
deyime geçer (deyim_x). Eğer ifade2 doğru ise, deyim veya deyimler grubu uygulanır.
4. Deyim ya da blok yapılı şekilde deyimler grubu çalıştırıldıktan sonra, ifade3 çalıştırılarak hesaplanır.
O zaman çevrim yine geriye, ifade2'ye döner.
İfade1 sadece bir kez çalıştırılır; ifade2 ve ifade3 ise, çevrimin her tekrarında (iteration) çalışıtırılır.
for deyimini anlamanın en iyi yolu, onu aşağıda olduğu gibi while deyimiyle karşılaştırmaktır.
1. for (ifade1; ifade2; ifade3)<br />
2. deyim;
yapısı
1. ifade1;<br />
2. while (ifade2)<br />
3. {<br />
4. deyim;<br />
5. ifade3;<br />
6. }yapısı ile tamamen aynıdır.
Aşağıda basit bir örnek ile for döngü yapısını daha iyi anlamaya çalışalım:
Örnek: For İle Tam Sayılar Toplamının Bulunması
1. import java.util.Scanner;
2.
3. public class PozTop{
4. public static void main(String args[]) {
5. Scanner giris = new Scanner(System.in);
6. int n, toplam;
7. int i;
8.
9. System.out.println("Kaca kadar sayilar toplansin? ");
10. n = giris.nextInt();
11.
12. toplam = 0;
13.
14. for (i = 1; i <= n; i++) {
15. toplam += i;
16. }
61
17.
18. switch (n) {
19. case 1 :
20. System.out.println("\n" + n + "=" + toplam);
21. break;
22.
23. case 2 :
24. System.out.println("\n1+" + n + "=" + toplam);
25. break;
26.
27. case 3 :
28. System.out.println("\n1+2+" + n + "=" + toplam);
29. break;
30.
31. case 4 :
32. System.out.println("\n1+2+3+" + n + "=" + toplam);
33. break;
34.
35. default :
36. System.out.println("\n1+2+3+..+" + n + "=" + toplam);
37. }
38. }
39. }
Programın Çıktısı
Bu programda, for’un başlangıç koşulunu belirleyen ve ifade1 olarak belirttiğimiz
ifade i=1 şeklindedir ve bu for döngüsünün parametresi diyebileceğimiz i değişkenine 1 değerini bir
ilk değer olarak atamaktadır.
İfade2 ise, i <= n şeklinde bir koşul ifadesidir. i değişkeninin değeri n’den küçük ya da n’ye
eşit olduğu sürece döngü sürecektir.
İfade3 ise i = i + 1 şeklinde bir artım ifadesidir ve döngünün her tekrarında i değişkeninin değerini
1 arttıracaktır.
62
Aşağıdaki tabloda döngü süresince i ve toplam değişkenlerinin değerlerinin nasıl değişeceğine
bakalım:
ÇEVRİM ADIMI i Toplam
Başlangıç, çevrim
öncesi 0
1 1 1
2 2 3 (1+2)
3 3 6 (1+2+3)
4 4 10 (1+2+3+4)
5 5 15
(1+2+3+4+5)
Aşağıdaki program parçasında görüldüğü gibi,
1. for(i=1; i<=n; i=i+1) {<br />
2. top=top+i;<br />
3. }<br />
4. System.out.println("\n1+2+3+..+"+n+"="+top); <br />
5. System.out.println("\ni="+i);döngüden çıkınca i’nin değeri yazdırılırsa,
i=6
değeri görünecektir.
Örnek: Faktöriyel Hesabı
for döngüsünü kullanacağımız diğer bir örnek program ise faktöriyel hesabı programı olacaktır.
Matematikte faktöriyel bilindiği gibi,
n!=1.2.3...n
şeklinde tanımlanır; yani n sayısının faktöriyeli 1’den n’ye kadar tam sayıların çarpımına eşittir.
Aşağıda, faktöriyel hesabıyla ilgili Java programı ve bu program içindeki değişkenlerin programın
çalıştırılması sırasındaki değişimlerini gösteren tablo yer alıyor:
Kod Bloğu:
1. import java.util.Scanner;
2.
3. public class Faktoriyel{
4. public static void main(String args[]){
5. Scanner giris = new Scanner(System.in);
63
6. int n, fakt;
7. int i;
8.
9. System.out.println("Kacin faktoriyeli bulunacak? ");
10. n = giris.nextInt();
11.
12. fakt = 1;
13.
14. for (i = 1; i <= n; i++) {
15. fakt = fakt * i;
16. }
17.
18. switch (n) {
19. case 1 :
20. System.out.println("\n" + n + "=" + fakt);
21. break;
22.
23. case 2 :
24. System.out.println("\n1*" + n + "=" + fakt);
25. break;
26.
27. case 3 :
28. System.out.println("\n1*2*" + n + "=" + fakt);
29. break;
30.
31. case 4 :
32. System.out.println("\n1*2*3*" + n + "=" + fakt);
33. break;
34.
35. default :
36. System.out.println("\n1*2*3*..*" + n + "=" + fakt);
37. }
38. }
39. }
64
Programın Çıktısı:
Faktöriyel Programındaki Değişkenlerin Programın Çalıştırılması Sırasındaki
Değişimlerini Gösteren Tablo
i fakt n
Çevrim
Öncesi 1 5
1 1 5
2 2(1*2) 5
3 6(1*2*3) 5
4 24(1*2*3*4) 5
5 120(1*2*3*4*5) 5
Örnek: Alterne Seri Toplamı
1.2/(3.4) - 5.6/(7.8) + 9.10/(11.12) - 13.14/(15.16)
şeklindeki alterne seri toplamını hesaplayalım. (Yukardaki ifadede "." sembolü çarpma işlemi
anlamındadır.)
Kod Bloğu:
1. public class Alterne {
2. public static void main(String args[]){
3. int i,p;
4. double x,s;
5. s=0;
6. p=1;
7. x=1.0;
8. for (i=1;i<=4;i++)
9. {
10. s=s+(x*(x+1))/((x+2)*(x+3))*p;
11. x=x+4;
65
12. p=-p;
13. }
14. System.out.println("Toplam= "+s);
15. }
16. }
Programın Çıktısı:
Programın Çalıştırılması Sırasında Alterne Seri Programındaki Değişkenlerin
Değişimlerini Gösteren Tablo
i x s p
Çevrim
öncesi 1.0 0 1
1 1.0 (1.2)/ (3.4) 1
2 5.0 (1.2)/ (3.4) – (5.6)/ (7.8) –1
3 9.0 (1.2)/ (3.4) – (5.6)/ (7.8) +(9.10)/ (11.12) 1
4 13.0 (1.2)/ (3.4) – (5.6)/ (7.8) +(9.10)/ (11.12)
– (13.14)/(15.16) –1
Açıklama:
Sadece 4 terim olduğu için for döngüsü 1’den 4’e kadar çalıştırıldı. İlk terim 1.2/ (3.4) ve ikinci
terim5.6/(7.8) olduğu için, x değişkeninin ilk terimdeki ilk sayıyı temsil ettiği
durumda, terimi x.(x+1)/((x+2).(x+3)) şeklinde ifade edebiliriz. x yerine 1 koyarak bu durum kolayca
kanıtlayabiliriz. İkinci terimde ilk sayı5, üçüncü terimde ilk sayı 9 olduğuna göre x her seferinde 4
arttırılmalıdır. Bunu da programdax=x+4; deyimiyle gerçekleştiriyoruz. Bu terimi x+=4; şeklinde de
yazabiliriz.
Seri alterne seri olduğuna göre, yani terimlerin işaretleri +,–,+,– şeklinde
değiştiğine göre, p değişkeni yardımıyla terimlerin işaretlerini ayarlayabiliriz. p önce 1 olarak atanır.
Sonra döngü içine konulan p=–p;ifadesi ise bir sonraki işareti –, bir sonrakini + ve onu
izleyeni – yapar. (Programı kâğıt üzerinde adım adım izleyelim).
66
İç İçe Döngüler
Bir döngü yapısının içine başka bir döngü yapısının yerleştirilmesiyle elde edilen yapıya iç içe
döngü (nested loop) adı verilir.
Java dilinde, if deyimlerini herhangi bir derinliğe kadar iç içe kullanmak nasıl mümkünse, döngü
deyimlerini de iç içe kullanmak olasıdır. Şu kural iç içe döngüler için daima geçerlidir:
İç içe döngülerde en içteki döngü en önce
tamamlanır.
İç İçe for Döngüleri İçin Örnekler
Örnek 1:
Aşağıdaki programda, dış döngü olan a parametreli döngü 5 kez çalışıyor (a=1, 2, 3, 4, 5). a’nın her
değeri içinse içteki döngü 3 kez çalışıyor (i=1, 2, 3). Böylece aşağıdaki çıktı elde ediliyor:
Kod Bloğu:
1. public class IcIce {
2. public static void main(String args[]){
3. int a,i;
4.
5. //5 kez tekrarla
6. for(a=1;a<=5;a++)
7. {
8. System.out.println("a= "+a);
9.
10. //3 kez tekrarla
11. for(i=1;i<=3;i++) {
12. System.out.println("i= "+i);
13. }
14. System.out.println();
15. }
16. }
17. }
67
Programın Çıktısı:
Örnek 2: Çarpım Tablosu
1’den 10’a kadar sayılar için bir çarpım tablosu hazırlamak istiyoruz. Bunun için iç içe 2 döngü
yeterlidir ve her iki döngünün de parametresi 1’den 10’a kadar değişecektir. Programın kodu şu
şekildedir:
Kod Bloğu:
1. public class CarpimTablosu {
2. public static void main(String args[]){
3. int altcizgi, i, j;
4. System.out.println(" 1 2 3 4 5 6 7 8 9 10 ");
5. //döngüyle uzunca bir çizgi çizelim
6. for(altcizgi=1; altcizgi<=70; altcizgi++){
7. System.out.print("_");
8. }
9. System.out.println();
10.
11. for (i =1; i<=10; i++) {
12. System.out.print(i+" | ");
13.
14. for (j=1 ; j<=10 ; j ++) {
15. System.out.print(i*j +" ");
16. }
17. System.out.println();
18. }
68
19. }
20. }
Programın Çıktısı:
Örnek 3: Faktöriyelli Terimlerden Oluşan Seri Toplamı
Aşağıdaki seri toplamını hesaplayacak bir Java programı yazalım:
1/ 2! + 1/3! + 1/4! +...+ 1/10!
Bu seri toplamını hesaplamak istediğimizde, iç içe iki döngü kullanmak gerektiğini hemen anlarız:
Her adımda, bir toplama işlemi gerektiren, terimlerin toplanmasının gerekli olduğu bir döngü
(Yukarıdaki tek döngü örneklerindeki 1 + 2 + 3 + ... + n toplamı örneğini hatırlayalım.)
Yukarda belirtilen döngünün her parametre değeri için, o adımdaki faktöriyeli hesaplatmak
zorunda olduğumuz ve o nedenle yukarıdaki döngünün içinde yer alması gereken bir döngü.
Kod Bloğu:
1. public class FaktoriyelliSeri {
2. public static void main(String args[]){
3. double s,fakt;
4. int i,j;
5. s=0;
6. for (i=2;i<=10;i++) {
7. fakt=1;
8.
9. for(j=1;j<=i;j++) {
10. fakt=fakt*j;
11. }
12.
13. s=s+1/fakt;
14. System.out.println(s);
15. }
69
16. System.out.println("Seri toplami "+s);
17. }
18. }
Programın Çıktısı:
Programın çalıştırılması sonucu i, j, s ve fakt değişkenlerinin alacağı değerlerle ilgili tabloya göz
atalım:
DIŞ ÇEVRİM İÇ ÇEVRİM FAKTÖRİYEL TOPLAM
i j fakt s
0
2 1 1 0
2 2 2 1/2
3 1 1 1/2
3 2 3 1/2
3 3 6(1.2.3=3!) 1⁄2+1/6
4 1 1 1⁄2+1/6
4 2 2 1⁄2+1/6
4 3 6 1⁄2+1/6
4 4 24(1.2.3.4=4!) 1⁄2+1/6+1/24
... ... ... ...
10 10 10! 1⁄2+1/6+1/24+..
+1/20!
70
Soru: Yukarıdaki seri toplamını, sadece bir for döngüsü kullanarak hesaplatabilir miyiz?
Cevap: Evet. Yukarıdaki seri toplamını tek bir for döngüsü ile hesaplatan ve aynı sonuçları elde
eden Java programının kod bloğu şöyledir:
1. public class FaktoriyelliSeri2 {
2. public static void main(String args[]){
3. double s,fakt;
4. int i;
5. s=0;fakt=1;
6.
7. for (i=2; i<=10; i++) {
8. fakt=fakt*i;
9. s=s+1/fakt;
10. System.out.println(s);
11. }
12. System.out.println("Seri toplami: "+s);
13. }
14. }
Programın Çıktısı
break Deyimi
break deyiminin Java programları içinde iki farklı kullanım alanı vardır:
1. switch yapısındaki case seçeneklerinden birinde switch yapısını terk etmek ve switch’i izleyen
deyime geçmek için kullanılır. (Bu tip kullanımla ilgili örnekler switch deyimi anlatılırken verilmiştir.)
2. Bir döngü (loop) yapısı içinden, döngüyü kontrol eden koşul ifadesini beklemeksizin döngü dışına
çıkmak için kullanılır.
break deyimi bir döngü içinde yer almışsa bu durumda break deyimi ile karşılaşır karşılaşmaz döngü
dışına çıkılır ve döngüyü izleyen deyime geçilir.
Örnek Program:
1. import java.util.Scanner;
2.
71
3. public class BreakClass{
4. public static void main(String args[]) {
5. Scanner giris = new Scanner(System.in);
6. double ort;
7. int sayac, toplam, sayi;
8. toplam = 0;
9. sayac = 0;
10. System.out.println("Alt alta pozitif sayilar gireceksiniz ve negatif sayi");
11. System.out.println("girene kadar onlar toplanacak. Negatif girdiginizde");
12. System.out.println("toplama isleminin sonucu size verilecektir.");
13.
14. while (true) {
15. System.out.print("Sayi giriniz: ");
16. sayi = giris.nextInt();
17.
18. if (sayi < 0) {
19. break;
20. }
21.
22. toplam += sayi;
23. sayac++;
24. }
25. ort = toplam / sayac;
26.
27. System.out.println("Toplami "+toplam+" olan "+sayac+" tane sayi girdiniz.");
28. System.out.println("Sayilarin ortalamasi da "+ort);
29. }
30. }
Programın Çıktısı:
72
9.10.continue Deyimi
continue deyimi, döngü içinde belirli bir koşulun kontrolüyle bir sonraki döngü adımına gidilmesini
gerçekleştirir.
Örnek:
Aşağıdaki programda for döngüsünün parametresi olan i değişkeni 3 ile tam bölünemeyen bir değer
alınca, bu değer ile işlem yapılmayıp bir sonraki adıma geçilmesi continue deyimi ile sağlanıyor.
Böylece program, kullanıcı tarafından girilen bir üst limite kadar, 3 ile bölünebilen sayıların toplamını
ve bu tip sayıların adedini buluyor.
Örnek Program:
1. import java.util.Scanner;
2.
3. public class Cont{
4. public static void main(String args[]) {
5. Scanner giris = new Scanner(System.in);
6. int toplam, i, ustlimit, sayac;
7.
8. System.out.println("Gireceginiz ust limite kadar olan ve");
9. System.out.println("3'e bolunebilen sayilar bulunacaktir.");
10. System.out.println();
11. System.out.println("Ust limiti giriniz: ");
12. ustlimit = giris.nextInt();
13. toplam = 0;
14. sayac = 0;
15.
16. for (i = 1; i <= ustlimit; i++) {
17. if (i % 3 != 0) {
18. continue;
19. }
20.
21. System.out.println("3'e bolunebilen sayi: " + i);
22. toplam += i;
23. sayac++;
24. }
25.
26. System.out.println("3-" + ustlimit + " arasindaki 3 ile bolunebilen "+sayac+" tane sayi
var.");
73
27. System.out.println("Bu tur sayilarin toplami " + toplam);
28. }
29. }
Programın Çıktısı:
74
Kaynakça https://developer.android.com/index.html
http://source.android.com/
http://www.yazilimcilardunyasi.com/p/mobil-programlama.html
http://www.programlamadefteri.com/android-programlama-dersleri
https://gelecegiyazanlar.turkcell.com.tr/konu/android