4. Kontrol Ifadeleri

Java’nın Temelleri

Ismail Kirbas

2026

4. Kontrol Ifadeleri

Bölüm 4: Konsol Girişi ve Etkileşimli Programlar

Bu bölümde, Java programlarının kullanıcı ile nasıl etkileşime geçeceğini öğreneceksiniz. Şimdiye kadar yazdığınız programlar sadece ekrana çıktı veriyordu. Oysa gerçek dünya uygulamaları, kullanıcıdan veri alarak bu verileri işler ve sonuç üretir. Konsol girişi, programlamanın temel yapı taşlarından biridir ve bu bölümde Scanner sınıfını kullanarak kullanıcıdan nasıl veri alacağınızı, bu verileri nasıl işleyeceğinizi ve etkileşimli programlar tasarlayacağınızı adım adım öğreneceksiniz.

4.1 Konsol Kavramı ve Temel Giriş Çıktı İşlemleri

Konsol, bilgisayar ile kullanıcı arasındaki metin tabanlı iletişim arayüzüdür. Java’da konsol işlemleri, standart giriş (System.in) ve standart çıkış (System.out) akışları üzerinden gerçekleştirilir.

Konsol Çıktısı: print() ve println()

Java’da konsola çıktı vermek için System.out.print() ve System.out.println() metotlarını kullanırız. Aralarındaki temel fark, println()’in çıktıdan sonra yeni bir satıra geçmesidir.

public class PrintVsPrintln {
    public static void main(String[] args) {
        System.out.print("Bu ");
        System.out.print("bir ");
        System.out.println("ornektir.");
        System.out.println("Yeni satir!");
    }
}

💡 Önemli Not: print() ardışık çıktıları aynı satırda gösterirken, println() her çağrıldığında yeni bir satıra geçer. Bu fark, kullanıcı arayüzü tasarlarken kritik öneme sahiptir.

Konsol Girişine Neden İhtiyaç Duyarız?

Şimdiye kadar yazdığınız programlar, verileri doğrudan kod içinde tanımlıyordu. Örneğin:

int yas = 25; // Sabit değer

Oysa gerçek hayatta, programın çalışma zamanında kullanıcıdan veri alması gerekir. Bunun için Java, Scanner sınıfını sunar. Bu sınıf, standart giriş akışından (System.in) veri okumamızı sağlar.

4.2 Scanner Sınıfının Kurulumu ve Kullanımı

Scanner sınıfı, Java’nın java.util paketinde bulunur ve kullanıcıdan farklı türlerde veri almamızı sağlar.

Scanner Sınıfını Projeye Dahil Etme

Scanner sınıfını kullanmak için öncelikle programımıza import etmeliyiz:

import java.util.Scanner;

Bu ifade, Java derleyicisine “Scanner sınıfını bu programda kullanacağım” anlamına gelir. Import işleminden sonra Scanner nesnesi oluşturabiliriz:

Scanner input = new Scanner(System.in);

📝 Not: System.in parametresi, Scanner’ın hangi giriş akışını kullanacağını belirtir. Bu durumda klavyeden giriş yapılacaktır.

Temel Veri Türleri İçin Scanner Metotları

Scanner sınıfı, farklı veri türleri için özel metotlar sunar:

Metot Okunan Veri Türü Örnek Kullanım
nextInt() Tam sayı (int) int sayi = input.nextInt();
nextDouble() Ondalıklı sayı (double) double maas = input.nextDouble();
next() Tek kelime (String) String isim = input.next();
nextLine() Tüm satır (String) String adres = input.nextLine();
nextBoolean() Mantıksal değer (boolean) boolean aktif = input.nextBoolean();

Metotlar Arasındaki Farklar ve Dikkat Edilmesi Gerekenler

Scanner metotlarını kullanırken dikkat edilmesi gereken önemli bir nokta vardır: next() ve nextLine() arasındaki fark.

next() metodu, boşluk karakterine kadar olan kısmı okurken, nextLine() tüm satırı okur. Ayrıca, sayı okuma metotları (nextInt(), nextDouble()) kullanıldıktan sonra nextLine() çağrıldığında, yeni satır karakterinin kalması nedeniyle beklenmeyen sonuçlar oluşabilir.

import java.util.Scanner;

public class ScannerFarklari {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        System.out.print("Adinizi girin: ");
        String ad = input.next(); // Sadece ilk kelimeyi alir
        
        System.out.print("Soyadinizi girin: ");
        String soyad = input.next();
        
        System.out.print("Yasinizi girin: ");
        int yas = input.nextInt();
        
        System.out.println("\nKullanici Bilgileri:");
        System.out.println("Ad: " + ad);
        System.out.println("Soyad: " + soyad);
        System.out.println("Yas: " + yas);
        
        input.close();
    }
}

⚠️ Uyarı: next() metodu boşluk karakterini okumayı durdurur. Örneğin, “Ahmet Mehmet” yazıldığında sadece “Ahmet” okunur. Tam ad almak için nextLine() kullanmalısınız.

Uygulama: Kullanıcı Bilgilerini Alma Programı

Şimdi, kullanıcıdan ad, yaş ve maaş bilgilerini alan kapsamlı bir örnek yapalım:

import java.util.Scanner;

public class KullaniciBilgileri {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        System.out.println("=== KULLANICI KAYIT SISTEMI ===\n");
        
        System.out.print("Adiniz: ");
        String ad = input.nextLine(); // Tam ad icin nextLine()
        
        System.out.print("Yasiniz: ");
        int yas = input.nextInt();
        
