Metotlar. Bölüm 1. 1.1 Metot Nedir? Metot Nedir? Parametreler ve Yerel Değişkenler. main() Metodu. Hazır Metotlar. System.Math Sınıfının Metotları



Benzer belgeler
public static int Toplam int x, int y

Sunum İçeriği. Programlamaya Giriş

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

// hataları işaret eden referans

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

HSancak Nesne Tabanlı Programlama I Ders Notları

Bölüm 10 Statik ve Anlık Öğeler

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

Fonksiyonlar (Altprogram)

Belirli bir iş bir çok kez tekrarlanacaksa, programda bu iş bir kez yazılır ve döngü deyimleriyle istenildiği kadar tekrar tekrar çalıştırılabilir.

Ders 8: Metotlar. barisgokce.com

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

Nesne Yönelimli Programlama

C Programlama Dilininin Basit Yapıları

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Mantıksal İşlemler. 7.1 true, false, nil

Bir C programı C fonksiyonlarından oluşur. Bunlar arasında main() adı verilen ana fonksiyon daima olmalıdır. C fonksiyonları programı oluşturan

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 9

NESNEYE YÖNELİK PROGRAMLAMA

Lambda İfadeleri (Lambda Expressions)

DÖNGÜLER BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA DENEY-4 FÖYÜ GİRİŞ LABORATUARI.

Programlama Dilleri 3

Metotlar. d e f metot_adı [ ( [ arg [= d e f a u l t ] ]... [, arg [, &expr ] ] ) ] deyim ( l e r ) end

HSancak Nesne Tabanlı Programlama I Ders Notları

2 PYTHON A GIRIŞ 13 PyCharm İle Python Projesi Oluşturma 15 Projenin Çalıştırılması 18 İlk Python Programımız 19 Açıklama Satırları 21

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

ALGORİTMA VE PROGRAMLAMA II

Algoritma ve Programlama: Karar Yapıları ve Döngüler

Klavyeden Basit Giriş/Çıkış İşlemleri

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Programlama Dillerinde Kullanılan Veri Tipleri

Akış Konrol Mekanizmaları

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

ALGORİTMA VE PROGRAMLAMA I

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Dr. Fatih AY Tel:

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

for döngüsü for (başlangıç değeri; şart; artım) ifade; for (başlangıç değeri; şart; artım) { ifadeler; }

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

Java da İşleçler, Ders #3 (4 Kasım 2009)

BİLG Dr. Mustafa T. Babagil 1

C#(Sharp) Programlama Dili

Akış Kontrol Mekanizmaları

Internet Programming II

ÖDEV (Vize Dönemi) CEVAPLAR. 1. Ekrana Merhaba Dünya! yazdıran algoritmanın akış diyagramını çiziniz ve sözde kod olarak yazınız.

T I M U R K A R A Ç AY - H AY D A R E Ş C A L C U L U S S E Ç K I N YAY I N C I L I K A N K A R A

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

ALGORİTMA VE PROGRAMLAMA I

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

ELN1001 BİLGİSAYAR PROGRAMLAMA I

JAVADA METOTLAR. BMÜ-111 Algoritma ve Programlama. Yrd. Doç. Dr. İlhan AYDIN

Program Çözümleme. Aşağıdaki örneklerde printf() ve scanf() fonksiyonlarının işlevleri gösterilmektedir. Liste 1.1. Çözümleme:

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

BİL-141 Bilgisayar Programlama I (Java)

BMT 101 Algoritma ve Programlama I 8. Hafta. Yük. Müh. Köksal GÜNDOĞDU 1

1 JAVASCRIPT NEDİR? 1

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Imports ifadesi, program satırlarının en üstüne (Public Class satırından önce) yazılmalıdır. Aksi halde hata mesajı ile karşılaşılır.

Matematikte Bilgisayar Uygulamaları. Hafta 2 Dr. Murat GEZER

ÜNİTE İÇİNDEKİLER HEDEFLER MATEMATİKSEL METOTLAR. NESNE TABANLI PROGRAMLAMA I Okt. Mustafa AKBUĞA. (Math Sınıfı ve Metotları)

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

HSancak Nesne Tabanlı Programlama I Ders Notları

Döngüler. 1.1 while döngüsü

Döngüler. Tablo 15.1: Ruby de Başlıca Döngü Yapıları

Özyineleme (recursion)

HSancak Nesne Tabanlı Programlama I Ders Notları

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Bilgisayar Programlama MATLAB

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

ARALARINDA ASAL SAYILAR

Dr. Fatih AY Tel: fatihay@fatihay.net

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

MTK467 Nesneye Yönelik Programlama. Hafta 4 - Döngüler Zümra Kavafoğlu

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

BİL1001 Bilgisayar Bilimlerine Giriş 1

YZM 2105 Nesneye Yönelik Programlama

J A V A D A P R O G R A M D E N E T İ M İ V E O P E R A T Ö R L E R

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

BİLGİSAYAR PROGRAMLAMA MATLAB

EMT2226 Nesne Yönelimli Programlamaya Giriş

Öğr. Gör. Serkan AKSU 1

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Transkript:

İçindekiler 1 Metotlar 1 1.1 Metot Nedir?.............................. 1 1.2 Static Öğe................................ 2 1.3 Metot Kavramı............................. 3 1.3.1 Parametreler ve Yerel Değişkenler.............. 4 1.4 main() Metodu............................. 6 1.5 Nesne Yaratma............................. 11 1.6 Hazır Metotlar............................. 12 1.7 java.lang.math............................. 13 1.7.1 Fibonacci Sayıları....................... 16 1.8 Kullanıcının Tanımladığı Metotlar.................. 19 1.9 Uygulamalar.............................. 25 1.10 Alıştırmalar............................... 31 1.10.1 String den Tamsayıya Dönüşüm................ 31 i

ii İÇINDEKILER ii

Bölüm 1 Metotlar Metot Nedir? Parametreler ve Yerel Değişkenler main() Metodu Hazır Metotlar System.Math Sınıfının Metotları 1.1 Metot Nedir? Her bilgisayar dili değişken ve fonksiyon kavramlarına sahiptir. Bu tesadüfen değil, işin doğasından kaynaklanan bir durumdur. Değişkenler, bilgisayar programının işleyeceği ham maddedir. Bu ham maddelerin işlenip ürün haline getirilmesi için kullanılan araçlar fonksiyonlardır. Nesne Yönelimli (Object Oriented- OO) Programlama Dillerinde her şey sınıflar (class) içinde tanımlanır. Bir sınıfa ait değişkenler o sınıfın özelliklerini ortaya koyar. O nedenle, sınıf değişkenlerine, 1

