# While Döngüsü
â Javaânın en temel döngüsü while döngüsüdür. Hatta diyebiliriz ki, diÄer bütün döngü türleri kodumuz derlendiÄinde while bloÄuna dönüÅtürülür. while döngüsünün çalıÅma mantıÄı basittir: while bloÄu içindeki kod, baÄlı olduÄu koÅul saÄlandıÄı sürece çalıÅır. while bloÄunun yapısı Åu Åekildedir:
```java
while ( [koÅul] )
{
[döngüye girecek kodlar]
}
```
Burada belirtilen _koÅul_, **boolean** bir ifadedir. Bu koÅul **true** olduÄu sürece döngü devam eder. KoÅul **false** olursa döngü sonlanır.
â KoÅul ifadesi parantez içine yazılır. EÄer döngüye girecek kod tek satırdan oluÅuyorsa blok açmaya gerek yoktur; fakat birden fazla satırdan oluÅuyorsa mutlaka blok açılmalıdır.
```java
System.out.println("10'dan geriye sayıyorum...");
int counter = 10;
while (counter >= 0)
{
System.out.println(counter);
counter--;
}
```
Yukarıdaki kod çalıÅtırıldıÄında çıktısı aÅaÄıdaki gibi olur:
```java
10'dan geriye sayıyorum...
10
9
8
7
6
5
4
3
2
1
0
```
GörüldüÄü gibi koÅul var olduÄu sürece kodumuz çalıÅmıÅ, sonra döngü sona ermiÅtir.
â Döngülerin içeriÄi olmak zorunda deÄildir. Bazı durumlarda döngüye girecek kod olmasa bile döngüye girebiliriz. AÅaÄıdaki örneÄi inceleyelim:
```java
int left = 100, right = 200;
while (++left < --right);
System.out.println("100 ile 200'ün ortası: " + left);
```
Bu algoritma, 100 ile 200âün arasında tam ortada bulunan sayıyı bulmamızı saÄlar. Kodu çalıÅtırdıÄımızda çıktısı Åu Åekilde olur:
```java
100 ile 200'ün ortası: 150
```
GördüÄünüz üzere, içeriÄi olmasa bile bazı durumlarda döngüler fayda saÄlayabilir.
â Yani while döngüsü genellikle iÅlemin kaç kez tekrar edeceÄi bilinmediÄi durumda kullanılır. ÃrneÄin: müÅterinin hesabına giriÅ Åifresini kaç kez yanlıŠgireceÄini bilemeyiz. Bu nedenle bu tarz durumlarda "while" döngüsü tercih edilir hemen aÅaÄıdaki örnekte olduÄu gibi.
```java
Scanner scanner = new Scanner(System.in);
String customerPassword = "12345";
boolean passwordSuccessfull = false;
while(!passwordSuccessfull) {
System.out.println("Hesap Åifrenizi giriniz:");
String typedPassword = scanner.next();
if(customerPassword.contentEquals(typedPassword)) {
passwordSuccessfull = true;
System.out.println("Sisteme baÅarılı giriÅ yaptınız!");
}
}
```
â Java programla dilinde while döngüleri yapacaÄımız iÅin ne zaman biteceÄiniz bilmediÄimiz durumlarda kullanıÅlı olabilmektedir.Bu duruma verilebilecek örneklerden biri de yazdıÄımız herhangi bir oyun uygulaması olabilir.
â Oyunların genelde bitmesi için belirli Åartların saÄlanması gerekmektedir .Bu Åartlar oyunu oynayan kullanıcıların yaptıÄı hamlelere,oyunun deÄiÅkenlerine ve dinamikliÄine göre deÄiÅebilmektedir. AÅaÄıda örnek bir Åans oyunu simule edilmiÅtir. Ãncelikle boolean dönüŠtipine sahip bir game deÄiÅkeni tanımlanmıŠve deÄeri true olarak atanmıÅtır. Döngümüz bu deÄiÅken true deÄerini döndükçe devam edecektir. Ardından 2 oyunculu oyunumuzda oyuncuların puanları tanımlanmıŠve baÅlangıç deÄerleri 0'a atanmıÅtır.
â While döngümüzün içinde ilk olarak 2 adet int tipinde deÄiÅken oluÅturulmuÅ ve bu deÄiÅkenlerin her döngüde 0-2 arasında deÄerler üretmesi için random sınıfı kullanılarak atama yapılmıÅtır.EÄer random olarak üretilen deÄer 0'a eÅitse, 0 deÄerini üreten kullanıcı 1 puan kazanır ve oyunun bitmesi için herhangi bir kullanıcının puan toplamının 2 olması yeterlidir.Her döngüde kullanıcıların puanları kontrol edilir ve herhangi bir oyuncunun 2 puana ulaÅması halinde game deÄiÅkeni false deÄerine atanır ve döngü sonra erer. Döngü sonunda kullanıcıların puanı ekrana yazdırılır.
```java
public static void main(String[] args){
boolean game=true;
Random random =new Random();
int scorePlayer1=0;
int scorePlayer2=0;
while (game){
int valuePlayer1=random.nextInt(2);
int valuePlayer2=random.nextInt(2);
if(valuePlayer1==0)
scorePlayer1++;
if(valuePlayer2==0)
scorePlayer2++;
if(scorePlayer1==2 || scorePlayer2==2)
game=false;
}
System.out.println("Player1 score:"+scorePlayer1);
System.out.println("Player2 score:"+scorePlayer2);
}
```
AÅaÄıda programımızın örnek bir çıktısı verilmiÅtir:
```java
Player1 score:0
Player2 score:2
```
GörüldüÄü üzere kullanıcılardan herhangi birinin puanının 2 olması durumunda oyunumuz sonra ermiÅ ve ekrana puanları yazdırılmıÅtır.
â Javada dosya iÅlemleri yaparken while döngüleri kullanılabilir.Ãrnek olarak FileReader sınıfından bir file nesnesi oluÅturalım.Ardından bu nesne BufferedReader sınıfına ait read nesnesine parametre olarak gönderilir.Dosya oluÅturma iÅlemlere ileride File sınıfı konumuzda detaylı olarak deÄineceÄiz.Burada while döngüleri ile ilgili bilmemiz gereken dosyaların okuma iÅlemlerinde kullanılabileceÄidir.AÅaÄıda bu duruma bir örnek verilmiÅtir:
```java
public static void main(String[] args) throws IOException {
FileReader file = new FileReader(new File("source.txt"));
BufferedReader read = new BufferedReader(file);
String line = null;
while ((line = read.readLine()) != null) {
System.out.println(line.length());
}
}
```
ÃrneÄimizi incelersek dosya oluÅturma iÅlemleri tamamlandıktan sonra line adından bir string deÄiÅkeni oluÅturulur ve ilk olarak null deÄeri atanır.Ardından while döngümüzdeoluÅturduÄumuz read nesnesin bir fonksiyonu olan readLine() çaÄrılır ve line deÄiÅkenine eÅitlenir.Burada yapılmak istenen dosyanın satır satır okunma iÅlemidir.Bu döngümüz line deÄiÅkeni null deÄerine eÅit olana kadar çalıÅtırılır ve her bir döndüe mevcut satırın uzunluÄu döndürülür.
â While döngüsünün bir baÅka kullanım örneÄide aÅaÄıda gösterildiÄi gibi oluÅturulan List nesnelerinin içerisinde bulunan elemanları okuma iÅlemidir:
```java
public static void main(String[] args) {
List