        System.out.print("Maasiniz: ");
        double maas = input.nextDouble();
        
        System.out.println("\n=== KAYIT BASARILI ===");
        System.out.println("Ad: " + ad);
        System.out.println("Yas: " + yas);
        System.out.println("Maas: " + maas + " TL");
        
        input.close();
    }
}

4.3 Kullanıcıdan Veri Alma Süreçleri

Kullanıcıdan veri almak, programın amacına göre farklı şekillerde gerçekleştirilebilir. Tekil veri alma, çoklu veri alma ve döngülerle veri alma gibi farklı yaklaşımlar vardır.

Tekil Veri Alma

Tekil veri alma, kullanıcıdan tek bir değer alıp bir değişkene atama işlemidir. Bu, en basit veri alma yöntemidir.

System.out.print("Bir sayi girin: ");
int sayi = input.nextInt();

Çoklu Veri Alma ve Saklama

Birden fazla kullanıcı girişini ardışık olarak okuyup farklı değişkenlerde saklayabiliriz:

import java.util.Scanner;

public class OgrenciBilgileri {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        System.out.println("=== OGRENCI KAYIT FORMU ===\n");
        
        System.out.print("Ogrenci adi: ");
        String isim = input.nextLine();
        
        System.out.print("Ogrenci numarasi: ");
        int numara = input.nextInt();
        
        System.out.print("Vize notu: ");
        double vize = input.nextDouble();
        
        System.out.print("Final notu: ");
        double finalNotu = input.nextDouble();
        
        double ortalama = vize * 0.4 + finalNotu * 0.6;
        
        System.out.println("\n=== OGRENCI BILGILERI ===");
        System.out.println("Isim: " + isim);
        System.out.println("Numara: " + numara);
        System.out.println("Ortalama: " + ortalama);
        
        input.close();
    }
}

Döngülerle Veri Alma

Döngüler, belirli sayıda veya belirli bir koşul sağlanana kadar kullanıcıdan veri almamızı sağlar.

for Döngüsü ile Belirli Sayıda Veri Okuma

import java.util.Scanner;

public class NotOrtalamasi {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        System.out.print("Kac ogrencinin notu girilecek? ");
        int ogrenciSayisi = input.nextInt();
        
        double toplam = 0;
        
        for (int i = 1; i <= ogrenciSayisi; i++) {
            System.out.print(i + ". ogrencinin notu: ");
            double not = input.nextDouble();
            toplam += not;
        }
        
        double ortalama = toplam / ogrenciSayisi;
        System.out.println("\nSinif Ortalamasi: " + ortalama);
        
        input.close();
    }
}

while Döngüsü ile Koşula Bağlı Veri Okuma

import java.util.Scanner;

public class CikisKontrolu {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String girilenVeri;
        int sayac = 0;
        
        System.out.println("Veri giris ekrani. Cikmak icin 'cikis' yazin.\n");
        
        while (true) {
            System.out.print("Veri girin: ");
            girilenVeri = input.nextLine();
            
            if (girilenVeri.equalsIgnoreCase("cikis")) {
                System.out.println("Program sonlandiriliyor...");
                break;
            }
            
            sayac++;
            System.out.println("Girilen veri: " + girilenVeri);
            System.out.println("Toplam giris sayisi: " + sayac + "\n");
        }
        
        input.close();
    }
}

💡 Önemli Not: equalsIgnoreCase() metodu, büyük/küçük harf duyarlılığını ortadan kaldırır. Bu sayede “ÇIKIŞ”, “çıkış” veya “Cikis” gibi farklı yazımlar da algılanır.

4.4 Etkileşimli Konsol Programları Tasarlama

Etkileşimli programlar, kullanıcıya seçenekler sunan ve bu seçeneklere göre yönlendirme yapan programlardır. Menü tabanlı programlar, bu tür etkileşimin en yaygın örneğidir.

Menü Tabanlı Programlar

Menü tabanlı programlar, kullanıcıya bir dizi seçenek sunar ve kullanıcının seçimine göre işlem yapar. Switch-case yapısı, menü yönlendirme için idealdir.

import java.util.Scanner;

public class HesapMakinesi {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean devam = true;
        
        while (devam) {
            System.out.println("\n=== HESAP MAKINESI ===");
            System.out.println("1. Toplama");
            System.out.println("2. Cikarma");
            System.out.println("3. Carpma");
            System.out.println("4. Bolme");
            System.out.println("5. Cikis");
            System.out.print("Seciminiz: ");
            
            int secim = input.nextInt();
            
            if (secim == 5) {
                System.out.println("Program sonlandiriliyor...");
                devam = false;
                break;
            }
            
            System.out.print("Birinci sayi: ");
            double sayi1 = input.nextDouble();
            
            System.out.print("Ikinci sayi: ");
            double sayi2 = input.nextDouble();
            
            switch (secim) {
                case 1:
                    System.out.println("Sonuc: " + (sayi1 + sayi2));
                    break;
                case 2:
                    System.out.println("Sonuc: " + (sayi1 - sayi2));
                    break;
                case 3:
                    System.out.println("Sonuc: " + (sayi1 * sayi2));
                    break;
                case 4:
                    if (sayi2 != 0) {
                        System.out.println("Sonuc: " + (sayi1 / sayi2));
                    } else {
                        System.out.println("Hata: Sifira bolme hatasi!");
                    }
                    break;
                default:
                    System.out.println("Gecersiz secim!");
            }
        }
        
        input.close();
    }
}

Durum Bilgisi ve Akış Kontrolü

Programın çalışma durumunu takip etmek için boolean flag değişkenleri kullanırız.