2 1. metotlar çoğunlukla, özelik (property) denilir. Benzer olarak bir sınıf içinde tanımlı fonksiyonlar o sınıfın tavır, davranış ve eylemlerini ortaya koyar. Bu ayrımı gözetmek için olsa gerek, OO Programlama dillerinde fonksiyonlara metot denir. Çoğu zaman bu biz de bu geleneğe uyarak, bir sınıfta tanımlanan değişken yerine bazen özelik ya da veri alanı diyeceğiz. Benzer olarak, fonksiyon yerine eşanlamlı olarak metot diyeceğiz. Ancak, özellikle alışkanlıklarımıza dayanan vurgu gerektiğinde değişken ve fonksiyon adlarını kullanmaktan da çekinmeyeceğiz. Okurun, değişken ile özeliğin ve fonksiyon ile metodun eş anlamlı olduğunu daima anımsayacağını umuyoruz. Değişkenlere neden başka ad verdiğimizi birazdan anlamış olacağız. Fonksiyon kavramına geçmeden önce, bir gerçeği anımsamakta yarar vardır. Anadilimizi öğrenirken bile sistematik bir yöntem izlemedik. Bazı kalıpları (gramer) çevremizden duyduğumuz gibi kullanmaya başladık. Ana dilimizi kullanmayı öğrendikten çok sonra onun gramerini öğrendik. Programlama dillerinin öğrenimi de çoğunlukla ona benzer. Başlangıçta bir çok sözdizimini (syntax), nedenini sormadan, olduğu gibi kullanırız. Sonra onun nedenini algılamamız daha kolay olur. 1.2 Static Öğe Şimdiye dek bir çok kez kullandığımız main() metodunu static anahtar sözcüğü ile niteledik. Başka metot ve değişkenler (özelik) için de aynı nitelemeyi kullandık. Bir sınıfta tanımlı bir değişken veya metodu static diye nitelemenin OO programlamada özel bir işlevi vardır. Genel kural olarak, bir sınıfta tanımlı değişkenler ve fonksiyonlar, ancak o sınıfa ait bir nesne (object) yaratıldıktan sonra o nesne içinde işlevsellik kazanırlar. Bunun istisnai hali değişkenin veya metodun önüne static nitelemesi konulduğunda oluşur. Başka bir deyişle şunu söyleyebiliriz: Uyarı 1. static sözcüğü ile nitelenen değişken veya metot, ait olduğu bir nesne (object) yaratılmadan kullanılabilir. 2

