Java’da Döngüler – While Döngüsü (while loop)

Java’da for döngüsü başlıklı yazımda döngü kavramını tanımlarken, aynı kod bloğunu defalarca çalıştırabilmemizi sağlayan yapılardır demiştim. While döngüsü de, for döngüsü gibi belirlediğimiz koşula bağlı olarak aynı kodları tekrar tekrar çalıştırmamıza yarayan bir diğer döngü türüdür. Neredeyse tüm programlama dillerinde mevcut olan bu yapı, belirlenen koşul bozuluncaya kadar kendini tekrar ederek çalışmaya devam eder. Belirlenen koşul her turda bir kez kontrol edilir. Koşul sağlanıyorsa döngü içerisindeki işlemler yapılır. Koşul sağlanmadığında döngü içerisindeki işlemler yapılmadan döngü sonlanır ve artık koşul tekrar kontrol edilmez. Java’da yazım biçimi while(koşul){işlemler} şeklindedir. Burada while parantezleri içerisine yazılacak koşul, mutlaka “true” ya da “false” mantıksal değerini sağlayan bir yapı olmalıdır.

java-while-loop-structure-image

While Döngüsü ile For Döngüsü Karşılaştırılması

For döngüsünde, döngünün başlangıç ve bitiş değerleri önceden bellidir. Yani döngünün kaç tur çalışacağını çoğu zaman önceden bilebiliriz. While döngüsünde ise durum biraz daha farklıdır. Öncelikle while döngüsünde, for döngüsündeki gibi başlangıç ve bitiş değerleri yoktur. Sadece koşul vardır. While döngüsü mantıksal bir kontrol yapar ve buna göre ya sonlanır, ya da tekraren çalışmaya devam eder. Kendimiz bir değer belirleyip while döngüsünün kaç tur çalışacağını belirleyebiliriz fakat for döngüsü zaten bunun için vardır. O nedenle genellikle while döngüsünü, döngünün kaç tur tekrar edeceği önceden belli olmayan durumlar için kullanırız.

Örneğin alttaki şemada görüldüğü gibi 1’den 5’e kadar sayıları yan yana yazdırma (12345) işlemini for döngüsü ile yapabildiğimiz gibi, while döngüsü ile de yapabiliriz. Bu karşılaştırma bize yapısal olarak for döngüsü ile while döngüsünün benzerliklerini de göstermektedir.

comparing-for-and-while-loops-in-java-image

Şemadaki örnekte döngünün 5 kez çalışmasını istedik ve bunu hem for döngüsü, hem de while döngüsü ile yapabildiğimizi gördük. Peki ya döngünün kaç kez tekrar edeceğini kestiremediğimiz bir durum olsaydı? Mesela programımız kullanıcıdan bir veri alıyor olsa ve kullanıcı istediğimizden farklı bir veri girdiğinde tekrar veri girmesini istese ve doğru veri girilene kadar bu durum tekrar etse, kullanıcının kaç kez istediğimizden farklı veri gireceğini, yani döngümüzün kaç kez tekrarlanacağını bilebilir miydik? Tabi ki bilemezdik. İşte bu durumda işimizi kolaylaştırmak için for döngüsünden uzaklaşıp, while döngüsüne başvurmak durumundayız.

While Döngüsü Nasıl Çalışır?

While döngüsü boolean değer sorgulamakta demiştik. Yani while, sorgulanmasını istediğimiz ifade true’ mu yoksa false’ mu diye bakar. Eğer değer true ise döngüye girer ve içerideki işlemleri yapar. İşlemler bittikten sonra boolean değeri tekrar sorgular ve değer true olduğu sürece bunu tekrar eder. Eğer değer false ise program while döngüsünden çıkar ve sonraki satıra geçer.

Boolean ifade en başta false ise program while döngüsüne hiç girmeden while sonrası satırlara geçer. Fakat ilk seferinde boolean ifade true ise program while döngüsüne girer ve artık bizim döngü içerisindeki kodlarda bir şekilde boolean ifadeyi true’dan false’a çevirecek bir işlem yaptırma zorunluluğumuz ortaya çıkar. (Bu zorunluluğun istisnası, “break” ve “continue” anahtar kelimeleridir.) Aksi durumda koşul hep geçerli olacak ve program sonsuz döngüye girecektir.

Mesela while döngüsü öncesinde tanımlanmış bir int “i” sayısı için; while koşul kontrolünde belirli bir sayıdan küçük mü, büyük mü, eşit mi, eşit değil mi, o sayının karesi mi, karekökü mü gibi bir kontrol yaptığımızı düşünelim. Eğer koşul ilk kontrol için true ise, while kod bloğu içine girildiğinde mutlaka “i” değerini değiştirecek bir kod yazmalıyız ki; tekrarlayan işlemler sonucunda boolean ifade “false” olabilsin ve program sonsuz döngüye girmesin.

Örneğin i değerini 1, koşulu i <= 5 olarak belirledik ve program while’a girdi. Eğer while bloğunda i değerini artıracak herhangi bir kod yazmazsak i her zaman 5’den küçük olacağından i <= 5 koşulu daima true olacak ve program sonsuz döngüye girecektir.

Yine örneğin String cevap = “hayır”; şeklinde bir string belirleyip, koşul olarak cevap “hayır” mı? sorgulamasını cevap.equalsIgnoreCase(“hayır”) şeklinde yaptık diyelim. ilk sorgulamada cevap değişkeninin değeri “hayır” olduğundan program while döngüsüne girer ve while bloğundaki işlemleri yapar. Bu işlemlerde kullanıcıya “döngüden çıkmak istiyormusunuz?” diye sorsak ve vereceği cevabı da cevap değişkenine atasak, ne zaman kullanıcı “hayır” dışında bir cevap verirse ancak o zaman cevap.equalsIgnoreCase(“hayır”) metodu false döndüreceğinden, kullanıcı “hayır” cevabını verdiği sürece döngüden çıkılmayacak ve while döngüsü tekrar tekrar çalışacaktır.

java-while-example-image

Örnekte görüldüğü üzere kullanıcı “hayır” cevabı verdiği sürece döngü tekrarlanmaktadır. “Hayır” dışında herhangi bir cevap verdiğinde ise (örnekte EVET) döngüden çıkılmaktadır.

“Hayır” cevaplarında programın büyük küçük harf farklılığı gözetmediği gözünüzden kaçmamıştır. Bu durum ile ilgili daha detaylı bilgiye ihtiyaç duyarsanız equals ve equalsIgnoreCase konulu yazıma buradan ulaşabilirsiniz.

Eklemek ya da sormak istediğiniz bir şey olursa yorumlarda paylaşmaktan çekinmeyin. Zaman ayırdığınız için teşekkürler.

Paylaşmak güzeldir...

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir