android'e giriş eğitimleri 1_1

75
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.

Upload: univerist

Post on 12-Apr-2017

544 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: Android'e Giriş Eğitimleri 1_1

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.

Page 2: Android'e Giriş Eğitimleri 1_1

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.

Page 3: Android'e Giriş Eğitimleri 1_1

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.

Page 4: Android'e Giriş Eğitimleri 1_1

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.

Page 5: Android'e Giriş Eğitimleri 1_1

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.

Page 6: Android'e Giriş Eğitimleri 1_1

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.

Page 7: Android'e Giriş Eğitimleri 1_1

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

Page 8: Android'e Giriş Eğitimleri 1_1

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.

Page 9: Android'e Giriş Eğitimleri 1_1

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.

Page 10: Android'e Giriş Eğitimleri 1_1

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:

Page 11: Android'e Giriş Eğitimleri 1_1

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:

Page 12: Android'e Giriş Eğitimleri 1_1

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:

Page 13: Android'e Giriş Eğitimleri 1_1

12

Page 14: Android'e Giriş Eğitimleri 1_1

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:

Page 15: Android'e Giriş Eğitimleri 1_1

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. &nbsp;&nbsp;&nbsp; public static void main(String args[])<br />

3. &nbsp;&nbsp; &nbsp;{<br />

4. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("Guzel Yurdum Turkiye");<br

/>

5. &nbsp;&nbsp; &nbsp;}<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:

Page 16: Android'e Giriş Eğitimleri 1_1

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.

Page 17: Android'e Giriş Eğitimleri 1_1

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.

Page 18: Android'e Giriş Eğitimleri 1_1

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

Page 19: Android'e Giriş Eğitimleri 1_1

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&nbsp;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.

Page 20: Android'e Giriş Eğitimleri 1_1

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&gt;sEtkinIslemSayisi) {

10. return true;

11. } else {

12. return false;

13. }

14. }

15.

16. ...

17.

18. }

Page 21: Android'e Giriş Eğitimleri 1_1

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. }*/

Page 22: Android'e Giriş Eğitimleri 1_1

21

4. ...

5.

6. public static Boolean isEtkinIslemSayisiBigger(Integer _islemSayisi) {

7. if (_islemSayisi&gt;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.

Page 23: Android'e Giriş Eğitimleri 1_1

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

Page 24: Android'e Giriş Eğitimleri 1_1

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

Page 25: Android'e Giriş Eğitimleri 1_1

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;

Page 26: Android'e Giriş Eğitimleri 1_1

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);

Page 27: Android'e Giriş Eğitimleri 1_1

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.

Page 28: Android'e Giriş Eğitimleri 1_1

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--;

Page 29: Android'e Giriş Eğitimleri 1_1

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. }

Page 30: Android'e Giriş Eğitimleri 1_1

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ı

Page 31: Android'e Giriş Eğitimleri 1_1

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);

Page 32: Android'e Giriş Eğitimleri 1_1

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.

Page 33: Android'e Giriş Eğitimleri 1_1

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.

Page 34: Android'e Giriş Eğitimleri 1_1

33

Atama Operatörleri: Örnek Program

1. public&nbsp;class&nbsp;Uyg10{<br />

2. &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[

]&nbsp;args){<br />

3. <br />

4. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;k;<br />

5. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;l;<br />

6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;=&nbsp;k&nbsp;=13.72;<br

/>

7. <br />

8. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("l="+l);<br />

9. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("k="+k);<br />

10. &nbsp;&nbsp;&nbsp;&nbsp;}<br />

11. }

Örnek Programın Çıktısı

Örnek Program: Cast İfadesinin Kullanımı

1. public class Uyg10{<br />

2. &nbsp;&nbsp; &nbsp;public static void main(String[ ] args){</p>

3.

4. <p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int k;<br />

5. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;double l;<br />

6. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;l = k =(int)13.72;</p>

7.

8. <p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("l="+l);<br />

9. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("k="+k);<br />

10. &nbsp;&nbsp; &nbsp;}<br />

11. } Cast İfadesini Kullanan Örnek Programın Çıktısı:

Page 35: Android'e Giriş Eğitimleri 1_1

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.

Page 36: Android'e Giriş Eğitimleri 1_1

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&nbsp;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ı

Page 37: Android'e Giriş Eğitimleri 1_1

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&nbsp;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>

Page 38: Android'e Giriş Eğitimleri 1_1

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.

Page 39: Android'e Giriş Eğitimleri 1_1

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?");

Page 40: Android'e Giriş Eğitimleri 1_1

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();

Page 41: Android'e Giriş Eğitimleri 1_1

40

11.

12. if (x &gt; 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:

Page 42: Android'e Giriş Eğitimleri 1_1

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 &lt; 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:

Page 43: Android'e Giriş Eğitimleri 1_1

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 &lt; 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

Page 44: Android'e Giriş Eğitimleri 1_1

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&lt;45) {

12. //0-44 arası ortalama zayıf

13. sonuc="Zayif";

14. } else if (ortalama&lt;55){

15. //45-54 arası ortalama geçer

16. sonuc="Gecer";

17. } else if (ortalama&lt;70) {

18. //55-69 arası ortalamaya orta

19. sonuc="Orta";

Page 45: Android'e Giriş Eğitimleri 1_1

44

20. } else if (ortalama&lt;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&lt;45)

2. sonuc="Zayif";

3. else if (ortalama&lt;55)

4. sonuc="Gecer";

5. else if (ortalama&lt;70)

6. sonuc="Orta";

7. else if (ortalama&lt;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.

Page 46: Android'e Giriş Eğitimleri 1_1

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 &lt; b) {

21. if (a &lt; c) {

22. enKucukSayi=a;

23. } else {

24. enKucukSayi=c;

25. }

26. } else if (b &lt; 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:

Page 47: Android'e Giriş Eğitimleri 1_1

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

Page 48: Android'e Giriş Eğitimleri 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. &nbsp;&nbsp; &nbsp;public static void main(String[] args) {

3. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("3&gt;5 ifadesinin degeri

.."+(3&gt;5));

4. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("3&lt;5 ifadesinin degeri

.."+(3&lt;5));

5. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("3!=5 ifadesinin degeri

.."+(3!=5));

6. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("5==5 ifadesinin degeri

.."+(5==5));

7. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("5&gt;=4 ifadesinin degeri

.."+(5&gt;=4));

8. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("-1&lt;0 ifadesinin degeri .."+(-

1&lt;0));

9. &nbsp;&nbsp; &nbsp;}

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 {

Page 49: Android'e Giriş Eğitimleri 1_1

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. &nbsp;&nbsp;&nbsp;&nbsp;Deyim1;<br />

3. else&nbsp;if&nbsp;(ifade2)<br />

4. &nbsp;&nbsp;&nbsp;&nbsp;Deyim2;<br />

5. else&nbsp;if&nbsp;(ifade3)<br />

6. &nbsp;&nbsp;&nbsp;&nbsp;Deyim3;<br />

7. ....<br />

8. ....<br />

9. else<br />

Page 50: Android'e Giriş Eğitimleri 1_1

49

10. &nbsp;&nbsp;&nbsp;&nbsp;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.

Page 51: Android'e Giriş Eğitimleri 1_1

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 &lt;= 150000000)

17. v = gelir * 0.25;

18. else if (gelir &lt;= 300000000)

19. v = v1 + (gelir - 150000000) * 0.3;

20. else if (gelir &lt;= 600000000)

21. v = v1 + v2 + (gelir - 300000000) * 0.35;

22. else if (gelir &lt;= 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

Page 52: Android'e Giriş Eğitimleri 1_1

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 &lt; 0) {

20. System.out.println("Gercek kok yoktur. \n");

21. }

22. else if (delta == 0) {

23. x1 = -b / (2 * a);

Page 53: Android'e Giriş Eğitimleri 1_1

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.

Page 54: Android'e Giriş Eğitimleri 1_1

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 &gt;= 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.

Page 55: Android'e Giriş Eğitimleri 1_1

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");

Page 56: Android'e Giriş Eğitimleri 1_1

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.

Page 57: Android'e Giriş Eğitimleri 1_1

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ü

Page 58: Android'e Giriş Eğitimleri 1_1

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&gt;=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.

Page 59: Android'e Giriş Eğitimleri 1_1

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&lt;=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&nbsp;{<br />

2. &nbsp;&nbsp;&nbsp;&nbsp;Deyim1;<br />

3. &nbsp;&nbsp;&nbsp;&nbsp;Deyim2;<br />

Page 60: Android'e Giriş Eğitimleri 1_1

59

4. &nbsp;&nbsp;&nbsp;&nbsp;...<br />

5. &nbsp;&nbsp;&nbsp;&nbsp;Deyim_n;<br />

6. }&nbsp;while(İfade)&nbsp;;

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)&nbsp;&nbsp;Deyim;<br />

2.

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deyim

_x;

veya

1. for(ifade1;ifade2;ifade3)<br />

2.

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Deyim

1;<br />

3.

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

Deyim2;<br />

4.

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;...<br />

5.

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

Deyim_n;<br />

6. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />

7. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deyim_x;

şeklindedir.

Page 61: Android'e Giriş Eğitimleri 1_1

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&nbsp;(ifade1;&nbsp;ifade2;&nbsp;ifade3)<br />

2. deyim;

yapısı

1. ifade1;<br />

2. while&nbsp;(ifade2)<br />

3. {<br />

4. &nbsp;&nbsp;&nbsp;&nbsp;deyim;<br />

5. &nbsp;&nbsp;&nbsp;&nbsp;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 &lt;= n; i++) {

15. toplam += i;

16. }

Page 62: Android'e Giriş Eğitimleri 1_1

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.

Page 63: Android'e Giriş Eğitimleri 1_1

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&lt;=n; i=i+1) {<br />

2. &nbsp;&nbsp;&nbsp;&nbsp;top=top+i;<br />

3. }<br />

4. System.out.println("\n1+2+3+..+"+n+"="+top);&nbsp;<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);

Page 64: Android'e Giriş Eğitimleri 1_1

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 &lt;= 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. }

Page 65: Android'e Giriş Eğitimleri 1_1

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&lt;=4;i++)

9. {

10. s=s+(x*(x+1))/((x+2)*(x+3))*p;

11. x=x+4;

Page 66: Android'e Giriş Eğitimleri 1_1

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).

Page 67: Android'e Giriş Eğitimleri 1_1

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&lt;=5;a++)

7. {

8. System.out.println("a= "+a);

9.

10. //3 kez tekrarla

11. for(i=1;i&lt;=3;i++) {

12. System.out.println("i= "+i);

13. }

14. System.out.println();

15. }

16. }

17. }

Page 68: Android'e Giriş Eğitimleri 1_1

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&lt;=70; altcizgi++){

7. System.out.print("_");

8. }

9. System.out.println();

10.

11. for (i =1; i&lt;=10; i++) {

12. System.out.print(i+" | ");

13.

14. for (j=1 ; j&lt;=10 ; j ++) {

15. System.out.print(i*j +" ");

16. }

17. System.out.println();

18. }

Page 69: Android'e Giriş Eğitimleri 1_1

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&lt;=10;i++) {

7. fakt=1;

8.

9. for(j=1;j&lt;=i;j++) {

10. fakt=fakt*j;

11. }

12.

13. s=s+1/fakt;

14. System.out.println(s);

15. }

Page 70: Android'e Giriş Eğitimleri 1_1

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!

Page 71: Android'e Giriş Eğitimleri 1_1

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&lt;=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.

Page 72: Android'e Giriş Eğitimleri 1_1

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 &lt; 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ı:

Page 73: Android'e Giriş Eğitimleri 1_1

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 &lt;= 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.");

Page 74: Android'e Giriş Eğitimleri 1_1

73

27. System.out.println("Bu tur sayilarin toplami " + toplam);

28. }

29. }

Programın Çıktısı:

Page 75: Android'e Giriş Eğitimleri 1_1

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