1.3. Metot Kavramı 3 static sözcüğünün işlevini sınıf konusunu işlerken daha ayrıntılı açıklayacağımızı, ama o zamana kadar onu gerektiği yerde kullanmak zorunda olduğumuzu unutmayınız. 1.3 Metot Kavramı Metot kavramı, matematik derslerinden bildiğimiz fonksiyon tanımından başka bir şey değildir. Matematikte f : X Y, x y simgelerinin ifade ettiği anlam şudur: Fonksiyonun adı f dir. f fonksiyonu tanım kümesi denilen X kümesinden, değer kümesi denilen Y kümesi içine tanımlıdır. f fonksiyonu X kümesinden aldığı her x öğesini, fonksiyon kuralı denilen bir dönüşüm yöntemiyle Y kümesi içindeki y öğesine götürür (eşler). x öğesine fonksiyonun değişkeni, y öğesine x öğesinin f altındaki dönüşümü (resmi) diyoruz. Her x değişkenine bir ve yalnız bir y öğesi karşılık gelir. Başka bir deyişle, bir değişken birbirinden farklı iki öğeye eşlenemez. Buradan şunu hemen anlıyoruz. Her fonksiyonun bir tanım kümesi ( X ), bir değer kümesi ( Y ) ve bir dönüşüm kuralı x y vardır. Matematik ten anımsadığımız bu kavramı, şimdi, bilgisayar diliyle ifade edelim. Açıklamayı basit bir örnek üzerinde yaparsak konu daha kolay anlaşılacaktır. Aşağıdaki fonksiyon bir tamsayının karesini hesaplar. 1 i n t KaresiniBul ( s h o r t x ) { i n t y ; y = x x ; r e t u r n y ; 6 Bu tanımda i n t KaresiniBul ( s h o r t x ) 3

4 1. metotlar satırına fonksiyonun başlığı diyeceğiz. Fonksiyon başlığı, fonksiyon hakkında bize gerekli başlıca bilgileri verir. Bu nedenle, bazı kaynaklar ona fonksiyonun mühürü (signature) derler. Biz fonksiyon başlığı terimini tercih edeceğiz. Önce başlığın bize verdiği bilgilere bakalım: Fonksiyonun adı KaresiniBul bitişik iki sözcüktür. Fonksiyonun adının sağına yazılan (short x) ifadesi, fonksiyonun tanım kümesinin short veri tipi olduğunu ve değişkeninin x simgesiyle gösterildiğini belirtir. Fonksiyonun adının soluna yazılan int veri tipi fonksiyonun değer bölgesidir. Başlıktaki satırdan sonra gelen bloku fonksiyona işlevini yaptıran deyimleri içeren bloktur. Bu bloku fonksiyon bloku veya fonksiyon gövdesi diye adlandıracağız. gövdesi içinde y = x x çarpma ve atama işlemleri fonksiyonun yapacağı iştir. x x çarpımının sonucu y değişkenine atanmış ve y değeri fonksiyonun değeri olarak belirlenmiştir (x öğesinin eşleneceği y öğesini belirleyen fonksiyon kuralı). Fonksiyonun alacağı değeri return anahtar sözcüğü ile belirtiyoruz: r e t u r n y ; 1.3.1 Parametreler ve Yerel Değişkenler Bilgisayar programlama dillerinde, fonksiyonun başlığındaki parantez () içindeki değişken(ler)e parametre denilir. Bunun nedenini açıklamak için, yukarıdaki gövdesine bakalım. Fonksiyonun gövdesinde int tipinden bir y değişkeni tanımlanmıştır. Dolayısıyla bu fonksiyon iki farklı nitelikte değişken kullanmaktadır. Başlıktaki (short x) değişkeni ve fonksiyon gövdesi içindeki int y değişkeni. Bu iki değişkeni birbirlerinden ayırt etmek için, fonksiyon başlığındaki x değişkenine parametre ve gövdesi içindeki y değişkenine 4

1.3. Metot Kavramı 5 fonksiyonun yerel değişkeni denilir. Uyarı 2. Bilgisayar programlarında fonksiyona, matematikteki gibi tek harfli ad takmak yerine, genellikle, onun işlevini ima eden sözcükler takılır. Kaynak programı okuyan kişinin fonksiyonun işlevini hemen kavraması için bu iyi bir gelenektir. Bunu alışkanlık edininiz. Ancak, derleyici açısından fonksiyona takılan ad hiç önemli değildir. Tek harfli ad olsa da birden çok sözcükten oluşan uzun ad verilse de sistem ona işlevini eksiksiz gördürecektir. Bilgisayar programlarında fonksiyonların parametrelerinin her biri bir veri tipi üzerinde tanımlıdır. Bu veri tip(ler)i onun tanım kümesidir. Her fonksiyon, parametreleri ve yerel değişkenleri üzerinde, önceden belirlenen bazı işlemleri yapar ve sonunda bir değer verir (dönüşüm). Bu değer bir veri tipi içindedir. O veri tipi, fonksiyonun değer kümesidir. Değer kümesi void (boş küme) olabilir. O durumda, fonksiyon gövdesinde belirlenen işi yapıyor, ama bir değer vermiyor. Buna bazı dillerde yordam (procedure) deniliyor. Java dilinde her şeyin bir sınıf içinde tanımlanması gerektiğini söylemiştik. Öyleyse, yukarıdaki fonksiyon tanımını bir sınıf içine taşımalıyız. Fonksiyonumuzu istediğimiz bir sınıf içinde tanımlayabileceğimizi ileride göreceğiz. Ama, şimdi işleri kolaylaştırmak için onu, main() fonksiyonunu da içeren bir sınıf içine taşıyalım. Program 1.3.1. 4 p u b l i c c l a s s Kare { s t a t i c i n t n ; p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 9 n = k a r e s i n i B u l ( 9 ) ; System. out. p r i n t l n ( n ) ; s t a t i c i n t k a r e s i n i B u l ( i n t x ) { 5

6 1. metotlar 14 i n t y ; y = x x ; r e t u r n y ; / 2 81 / 1.4 main() Metodu main() metodu, Java dilinde bir programın bütün işlevini yaptıran ana metottur. Programın kullanacağı bütün deyimleri tek başına içerebileceği gibi, modüler yapıda yazılan programlarda öteki sınıflarda tanımlanan metotları ve değişkenleri çağırır ve belirlenen sırayla işleme sokar. Her programda ana metot olma işlevini üstlenen bir ve yalnızca bir tane main() metodu vardır. Bir programda başka main() metotları olsa bile, onlar bu programda ana metot olma sorumluluğunu taşıyamazlar. main() bir metot olduğuna göre, tanımı genel sözdizimi kurallarına uyar. Çoğunlukla başlığını p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) biçiminde yazarız. Bunun nedenini ilerleyen bölümlerde daha iyi anlayacaksınız. Şimdilik şunları söylemekle yetinelim: Yukarıdaki main() metodunun, args adını taşıyan parametresi String tipi bir array dir. Değer kümesi void (boş küme) dir. Bu küme, matematikteki boş küme gibidir. Hiç bir öğesi yoktur. Dolayısıyla, bu örnekte main() metodu bir değer almıyor, yalnızca başka bir metodu çağırıp onun işlevini yapmasını sağlıyor. Başlıktaki static anahtar sözcüğünü mutlaka kullanmalıyız. Onun ne iş yaptığını ileride göreceğiz. Yukarıdaki örnekte, Kare adlı sınıf içinde, s t a t i c i n t n ; 6

1.4. main() Metodu 7 değişkeni tanımlıdır. Sınıfa ait değişkenlere özelik diyeceğimizi söylemiştik. Dolayısıyla, n değişkeni Kare sınıfının bir özeliğidir. Ayrıca bu sınıf içinde main() metodu ile karesinibul() metodu tanımlıdır. main() metodunun gövdesinde yazılan k a r e s i n i B u l ( 9 ) ; deyimine, fonksiyonu parametre değeriyle çağırmak denir. Fonksiyon çağrılırken onun x parametre adı yerine, o parametreye verilen 9 değeri ile çağrılmaktadır. Başka bir deyişle, fonksiyon çağrılırken x x soyut işlemi yerine 9 9 somut işlemini yapması istenmektedir. Bu olgu, matematikte f(x) = x 2 fonksiyonu tanımlı iken f(9) = 9 2 = 81 işlemini yapmak gibidir. Kare sınıfı içinde tanımlanan n değişkeni,karesinibul() metodu ve main() metodu static anahtar sözcüğü ile nitelenmişlerdir. Bunun nedenini bu bölümün başında açıklamıştık. Ayrıca, anımsayacaksınız, bu bölümün başında sınıf içinde tanımlanan değişkenlere özelik diyeceğiz demiştik. Böylece, bir sınıf içinde olabilecek üç farklı nitelikteki değişkeni ayrı ayrı gruplamış oluyoruz: Fonksiyonun yerel değişkeni Fonksiyonun parametresi Sınıfın yerel olmayan değişkeni Yukarıdaki basit örnekte görüldüğü gibi, bu değişken gruplarının kullanılışları ve işlevleri birbirlerinden farklıdır. Ayrıca bir fonksiyonun hiç parametresi veya yerel değişkeni olmayabileceği gibi, birden çok parametresi veya yerel değişkeni olabilir. Benzer olarak, bir sınıfın hiç değişkeni veya metodu olmayabileceği gibi, birden çok değikeni ve metodu olabilir. Bunları örnekler üzerinde göreceğiz. 7

8 1. metotlar Aşağıdaki program bir metin içindeki küçük harf, büyük harf, rakam ve alfasayısal (harf veya rakam) olmayan karakterlerin sayılarını bulur. Her bir sayımı yapmak için, KarakterleriSay sınıfı içinde dört ayrı metot tanımlanmıştır. Metotların main() tarafından nesne yaratılmadan çağrılabilmesi için herbirine static nitelemesi verilmiştir. Program 1.4.1. 4 import java. u t i l. Scanner ; p u b l i c c l a s s K a r a k t e r l e r i S a y { 9 s t a t i c i n t n ; s t a t i c c h a r [ ] sarr ; p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; System. out. p r i n t l n ( " Bir s a t ı r yazıp Enter e b a s ı n ı z : " ) ; S t r i n g s = scan. nextline ( ) ; 14 sarr = s. tochararray ( ) ; System. out. p r i n t l n ( "Küçük Harf S a y ı s ı : " + küçükharfsay ( sarr ) ) ; System. out. p r i n t l n ( "Büyük Harf S a y ı s ı : " + büyükharfsay ( sarr ) ) ; System. out. p r i n t l n ( "Rakam S a y ı s ı : " + rakamsay ( sarr ) ) ; 19 System. out. p r i n t l n ( " A l f a s a y ı s a l Olmayan Karakter S a y ı s ı : " + a l f a s a y ı s a l D e ğ i l s e S a y ( sarr ) ) ; s t a t i c i n t küçükharfsay ( c h a r [ ] s t r ) { i n t küçükharfsayısı = 0 ; 24 f o r ( c h a r h a r f : s t r ) { i f ( Character. islowercase ( h a r f ) ) { küçükharfsayısı++; 29 r e t u r n küçükharfsayısı ; 8

1.4. main() Metodu 9 s t a t i c i n t büyükharfsay ( c h a r [ ] s t r ) { i n t büyükharfsayısı = 0 ; 34 f o r ( c h a r h a r f : s t r ) { i f ( Character. isuppercase ( h a r f ) ) { büyükharfsayısı++; 39 r e t u r n büyükharfsayısı ; s t a t i c i n t rakamsay ( c h a r [ ] s t r ) { i n t rakamsayısı = 0 ; 44 f o r ( c h a r h a r f : s t r ) { i f ( Character. i s D i g i t ( h a r f ) ) { rakamsayısı++; 49 r e t u r n rakamsayısı ; s t a t i c i n t a l f a s a y ı s a l D e ğ i l s e S a y ( c h a r [ ] s t r ) { i n t a l f a S a y ı s a l D e ğ i l S a y ı s ı = 0 ; 54 f o r ( c h a r h a r f : s t r ) { i f (! Character. i s L e t t e r O r D i g i t ( h a r f ) ) { a l f a S a y ı s a l D e ğ i l S a y ı s ı ++; 59 r e t u r n a l f a S a y ı s a l D e ğ i l S a y ı s ı ; / Bir s a t ı r yazıp Enter e b a s ı n ı z : I s t a t i s t i k ve B i l g i s a y a r B i l i m l e r i, 2011 2012 akademik YILI. 4 Küçük Harf S a y ı s ı : 36 Büyük Harf S a y ı s ı : 7 Rakam S a y ı s ı : 8 A l f a s a y ı s a l Olmayan Karakter S a y ı s ı : 9 / 9

10 1. metotlar static nitelemesinin işlevini daha iyi açıklamak için Birkaç örnek program daha inceleyeceğiz. Aşağıdaki programı derlemeyi deneyiniz. Program 1.4.2. 2 import java. u t i l. Date ; p u b l i c c l a s s Demo { 7 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { TarihYaz ( ) ; v o i d TarihYaz ( ) { 12 Date date = new Date ( ) ; System. out. p r i n t l n ( date. t o S t r i n g ( ) ) ; Derleyici size şu hata mesajını iletecektir: non s t a t i c method TarihYaz ( ) cannot be r e f e r e n c e d from a s t a t i c context Bu iletinin bize söylediği şey şudur: 11.satırdaki static olmayan TarihYaz() metodu ancak bir nesne içinde kullanılabilir. Şimdi bir nesne yaratmadan, static nitelemesiyle derleyicinin itirazını kaldırabileceğimizi, aşağıdaki program gösterecektir. Bunun için TarihYaz() metodunu static olarak nitelemek yetecektir. Program 1.4.3. 4 import java. u t i l. Date ; p u b l i c c l a s s Tarih { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { t. TarihYaz ( ) ; 10

1.5. Nesne Yaratma 11 9 s t a t i c v o i d TarihYaz ( ) { Date date = new Date ( ) ; System. out. p r i n t l n ( date. t o S t r i n g ( ) ) ; 14 / Mon Oct 31 2 0 : 5 8 : 1 0 EET 2011 / 1.5 Nesne Yaratma Şimdi de static nitelemesini kullanmamak için Tarih sınıfından bir nesne yaratalım. Sınıfları incelerken bu konuyu daha ayrıntılı ele almıştık. Burada şu kadarını tekrar anımsayalım: Tarih sınıfı tanımlı iken, main() metodu içinde Tarih t = new Tarih ( ) ; deyimi Tarih sınıfının t adlı bir nesnesini yaratır. Bu nesne içindeki TarihYaz() metodunu çağırmak (nesne içindeki metoda erişmek) için t. TarihYaz ( ) ; deyimi yeterlidir. Aşağıdaki programı derleyip koşturunuz; önceki program ile aynı çıktıyı verdiğini göreceksiniz. Program 1.5.1. 4 import java. u t i l. Date ; p u b l i c c l a s s Tarih { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Tarih t = new Tarih ( ) ; 11

12 1. metotlar 9 t. TarihYaz ( ) ; v o i d TarihYaz ( ) { Date date = new Date ( ) ; 14 System. out. p r i n t l n ( date. t o S t r i n g ( ) ) ; / Mon Oct 31 2 0 : 5 8 : 1 0 EET 2011 / 1.6 Hazır Metotlar Java çok zengin bir kütüphaneye sahiptir. Bu kütüphanede çok sayıda paket, her paket içinde sınıflar ve sınıflar içinde pek çok işi görecek metotlar vardır. Buna rağmen, kullanıcı gerekseme duyduğunda kendi paketlerini, sınıflarını ve metotlarını serbestçe yaratabilmektedir. Yukarıda yaptıklarımız, kullanıcının yaratabileceği sınıf ve metotların basit örnekleridir. Şimdiye kadar kullandığımız print(), println(), write(),... metotları java.io.printstream sınıfına aittirler. islowercase(), isuppercase(), isdigit(), IsLetter(), isspacechar(), iswhitespace, tostring(), tolowecase(), touppercasde(),... metotları Character sınıfına aittir. charat(int index), compareto(string str),concat(string str), getbytes(), getchars(int srcbegin, int srcend, char[] dst, int dstbegin), indexof(int ch), length(), substring(int beginindex, int endindex), tochararray(), tolowercase(), touppercase(), valueof(),... metotları String sınıfına aittir. İlerleyen bölümlerde Java kütüphanesindeki başka sınıf ve metotları kullanmayı öğreneceğiz. Bunlar hakkında daha ayrıntılı bilgiyi java web sitesinden her zaman öğrenebilirsiniz. Kütüphaneyi ezberle- 12

1.7. java.lang.math 13 meye kalkmayınız. Sizden beklenen, gerektiğinde o kütüphaneyi nasıl kullanacağınızı ve aradığınızı nasıl bulacağınızı öğrenmenizdir. 1.7 java.lang.math Matematik fonksionları her dilde çok önem taşır. Onlar olmadan program yazmak hemen hemen olanaksızdır. Java dili matematik metotlarını java.lang.math sınıfı içinde toplamıştır. Math sınıfı mühürlüdür (sealed). Dolayısıyla, ileride göreceğimiz gibi, Math sınıfının kalıtımı (inherited) olamaz. Math sınıfının bütün öğeleri static dir. O nedenle, Math sınıfının bir nesnesi (object) yaratılamaz. Böyle olduğu için, Math sınıfının metotlarını Math.Sqrt() biçiminde sınıf adıyla birlikte kullanacağız. Aşağıdaki program o metotlerı ve çağrılma yöntemlerini göstermektedir. Program 1.7.1. 2 import java. u t i l. Scanner ; p u b l i c c l a s s Demo { 7 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; d o u b l e x, y ; S t r i n g sx, sy ; 12 System. out. p r i n t l n ( " Lütfen b i r i n c i s a y ı y ı g i r i n i z : " ) ; // sx = scan. nextline ( ) ; x = scan. nextdouble ( ) ; System. out. p r i n t l n ( " Lütfen i k i n c i s a y ı y ı g i r i n i z : " ) ; 17 // sy = scan. nextline ( ) ; y = scan. nextdouble ( ) ; System. out. p r i n t l n ( ) ; 13

14 1. metotlar 22 System. out. p r i n t f ( "%n B a ş l ı c a Math M e t o t l a r ı : " ) ; System. out. p r i n t f ( "%n abs(% f ) = %f ", x, Math. abs ( x ) ) ; System. out. p r i n t f ( "%n c e i l i n g (% f ) = %f ", x, Math. c e i l ( x ) ) ; System. out. p r i n t f ( "%n exp(% f ) = %f ", x, Math. exp ( x ) ) ; System. out. p r i n t f ( "%n f l o o r (% f ) = %f ", x, Math. f l o o r ( x ) ) ; 27 System. out. p r i n t f ( "%n IEEERemainder(%f,% f ) = %f ", x, y, ( x % y ) ) ; System. out. p r i n t l n ( ) ; System. out. p r i n t f ( "%n l o g (% f ) = %f ", x, Math. l o g ( x ) ) ; System. out. p r i n t f ( "%n log10(% f ) = %f ", x, Math. log10 ( x ) ) ; 32 System. out. p r i n t f ( "%n max(% f ) = %f ", x, Math. max( x, y ) ) ; System. out. p r i n t f ( "%n min(%f,% f ) = {2 ", x, y, Math. min ( x, y ) ) ; System. out. p r i n t f ( "%n pow(% f ) = %f ", x, Math. pow( x, y ) ) ; System. out. p r i n t f ( "%n round(% f ) = %d", x, Math. round ( x ) ) ; // System. out. p r i n t f ("%n s i g n (% f ) = %f ", x, Math. s i g n ( x ) ) ; 37 System. out. p r i n t f ( "%n s q r t (% f ) = %f ", x, Math. s q r t ( x ) ) ; System. out. p r i n t l n ( ) ; System. out. p r i n t f ( "%n cos(% f ) = %f ", x, Math. cos ( x ) ) ; System. out. p r i n t f ( "%n s i n (% f ) = %f ", x, Math. s i n ( x ) ) ; System. out. p r i n t f ( "%n tan(% f ) = %f ", x, Math. tan ( x ) ) ; 42 System. out. p r i n t f ( "%n cotan(% f ) = %f ", x, 1 / Math. tan ( x ) ) ; System. out. p r i n t l n ( ) ; System. out. p r i n t f ( "%n acos(% f ) = %f ", x, Math. acos ( x ) ) ; 14

1.7. java.lang.math 15 System. out. p r i n t f ( "%n a s i n (% f ) = %f ", x, Math. a s i n ( x ) ) ; System. out. p r i n t f ( "%n atan(% f ) = %f ", x, Math. atan ( x ) ) ; 47 System. out. p r i n t f ( "%n atan2(%f,% f ) = {2 ", x, y, Math. atan2 ( x, y ) ) ; System. out. p r i n t l n ( ) ; System. out. p r i n t f ( "%n cosh(% f ) = %f ", x, Math. cosh ( x ) ) ; System. out. p r i n t f ( "%n s i n h(% f ) = %f ", x, Math. s i n h ( x ) ) ; System. out. p r i n t f ( "%n tanh(% f ) = %f ", x, Math. tanh ( x ) ) ; 52 System. out. p r i n t f ( "%n cotanh(% f ) = %f ", x, 1 / Math. tanh ( x ) ) ; 1 / Lütfen b i r i n c i s a y ı y ı g i r i n i z : 1234,56789 Lütfen i k i n c i s a y ı y ı g i r i n i z : 9876,54321 6 B a ş l ı c a Math M e t o t l a r ı : abs (1234,567890) = 1234,567890 c e i l i n g (1234,567890) = 1235,000000 11 exp (1234,567890) = I n f i n i t y f l o o r (1234,567890) = 1234,000000 IEEERemainder (1234,567890,9876,543210) = 1234,567890 l o g (1234,567890) = 7,118476 16 log10 (1234,567890) = 3,091515 max(1234,567890) = 9876,543210 min (1234,567890,9876,543210) = {2 pow (1234,567890) = I n f i n i t y round (1234,567890) = 1235 21 s q r t (1234,567890) = 35,136418 cos (1234,567890) = 0,996958 s i n (1234,567890) = 0,077944 tan (1234,567890) = 0,078182 15

16 1. metotlar 26 cotan (1234,567890) = 12,790738 acos (1234,567890) = NaN a s i n (1234,567890) = NaN atan (1234,567890) = 1,569986 31 atan2 (1234,567890,9876,543210) = {2 cosh (1234,567890) = I n f i n i t y s i n h (1234,567890) = I n f i n i t y tanh (1234,567890) = 1,000000 36 cotanh (1234,567890) = 1,000000 / Özyineli (Recursive) Metotlar Özyineli (recursive) metot kendi kendisini çağıran metottur. Bilgisayar programcılığında zor problemleri çözen önemli bir algoritmadır. Onunla ilgili bir örnek vereceğiz. 1.7.1 Fibonacci Sayıları Fibonacci sayıları doğanın çoğalma formülü diye bilinir. Biyolojide, tıpta ve mühendislikte önemli uygulamaları vardır. Fibonacci sayılarının ilk 10 tanesini hesaplayan aşağıdaki program özyineli bir metot kullanmaktadır. Program 1.7.2. 3 import java. u t i l. Date ; p u b l i c c l a s s Demo { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 8 f o r ( i n t i = 1 ; i < 1 1 ; i ++) System. out. p r i n t ( Fibonacci ( i ) + " " ) ; System. out. p r i n t l n ( ) ; 16

1.7. java.lang.math 17 13 s t a t i c i n t Fibonacci ( i n t n ) { i f ( n < 2) r e t u r n n ; e l s e r e t u r n Fibonacci ( n 1) + Fibonacci ( n 2) ; 18 1 / 1 1 2 3 5 8 13 21 34 55 / Özyineli metotlar, istenen işi yapmak için kendi kendilerini defalarca çağırırlar. Bunu daha iyi algılamak için, yukarıdaki Fibonacci() metodunun kaç kez çağrıldığını saydıralım. Bunun için bir sayaç değişkeni tanımlayıp her adımda 1 artmasını sağlamak yetecektir. Bunu yapan aşağıdaki program aynı zamanda Fibonacci sayılarının ne kadar hızla büyüdüğünü göstermektedir. Bunu canlıların çoğalmasına, örneğin bakterilerin çoğalmasına uygularsak Fibonacci sayılarının neden önemli olduğunu anlarız. Program 1.7.3. 2 c l a s s F i b o n a c c i S a y ı l a r ı { s t a t i c l o n g sayaç = 0 ; p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 7 f o r ( i n t i = 1 ; i <= 4 5 ; i ++) System. out. p r i n t f ( " Fibonacci(%d ) = %d a t ı d ı %n", i, Fibonacci ( i ), sayaç ) ; i ç i n %d adım 12 s t a t i c i n t Fibonacci ( i n t n ) { sayaç++; i f ( n < 2) r e t u r n n ; e l s e 17 r e t u r n Fibonacci ( n 1) + Fibonacci ( n 2) ; 17

18 1. metotlar 1 / Fibonacci ( n ) Değeri Kaç Adım Fibonacci ( 1 ) = 1 [ 1 adım a t ı d ı ] Fibonacci ( 2 ) = 1 [ 4 adım a t ı d ı ] Fibonacci ( 3 ) = 2 [ 9 adım a t ı d ı ] 6 Fibonacci ( 4 ) = 3 [ 1 8 adım a t ı d ı ] Fibonacci ( 5 ) = 5 [ 3 3 adım a t ı d ı ] Fibonacci ( 1 0 ) = 55 [ 4 5 2 adım a t ı d ı ] Fibonacci ( 1 5 ) = 610 [ 5. 1 4 9 adım a t ı d ı ] Fibonacci ( 2 0 ) = 6.765 [ 5 7. 2 9 0 adım a t ı d ı ] 11 Fibonacci ( 2 5 ) = 75.025 [ 6 3 5. 5 9 3 adım a t ı d ı ] Fibonacci ( 3 0 ) = 832.040 [ 7. 0 4 9. 1 2 2 adım a t ı d ı ] Fibonacci ( 3 5 ) = 9. 2 2 7. 4 6 5 [ 7 8. 1 7 6. 2 9 9 adım a t ı d ı ] Fibonacci ( 4 0 ) = 1 0 2. 3 3 4. 1 5 5 [ 8 6 6. 9 8 8. 8 3 0 adım a t ı d ı ] Fibonacci ( 4 5 ) = 1. 1 3 4. 9 0 3. 1 7 0 [ 9. 6 1 5. 0 5 3. 9 0 3 adım a t ı d ı ] 16 / Çarpınım (faktöriyel) hesabını da recursive (özyineli) metot ile yapabiliriz. Aşağıdaki iki metodu inceleyiniz. Birincisi n! sayısını döngü ile, ikincisi özyineli yöntemle buluyor. Program 1.7.4. c l a s s F a c t o r i a l s { 4 s t a t i c i n t n = 1 0 ; p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { System. out. p r i n t l n ( çarpınıma ( n ) ) ; System. out. p r i n t l n ( çarpınımb ( n ) ) ; 9 s t a t i c l o n g çarpınıma ( i n t m) { l o n g çarpınım = m; f o r ( i n t i = m; i >= 1 ; i ) { 14 çarpınım = i ; 18

1.8. Kullanıcının Tanımladığı Metotlar 19 r e t u r n çarpınım / n ; 19 s t a t i c l o n g çarpınımb ( i n t n ) { i f ( n <= 1) r e t u r n 1 ; e l s e r e t u r n n çarpınımb ( n 1) ; 24 / 3628800 3628800 / 1.8 Kullanıcının Tanımladığı Metotlar Java kütüphanesinde programcının gerekseme duyacağı çok sayıda metot vardır. Onları kullanabileceğiniz gibi, gerektiğinde kendi metodunuzu tanımlayabilirsiniz. Program 1.8.1, while döngüleri içinde break ve continue deyimlerinin kullanılışını gösteriyor. bereak deyimi, döngüyü orada keser ve program akışını döngüden çıkarır ve döngüden sonra gelen ilk deyime yollar. continue deyimi ise, o anki döngü adımını keser, döngü içinde kalan program akışını sonraki döngü adımına yollar. Program 1.8.1. 1 p u b l i c c l a s s WhileDöngüsü { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 6 System. out. p r i n t l n ( WhileContinue ( ) ) ; WhileBreak ( ) ; dowhile ( ) ; 19

20 1. metotlar 11 s t a t i c i n t WhileContinue ( ) { i n t a = 0 ; w h i l e ( a < 10) { a++; i f ( a == 5) { 16 a++; c o n t i n u e ; r e t u r n a ; 21 s t a t i c v o i d WhileBreak ( ) { i n t a = 0 ; w h i l e ( a < 10) { 26 a++; i f ( a == 5) b r eak ; 31 System. out. p r i n t l n ( a ) ; 36 s t a t i c v o i d dowhile ( ) { i n t a = 0 ; w h i l e ( a < 40) { i f ( a == 27) b r eak ; a++; 41 System. out. p r i n t l n ( a ) ; 1 / 10 5 27 / Kullanıcının Tanımladığı Metotlar Kendi metodunuzu yaratma- 20

1.8. Kullanıcının Tanımladığı Metotlar 21 nız gerekebilir. ToplamBul.java Program 1.8.2. c l a s s Demo { 5 s t a t i c d o u b l e a = 3 2. 1 4 ; s t a t i c d o u b l e b = 2 7. 9 6 ; p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { System. out. p r i n t l n ( Topla ( a, b ) ) ; 10 15 s t a t i c d o u b l e Topla ( d o u b l e x, d o u b l e y ) { r e t u r n x + y ; / 6 0. 1 / Program yazarken, derleyici kütüphanesindeki hazır fonksiyonları kullanmaya alışmak iyi bir alışkanlıktır. Onlar program yazmayı kolaylaştırdıkları gibi, daima doğru işlem yaptıklarına da güvenebiliriz. Ama zorunluluk olduğunda kendi fonksiyonlarımızı yaratabiliriz. Program?? kesirli sayıların karekökünü hesaplar. Hesaplama yöntemi Newton-Raphson yaklaşık değer bulma yöntemidir. Bu yöntem, f(x) fonksiyonunun yaklaşık değerini bulmak için x n+1 = x n f(x n) f (x n ) (1.1) yaklaşımını (approximation) kullanır. Eğer a sayısının kare kökünü tam bulamıyorsak, a sayısına istenildiği kadar yakın bir x 2 sayısı bulmaya çalışacağız. Bu ise y = f(x) = x 2 a nın istenildiği kadar küçük 21

22 1. metotlar kılınmasıyla sağlanır. (1.1) yöntemini f(x) fonksiyonuna uygularsak, şu ardışma formülü elde edilir: x n+1 = (x n + a x n )/2 (1.2) Program 1.8.3, (1.2) ardışma formülünü kullanarak, verilen bir sayının yaklaşık karekökünü bulmaktadır. Program 1.8.3. \ index { karekök 2 import java. u t i l. Scanner ; c l a s s Demo { 7 s t a t i c d o u b l e d ; // s a y ı n ı n karekökünü bulur p u b l i c s t a t i c d o u b l e karekök ( d o u b l e num) { i f (0 == num) { 12 r e t u r n 0 ; // S ı f ı r a bölmeyi ö n l e r d o u b l e r = (num / 2) + 1 ; // İ l k tahmin d o u b l e r1 = ( r + (num / r ) ) / 2 ; w h i l e ( r1 < r ) { 17 r = r1 ; r1 = ( r + (num / r ) ) / 2 ; r e t u r n r ; 22 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; System. out. p r i n t l n ( "Karekökü a l ı n a c a k s a y ı y ı g i r i n i z : " ) ; d = scan. nextdouble ( ) ; 27 System. out. p r i n t l n ( karekök ( d ) ) ; 22

1.8. Kullanıcının Tanımladığı Metotlar 23 1 / Karekökü a l ı n a c a k s a y ı y ı g i r i n i z : 12345,6789 111. 11111060555555 / Program 1.8.4, aynı işi, java kütüphanesinden yararlanarak çok daha kolay ve güvenli biçimde yapmaktadır. Program 1.8.4. import java. u t i l. Scanner ; 5 c l a s s SquareRoot { s t a t i c d o u b l e d ; p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; 10 System. out. p r i n t l n ( "Karekökü a l ı n a c a k s a y ı y ı g i r i n i z : " ) ; d = scan. nextdouble ( ) ; 15 System. out. p r i n t l n (Math. s q r t ( d ) ) ; / Karekökü a l ı n a c a k s a y ı y ı g i r i n i z : 12345,6789 111. 11111060555555 5 / Görüldüğü gibi, yalnızca 13.satırdaki deyim, verilen sayının karekökünü bulmaya yeterlidir. Bu örnekten görüldüğü gibi, Java, çok zengin bir matematik kütüphanesine sahiptir. Matematiksel işlemler için, programcının kendi fonksiyonunu yazmasına hemen hemen hiç gerek kalmaz. Matematik te olduğu gibi, başka alanlarda da Java kütüphanesine her zaman başvurabilir ve çoğunlukla, istediğimiz işi yapan bir metot bulabiliriz. Tabii, programcı, her zaman kendi metotlarını tanımlamakta serbesttir. 23

24 1. metotlar Bazen Java kütüphanesindeki hazır bir fonksiyonu kullanarak kendi fonksiyonumuzu tanımlayabiliriz. Program 1.8.5, Math.log() fonksiyonunu kullanarak, verilen sayının logaritmasını bulan logbul() adlı bir fonksiyon tanımlamaktadır. Program 1.8.5. 5 import java. u t i l. Scanner ; c l a s s Demo { s t a t i c d o u b l e d ; s t a t i c d o u b l e logbul ( d o u b l e y ) { 10 r e t u r n Math. l o g ( y ) ; p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; 15 System. out. p r i n t l n ( " Logaritması a l ı n a c a k s a y ı y ı g i r i n i z : " ) ; d = scan. nextdouble ( ) ; System. out. p r i n t l n ( logbul ( d ) ) ; 1 / Logaritması a l ı n a c a k s a y ı y ı g i r i n i z : 12345,6789 9. 421061394191835 / Tabii, aynı işi, yeni fonksiyon tanımlamaya gerek kalmadan çok daha kısa ve kolay yoldan yapabiliriz. Program 1.8.6 öyle yapmaktadır. Program 1.8.6. 24

1.9. Uygulamalar 25 5 import java. u t i l. Scanner ; c l a s s LogaritmaBul2 { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; 10 System. out. p r i n t l n ( " Logaritması a l ı n a c a k s a y ı y ı g i r i n i z : " ) ; System. out. p r i n t l n (Math. l o g ( scan. nextdouble ( ) ) ) ; / 2 Logaritması a l ı n a c a k s a y ı y ı g i r i n i z : 12345,6789 9. 421061394191835 / 1.9 Uygulamalar Matematik derslerinde verilen sayıların en küçük ortak katını (ekok) ve en büyük ortak bölenini (ebob) bulmak ilköğretimin önemli konularındandır. Şimdi bunları Java ile nasıl kolay bulacağımızı görelim. Program 1.9.1. import java. u t i l. Scanner ; 5 c l a s s EKOK { s t a t i c i n t n, m, ekok ; / a ve b ekok u bulunacak s a y ı l a r / s t a t i c i n t ekokbul ( i n t a, i n t b ) { 10 i n t n ; f o r ( n = 1 ; ; n++) { i f ( n % a == 0 && n % b == 0) r e t u r n n ; 25

26 1. metotlar 15 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; System. out. p r i n t l n ( " ekok u bulunacak s a y ı l a r ı n i l k i n i g i r i n i z : " ) ; 20 n = scan. n e x t I n t ( ) ; System. out. p r i n t l n ( " ekok u bulunacak s a y ı l a r ı n i k i n c i s i n i g i r i n i z : " ) ; m = scan. n e x t I n t ( ) ; 25 System. out. p r i n t l n ( ekokbul (n, m) ) ; / ekok u bulunacak s a y ı l a r ı n i l k i n i g i r i n i z : 3 123 ekok u bulunacak s a y ı l a r ı n i k i n c i s i n i g i r i n i z : 4567 561741 / Program 1.9.1 içindeki ekokbul(int a, int b) metodunun nasıl çalıştığını anlamak kolaydır. Döngü n sayacına 1 den başlayarak artan tamsayı değerler atıyor ve her birini hem a hem b ile tam bölünüp bölünemediğine bakıyor. En sonunda ekok sayısına ulaşıyor. Program 1.9.2, aynı işi özyineli (recursive) yöntemle yapmaktadır: Program 1.9.2. 3 import java. u t i l. Scanner ; c l a s s EKOK2 { s t a t i c i n t n, m, ekok ; 8 / a ve b ekok u bulunacak s a y ı l a r / 26

1.9. Uygulamalar 27 s t a t i c i n t ekokbul ( i n t a, i n t b ) { i n t prod ; i f ( b % a == 0) r e t u r n b ; 13 e l s e { prod = a b ; w h i l e ( a!= b ) { i f ( a > b ) a = a b ; 18 e l s e b = b a ; r e t u r n ekokbul (b, prod / a ) ; 23 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; System. out. p r i n t l n ( " ekok u bulunacak s a y ı l a r ı n i l k i n i g i r i n i z : " ) ; 28 n = scan. n e x t I n t ( ) ; System. out. p r i n t l n ( " ekok u bulunacak s a y ı l a r ı n i k i n c i s i n i g i r i n i z : " ) ; m = scan. n e x t I n t ( ) ; 33 System. out. p r i n t l n ( ekokbul (n, m) ) ; / ekok u bulunacak s a y ı l a r ı n i l k i n i g i r i n i z : 9876 ekok u bulunacak s a y ı l a r ı n i k i n c i s i n i g i r i n i z : 5 54321 178824732 / Aşağıdaki program iki tamsayının en büyük ortak bölenini (EBOB) bulur. Program 1.9.3. 27

28 1. metotlar 3 8 import java. u t i l. Scanner ; c l a s s Demo { s t a t i c i n t n, m, ekok ; / a ve b ebob i bulunacak s a y ı l a r / s t a t i c i n t ebobbul ( i n t a, i n t b ) { i n t kalan ; 13 w h i l e ( b!= 0) { kalan = a % b ; a = b ; b = kalan ; 18 r e t u r n a ; p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { 23 Scanner scan = new Scanner ( System. i n ) ; System. out. p r i n t l n ( "ebob i bulunacak s a y ı l a r ı n i l k i n i g i r i n i z : " ) ; n = scan. n e x t I n t ( ) ; System. out. p r i n t l n ( "ebob i bulunacak s a y ı l a r ı n i k i n c i s i n i g i r i n i z : " ) ; 28 m = scan. n e x t I n t ( ) ; System. out. p r i n t l n ( ebobbul (n, m) ) ; / ebob i bulunacak s a y ı l a r ı n i l k i n i g i r i n i z : 3 123 ebob i bulunacak s a y ı l a r ı n i k i n c i s i n i g i r i n i z : 456 3 / 28

1.9. Uygulamalar 29 Program 1.9.4, ebob bulmak için recursive metot kullanmaktadır. Program 1.9.4. 3 import java. u t i l. Scanner ; 8 c l a s s Demo { s t a t i c i n t n, m, ekok ; / a ve b ebob i bulunacak s a y ı l a r / s t a t i c i n t ebobbul ( i n t a, i n t b ) { i n t c ; w h i l e ( a % b!= 0) { 13 c = a % b ; a = b ; b = c ; r e t u r n b ; 18 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; System. out. p r i n t l n ( "ebob i bulunacak s a y ı l a r ı n i l k i n i g i r i n i z : " ) ; 23 n = scan. n e x t I n t ( ) ; System. out. p r i n t l n ( "ebob i bulunacak s a y ı l a r ı n i k i n c i s i n i g i r i n i z : " ) ; m = scan. n e x t I n t ( ) ; 28 System. out. p r i n t l n ( ebobbul (n, m) ) ; ebob i bulunacak s a y ı l a r ı n i l k i n i g i r i n i z : 123 ebob i bulunacak s a y ı l a r ı n i k i n c i s i n i g i r i n i z : 4567 5 1 29

30 1. metotlar İkiden çok sayının ebob ni bulmak için, ebobbul() metodunu ve birleşme (associative) özeliğini kullanmak yetecektir. Örneğin, üç sayının ebob ni bulmak için, ebob3() metodunu şöyle tanımlayabiliriz: ebob3(a, b, c) = ebobbul(ebobbul(a, b), c) Program 1.9.5. 5 import java. u t i l. Scanner ; c l a s s Demo { s t a t i c i n t n, m, r, ebob ; / a ve b ebob i bulunacak s a y ı l a r / 10 s t a t i c i n t ebobbul ( i n t a, i n t b ) { i n t c ; w h i l e ( a % b!= 0) { c = a % b ; a = b ; 15 b = c ; r e t u r n b ; 20 p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; 25 System. out. p r i n t l n ( "ebob i bulunacak s a y ı l a r ı n i l k i n i g i r i n i z : " ) ; n = scan. n e x t I n t ( ) ; System. out. p r i n t l n ( "ebob i bulunacak s a y ı l a r ı n i k i n c i s i n i g i r i n i z : " ) ; m = scan. n e x t I n t ( ) ; System. out. p r i n t l n ( "ebob i bulunacak s a y ı l a r ı n üçüncüsünü g i r i n i z : " ) ; 30 r = scan. n e x t I n t ( ) ; 30

1.10. Alıştırmalar 31 System. out. p r i n t l n ( ebobbul ( ebobbul (n, m), r ) ) ; 1 / ebob i bulunacak s a y ı l a r ı n i l k i n i g i r i n i z : 123 ebob i bulunacak s a y ı l a r ı n i k i n c i s i n i g i r i n i z : 456 6 ebob i bulunacak s a y ı l a r ı n üçüncüsünü g i r i n i z : 789 3 / 1.10 Alıştırmalar 1.10.1 String den Tamsayıya Dönüşüm "123" biçiminde String olarak yazılan sayıları 123 sayı değerine dönüştürmek için Integer.parseInt(aString) metodu kullanılır. Program 1.10.1, String olarak girilen sayıları gerçek sayısal değerlerine dönüştürüyor. Program 1.10.1. 1 import java. u t i l. Scanner ; 6 c l a s s StringToInt { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { Scanner scan = new Scanner ( System. i n ) ; System. out. p r i n t l n ( " Bir tamsayı g i r i n i z : " ) ; 11 S t r i n g a S t r i n g = scan. nextline ( ) ; i n t aint = I n t e g e r. p a r s e I n t ( a S t r i n g ) ; 31

32 1. metotlar 16 System. out. p r i n t l n ( aint ) ; / Bir tamsayı g i r i n i z : 123 4 123 / 32

Kaynakça 33

Dizin özyinel, 16 özyineli, 16, 26 çarpınım, 18 ebob, 27 ekok, 25, 26 en küçük ortak kat, 26 while döngüsü, 19 yerel değişken, 7 yerel olmayan değişken, 7 factorials, 18 Fibonacci, 16 fonksiyon, 2 hazır fonksiyo, 1 Java kütüphanesi, 1 logarirma, 24 matematik fonksiyonları, 13 Math, 13 metot, 1, 3 nesne yaratma, 11 Newton-Raphson, 21 parametre, 1, 7 parseint, 31 recursive, 16, 26 static, 2 static öğe, 2 StringToInt(), 31 tanımlanan fonksiyonlar, 19 34