SORULAR

1. Java dilinde do-while yapısını kullanarak aşağıdaki kurallara göre çalışan kodları yazınız.

a. Program tarafından 1000 ile 9999 arasında rastgele dört basamaklı bir şifre oluşturulacaktır (Math.random() yapısı kullanılarak).
b. Kullanıcıdan dört basamaklı bir şifre tahmini girmesi istenecektir. Program doğru şifre bulunana kadar çalışacaktır.
c. Kullanıcı 1000'den küçük veya 9999'dan büyük bir sayı girerse "Dört basamaklı bir sayı giriniz." mesajı verilecek ve tekrar giriş istenecektir.
d. Kullanıcının girdiği sayı oluşturulan şifreden küçükse "Daha büyük bir şifre giriniz.", büyükse "Daha küçük bir şifre giriniz.", eşitse "Tebrikler, şifreyi ... denemede buldunuz." mesajı verilecektir. Noktalı kısım, kullanıcının bu şifreyi kaç denemede bulduğunu belirtmelidir.
e. Kullanıcının en fazla 10 tahmin hakkı bulunacaktır. Kullanıcı 10 deneme sonunda doğru şifreyi bulamazsa "Tahmin hakkınız dolmuştur. Doğru şifre: ...." mesajı gösterilecek ve program sonlandırılacaktır.

2. Aşağıda görseli paylaşılan uygulamada bir metin içerisinde belirli bir karakterin kaç kez geçtiği gösterilmektedir. Bu ekran çıktısını parametre alan ve geri değer döndüren metot yardımıyla oluşturan Java kodlarını yazınız.

Ekran çıktısı büyük küçük harf duyarlılığına dikkat edilerek verilmelidir.

Örnek ekran çıktıları:

Bir metin giriniz: Soner ALTINTAŞ
Aranacak karakteri giriniz: n
'n' karakteri 1 kez geçmektedir.
Bir metin giriniz: Soner ALTINTAŞ
Aranacak karakteri giriniz: A
'A' karakteri 2 kez geçmektedir.

3. Sezar Şifreleme, her karakterin belirli bir sayıda kaydırılarak değişmesini sağlayan bir şifreleme tekniğidir.

Örneğin, kaydırma miktarı 2 ise, 'E' harfi 'G' ye, 'J' harfi 'L' ye dönüşür. Bu bilgiler doğrultusunda kullanıcının gireceği metnin yine kullanıcının gireceği kaydırma miktarı kadar kaydırılıp metnin şifreli halini parametre alan ve geri değer döndüren metot yardımıyla oluşturan Java kodlarını yazınız.

Örnek ekran çıktısı:

Şifrelenecek metni girin: Soner345
Kaydırma miktarını girin: 4
Şifreli metin: Wsriv789

2. KISIM – ÇÖZÜMLER

Aşağıda 3 soruyu tek tek çözdüm. Her soruda önce kodu veriyorum, sonra en basit şekilde mantığını ve sağlamasını anlatıyorum.


1. Soru Çözümü

Konu: do-while, rastgele 4 basamaklı şifre, 10 tahmin hakkı

Java Kodu

import java.util.Scanner;

public class Soru1 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        int sifre = (int)(Math.random() * 9000) + 1000;

        int tahmin;
        int deneme = 0;
        boolean bulundu = false;

        do {
            System.out.print("Dört basamaklı şifre tahmininizi giriniz: ");
            tahmin = input.nextInt();

            if (tahmin < 1000 || tahmin > 9999) {
                System.out.println("Dört basamaklı bir sayı giriniz.");
                continue;
            }

            deneme++;

            if (tahmin < sifre) {
                System.out.println("Daha büyük bir şifre giriniz.");
            }
            else if (tahmin > sifre) {
                System.out.println("Daha küçük bir şifre giriniz.");
            }
            else {
                bulundu = true;
                System.out.println("Tebrikler, şifreyi " + deneme + " denemede buldunuz.");
            }

        } while (!bulundu && deneme < 10);

        if (!bulundu) {
            System.out.println("Tahmin hakkınız dolmuştur. Doğru şifre: " + sifre);
        }

        input.close();
    }
}

En Basit Mantık

Bu satır 1000 ile 9999 arasında rastgele sayı üretir:

int sifre = (int)(Math.random() * 9000) + 1000;

Çünkü Math.random() * 9000, 0 ile 8999 arasında değer verir. Sonuna +1000 eklenince aralık şu olur:

1000 – 9999

Sağlama

Diyelim ki programın tuttuğu şifre:

5462

Kullanıcı 5000 girerse, 5000 < 5462 olduğu için:

Daha büyük bir şifre giriniz.

Kullanıcı 6000 girerse, 6000 > 5462 olduğu için:

Daha küçük bir şifre giriniz.

Kullanıcı 5462 (doğru şifre) girerse:

Tebrikler, şifreyi 3 denemede buldunuz.

Kullanıcı 10 denemede bulamazsa:

Tahmin hakkınız dolmuştur. Doğru şifre: 5462

2. Soru Çözümü

Konu: Metinde belirli karakter kaç kez geçiyor?

Java Kodu

import java.util.Scanner;

public class Soru2 {

    public static int karakterSay(String metin, char arananKarakter) {
        int sayac = 0;

        for (int i = 0; i < metin.length(); i++) {
            if (metin.charAt(i) == arananKarakter) {
                sayac++;
            }
        }

        return sayac;
    }

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.print("Bir metin giriniz: ");
        String metin = input.nextLine();

        System.out.print("Aranacak karakteri giriniz: ");
        char karakter = input.nextLine().charAt(0);

        int sonuc = karakterSay(metin, karakter);

        System.out.println("'" + karakter + "' karakteri " + sonuc + " kez geçmektedir.");

        input.close();
    }
}

En Basit Mantık

karakterSay metodu iki parametre alır: metin ve aranacak karakter. Metnin bütün harflerini tek tek gezer, her karakteri kontrol eder. Eğer eşitse sayacı 1 artırır. En sonunda sonucu döndürür.

for (int i = 0; i < metin.length(); i++)
    if (metin.charAt(i) == arananKarakter)
        sayac++;

return sayac;

Sağlama 1

Girdi: "Soner ALTINTAŞ" metni, aranan karakter: n (küçük)

Metinde küçük n sadece 1 defa vardır. Çıktı:

'n' karakteri 1 kez geçmektedir.

Sağlama 2

Girdi: "Soner ALTINTAŞ" metni, aranan karakter: A (büyük)

Metinde büyük A iki kez geçer: A LTINT A. Çıktı:

'A' karakteri 2 kez geçmektedir.

Burada büyük-küçük harf duyarlılığı vardır. Yani A ile a aynı kabul edilmez.


3. Soru Çözümü

Konu: Sezar şifreleme

Java Kodu

import java.util.Scanner;

public class Soru3 {

    public static String sezarSifrele(String metin, int kaydirma) {
        String sifreliMetin = "";

        for (int i = 0; i < metin.length(); i++) {
            char karakter = metin.charAt(i);

            if (karakter >= 'A' && karakter <= 'Z') {
                karakter = (char) ('A' + (karakter - 'A' + kaydirma) % 26);
            }
            else if (karakter >= 'a' && karakter <= 'z') {
                karakter = (char) ('a' + (karakter - 'a' + kaydirma) % 26);
            }
            else if (karakter >= '0' && karakter <= '9') {
                karakter = (char) ('0' + (karakter - '0' + kaydirma) % 10);
            }

            sifreliMetin += karakter;
        }

        return sifreliMetin;
    }

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.print("Şifrelenecek metni girin: ");
        String metin = input.nextLine();

        System.out.print("Kaydırma miktarını girin: ");
        int kaydirma = input.nextInt();

        String sonuc = sezarSifrele(metin, kaydirma);

        System.out.println("Şifreli metin: " + sonuc);

        input.close();
    }
}

En Basit Mantık

Kullanıcı bir metin ve kaydırma miktarı girer. Her karakter kendi türüne göre (büyük harf / küçük harf / rakam) kaydırılır.

Örneğin "Soner345" metni ve kaydırma 4 için:

S + 4 = W
o + 4 = s
n + 4 = r
e + 4 = i
r + 4 = v
3 + 4 = 7
4 + 4 = 8
5 + 4 = 9

Sonuç: Wsriv789

Sağlama

Girdi:

Şifrelenecek metni girin: Soner345
Kaydırma miktarını girin: 4

Harfler ve rakamlar 4 karakter ileri kaydırılır. Sadece harfler (A-Z, a-z) ve rakamlar (0-9) kayar, diğer karakterler aynen kalır. Çıktı:

Şifreli metin: Wsriv789

Bu sonuç soruda verilen örnek çıktı ile birebir aynıdır.


Kısa Özet

1. soruda do-while ile kullanıcıdan en fazla 10 defa tahmin alındı, her tahminde yönlendirme yapıldı.
2. soruda metin içinde istenen karakter sayıldı, büyük-küçük harf duyarlılığı korundu.
3. soruda metindeki harfler ve rakamlar Sezar şifreleme mantığıyla kaydırıldı.

ÖZETLER

Hafta 10 – do-while Döngüsü (25 slayt)

do-while Sözdizimi

do {
    // işlemler (en az 1 kere çalışır)
} while (koşul);

Temel Kavramlar

  • Do-while döngüsünde koşul doğru olsa da olmasa da döngü gövdesi en az 1 defa çalıştırılır.
  • Önce işlemler yapılır, ardından koşul kontrol edilir. Koşul sağlandığı sürece döngü devam eder.
  • continue ifadesi döngünün başına dönmeyi sağlar.
  • Math.random() * 100 + 1 ile 1-100 arası rastgele tam sayı üretilir.
  • Random().nextInt(100) + 1 alternatif rastgele sayı yöntemidir.
  • equalsIgnoreCase() büyük/küçük harf duyarsız karşılaştırma yapar.
  • Character.toUpperCase() bir karakteri büyük harfe çevirir.
  • Bir karakterin ASCII değeri (int) harf ile alınır.

Örnek 1 – Matematiksel Karşılaştırma

x=100, y=40; x ve y'yi belirli miktarlarda azaltıp döngü kaç defa döndü?

int x=100, y=40, i=0;
do {
    i++;
    x=x-10;
    y=y-4;
} while(x>y);
System.out.println("Döngü "+i+" defa döndü.");

Örnek 2 – Not Ortalaması

0 girilene kadar not iste, çıkışta ortalamayı göster.

int toplam = 0, sayac = 0, not;
do {
    System.out.print("Notu girin (0 çıkar): ");
    not = input.nextInt();
    if (not != 0) { toplam += not; sayac++; }
} while (not != 0);

Örnek 3 – Aralıktaki Çift Sayılar

Başlangıç ve bitiş değerleri gir, bu aralıktaki çift sayıları yazdır.

if (baslangic % 2 != 0) baslangic++;
do {
    System.out.print(baslangic + " ");
    baslangic += 2;
} while (baslangic <= bitis);

Örnek 4 – Üye Kayıt ve Giriş Ekranı

Kullanıcıdan ad, soyad, doğum tarihi, doğum yeri, kullanıcı adı, şifre, e-posta alınır. Ardından do-while ile giriş denetimi yapılır; kullanıcı adı veya şifre yanlışsa tekrar istenir.

Örnek 5 – ASCII Değer Bulma

Girilen kelimenin her harfinin ASCII değerini yazdır. "exit" ile çıkış.

do {
    System.out.print("Kelime girin (exit çıkar): ");
    kelime = input.nextLine();
    if (kelime.equalsIgnoreCase("exit")) System.exit(0);
    i = 0;
    while (i < kelime.length()) {
        char harf = kelime.charAt(i);
        System.out.println(harf + " ASCII: " + (int) harf);
        i++;
    }
} while (!kelime.equals("exit"));

Örnek 6 – Büyük Harfe Dönüştürme

do {
    char harf = kelime.charAt(i);
    System.out.print(Character.toUpperCase(harf));
    i++;
} while (i < kelime.length());

Örnek 7 – Sayı Tahmin Oyunu

Bilgisayar 1-100 arası rastgele sayı üretir, kullanıcı tahmin eder. Yüksek/düşük yönlendirmesi yapılır.

int rastgeleSayi = (int)(Math.random() * 100 + 1);
do {
    // tahmin al
    if (tahmin < 1 || tahmin > 100) continue;
    if (tahmin < rastgeleSayi) System.out.println("Daha yüksek");
    else if (tahmin > rastgeleSayi) System.out.println("Daha düşük");
} while (tahmin != rastgeleSayi);

Örnek 8 – Quiz Uygulaması

İki rastgele sayı (1-100) toplatılır. Doğru +5 puan, yanlış -2 puan. "E" ile devam.

do {
    Random sayiOlustur = new Random();
    int sayi1 = sayiOlustur.nextInt(100) + 1;
    int sayi2 = sayiOlustur.nextInt(100) + 1;
    // toplamı sor, sonuca göre puan güncelle
    System.out.print("Devam? (E/H): ");
    cevap = input.next().charAt(0);
} while (cevap == 'E' || cevap == 'e');

Örnek 9 – 10 Sayı Analizi

10 sayı girilir: 100-200 arası adet, <=100 toplamı, >200 ve 4'e bölünenler listelenir.

Örnek 10-12 – Pattern Çıktıları

Do-while döngüsü ile çeşitli görsel pattern'ler oluşturulur. (Görsel slaytlara bakınız.)

Hafta 11 – Metotlar (Fonksiyonlar) (40 slayt)

Metot Tanımı

Metotlar, belli bir görevi yerine getirmek için tasarlanmış, yeniden kullanılabilir kod bloklarıdır. Her metodun bir ismi, geri dönüş tipi (veya void) ve isteğe bağlı parametreleri vardır.

Metot Sözdizimi

Erişim_Belirleyici Dönüş_Tipi Metot_Adı(parametre listesi) {
    // metot gövdesi
    return değer; // (void değilse zorunlu)
}

Erişim Belirleyiciler

  • public – Her yerden erişilebilir.
  • private – Sadece aynı sınıf içinden erişilebilir.
  • protected – Public ve Private arası.

Dönüş Tipleri

void, boolean, byte, short, int, long, float, double, char, String, Class, Array, Interface, Enum

static Anahtar Kelimesi

Normalde bir sınıfın metodunu kullanmak için nesne oluşturmak gerekir. Ancak main metodu program başlarken henüz nesne olmadığı için static olarak tanımlanır. static metotlar sınıfa aittir.

Metot Türleri

  1. Parametresiz, geri değer döndüren
  2. Parametresiz, void (geri döndürmeyen)
  3. Parametreli, geri değer döndüren
  4. Parametreli, void

Örnekler – Parametresiz, Geri Değer Döndüren

1. Toplama: a=5, b=10; return a+b;

public static int toplama() { int a=5; int b=10; return a+b; }

2. Mesaj: "Soner" + " Altıntaş" + " 1" birleştir, String döndür.

3. 1-100 Toplamı:

public static int toplam() {
    int toplamSonuc = 0;
    for (int i = 1; i <= 100; i++) toplamSonuc += i;
    return toplamSonuc;
}

4. Kare Hesaplama: (int) Math.pow(sayi, 2)

5. Karakter Sayısı: kelime.length()

6. Faktöriyel:

int faktoriyel = 1;
for (int i = 1; i <= sayi; i++) faktoriyel *= i;
return faktoriyel;

Örnekler – Parametresiz, Void

7. Üniversite: System.out.println("www.kirklareli.edu.tr");

8. Değer Kontrol: Girilen sayı 100'den büyük/küçük/eşit kontrolü.

9. Karakter Sayısı (void): Aynı işlem, sonucu içinde yazdırır.

10. Not Ortalaması: Kullanıcıdan N adet not al, ortalamayı hesapla ve yazdır.

Örnekler – Parametreli, Geri Değer Döndüren

11. Büyük Sayı:

public static int buyukSayiBul(int a, int b) {
    if (a > b) return a; else return b;
}

12. Dört İşlem: T=topla, F=fark, C=çarp, B=böl

public static double sonuc(double s1, double s2, String islem) {
    if (islem.equals("T")) return s1 + s2;
    else if (islem.equals("F")) return (s1-s2 > 0) ? s1-s2 : s2-s1;
    else if (islem.equals("C")) return s1 * s2;
    else if (islem.equals("B")) return s1 / s2;
    else return 0;
}

13. Kelimeyi Ters Çevir:

public static String kelimeyiTersCevir(String kelime) {
    String ters = "";
    for (int i = kelime.length()-1; i >= 0; i--) ters += kelime.charAt(i);
    return ters;
}

14. İsim Düzenle: substring(0,1).toUpperCase() + substring(1).toLowerCase()

public static String isimDuzenle(String isim, String soyisim) {
    return isim.substring(0,1).toUpperCase() + isim.substring(1).toLowerCase()
         + " " + soyisim.substring(0,1).toUpperCase() + soyisim.substring(1).toLowerCase();
}

15. Faktöriyel (parametreli):

public static int faktoriyelHesapla(int sayi) {
    int faktoriyel = 1;
    for (int i = 1; i <= sayi; i++) faktoriyel *= i;
    return faktoriyel;
}

Önemli Noktalar

  • Bir metot içinde başka metot oluşturulamaz.
  • Main metodu iki kez kullanılamaz.
  • Metot isimleri sayı ile başlayamaz, boşluk içeremez.
  • void metotlarda return kullanılamaz.
  • return ifadesi, dönüş tipi void değilse zorunludur.
Hafta 12 – Metot Örnekleri (15 slayt)

1. Parçalı Fonksiyonlar – f(x) ve g(x)

x>0: f(x)=1/(3x), g(x)=1/(1+1/x)  |  x≤0: f(x)=1/(1+x²), g(x)=1/(1+x+x²)

public static float fFonksiyonHesapla(float deger) {
    if (deger > 0) return 1 / (3 * deger);
    else return 1 / (1 + (float) Math.pow(deger, 2));
}
public static float gFonksiyonHesapla(float deger) {
    if (deger > 0) return 1 / (1 + 1 / deger);
    else return 1 / (1 + deger + (float) Math.pow(deger, 2));
}

2. Artık Yıl Kontrolü

Bir yılın artık yıl sayılması için: (4'e bölünür VE 100'e bölünmez) VEYA 400'e bölünür.

3. Asal Sayı Kontrolü

Sayının asal olup olmadığını parametre alan ve geri değer döndüren metot ile kontrol.

4. Sesli Harf Sayma

Girilen metindeki sesli harf (a, e, i, o, u) sayısını bulan metot.

5. Palindrom Sayı

Tersten okunuşu aynı olan sayı (121, 252, 949…).

public static String palindrom(int sayi) {
    int gecici = sayi, tersSayi = 0, kalan;
    while (gecici != 0) {
        kalan = gecici % 10;
        tersSayi = tersSayi * 10 + kalan;
        gecici /= 10;
    }
    if (sayi == tersSayi) return "Palindromdur.";
    else return "Palindrom değildir.";
}

6. Mükemmel Sayı

Kendisi hariç bölenlerinin toplamı kendisine eşit olan sayı (ör: 6 = 1+2+3).

7. Sezar Şifreleme

Her harf belirli bir kaydırma miktarı kadar ötelenir. Örn: kaydırma=2, 'E' → 'G'.

StringBuilder

String sınıfı immutable (değişmez) olduğu için her değişiklikte yeni nesne oluşur. StringBuilder mutable yapısıyla performans avantajı sağlar.

Hafta 13 – Metot - Pattern Örnekleri (4 slayt)

Bu haftada tamamı metotlardan oluşan ve belirli görsel çıktılar üreten programlar yazılması istenmektedir. Method decomposition yaklaşımı kullanılır: her pattern ayrı bir metot olarak yazılır ve main içinde çağrılır.

Sorular

  1. Metotlar kullanarak aşağıdaki görüntüleri elde edecek kodları yazınız. (Görsel: h13_s02)
  2. Pattern 1 ve 2 (Görsel: h13_s03)
  3. Metotlar kullanarak aşağıdaki görüntüleri elde edecek kodları yazınız. (Görsel: h13_s04)
Hafta 15 – Metot - Pattern Örnekleri 2 (19 slayt)

Hafta 13'ün devamı niteliğinde, daha fazla pattern sorusu. Her soruda metotlar kullanarak belirli görsel çıktılar üretilmesi istenir.

Sorular (18 adet)

  1. Metotlarla görsel çıktı (h15_s02)
  2. Pattern 1, 2 (h15_s03)
  3. Pattern 3 (h15_s04)
  4. Metotlarla görsel çıktı (h15_s05)
  5. Pattern 1, 2 (h15_s06)
  6. Metotlarla görsel çıktı (h15_s07)
  7. Pattern 1, 2 (h15_s08)
  8. Metotlarla görsel çıktı (h15_s09)
  9. Pattern 1, 2 (h15_s10)
  10. Metotlarla görsel çıktı (h15_s11)
  11. Pattern 1, 2 (h15_s12)
  12. Pattern 3 (h15_s13)
  13. Metotlarla görsel çıktı (h15_s14)
  14. Pattern 1, 2 (h15_s15)
  15. Pattern 3, 4 (h15_s16)
  16. Metotlarla görsel çıktı (h15_s17)
  17. Pattern 1, 2 (h15_s18)
  18. Pattern 3 (h15_s19)

Not: Tüm sorular görsel çıktı tabanlıdır. Detaylı görseller için EK: DERS NOTLARI bölümündeki slaytlara bakınız.

EK: DERS NOTLARI

Aşağıda ders slaytlarının metne dönüştürülmüş halleri bulunmaktadır. Her hafta kendi katlanır kutusu içindedir.

Hafta 10 – do-while Döngüsü (25 slayt)

Öğr. Gör. Soner ALTINTAŞ

T.C.

KIRKLARELİ ÜNİVERSİTESİ

LÜLEBURGAZ MESLEK YÜKSEKOKULU

NESNE TABANLI PROGRAMLAMA-I

HAFTA 10

Do-while döngüsünde koşul doğru olsa da olmasa da döngü en az 1 defa çalıştırılır.

Ardından döngüdeki koşul kontrol edilir ve koşul sağlandığı takdirde döngünün içindeki işlemler gerçekleşir.

DO-WHILE DÖNGÜSÜ

DO-WHILE DÖNGÜSÜ

Do-while döngü yapısı aşağıdaki gibidir.

do

{

//işlemler

} while (koşul);

DO-WHILE DÖNGÜSÜ

KOŞUL

iŞLEMLER

E

Devam

do

H

ÖRNEK

x=100, y=40 bilgilerini kullanarak do-while döngüsü kuralım ve çeşitli matematiksel işlemlere göre döngünün kaç defa

çalıştığını ekrana yazdıralım.


ÖRNEK

import java.util.Scanner;
public class dowhileBolumu{
           public static void main(String[] args) {
                   int x=100, y=40, i=0;
                   do {
                           i++;
                           x=x-10;
                           y=y-4;
                   } while(x>y);
                   System.out.println("Döngü "+i+" defa döndü.");
           }
}

ÖRNEK

Kullanıcı sıfır değeri girene kadar kullanıcıdan sayı isteyen ve sıfır girildiği anda girilen tüm sayıların ortalamasını ekrana

yazdıran kodları yazınız (do-while kullanarak).


ÖRNEK

import java.util.Scanner;
public class dowhileBolumu{
           public static void main(String[] args) {
                   Scanner input = new Scanner(System.in);
                   int toplam = 0, sayac = 0, not;
                   do {
                           System.out.print("Notu girin (0 programdan çıkar): ");
                           not = input.nextInt();
                           if (not != 0) 
                          {
                               toplam += not;
                               sayac++;
                          }
                    } while (not != 0);
                    if (sayac != 0) 
                   {
                            double ortalama = (double) toplam / sayac;
                            System.out.println("Girilen notların ortalaması: " + ortalama);
                   }
                   else
                            System.out.println("Hiç not girilmedi.");
           }
}

ÖRNEK

Kullanıcının başlangıç ve bitiş değerleri girmesi istenerek bu aralıktaki çift sayıları ekrana yazdıran bir program yazalım.


ÖRNEK

import java.util.Scanner;
public class dowhileBolumu{
           public static void main(String[] args) {
                   Scanner input = new Scanner(System.in);
                   System.out.print("Başlangıç değerini giriniz: ");
                   int baslangic = input.nextInt();
                   System.out.print("Bitiş değerini giriniz: ");
                   int bitis = input.nextInt();
                   if (baslangic % 2 != 0) 
                             baslangic++;
                  do {
                             System.out.print(baslangic + " ");
                             baslangic += 2;
                   } while (baslangic <= bitis);
           }
}

ÖRNEK

Do-while döngüsünü kullanarak yandaki ekran

görüntüsünü oluşturacak kodları yazınız.

Üye Girişi Ekranı'nda kullanıcı adı ve şifreden herhangi biri

yanlışsa aynı bilgiler tekrar istenecektir.


ÖRNEK

import java.util.Scanner;
public class dowhileBolumu{
           public static void main(String[] args) {
                  Scanner input = new Scanner(System.in);
                  System.out.println("Üye Olmak İçin Lütfen Enter'a Basınız...");
                  input.nextLine();
                  System.out.println("Lütfen Gerekli Bilgileri Giriniz..");
                  System.out.print("Adınız : ");
                  String ad = input.nextLine();
                  System.out.print("Soyadınız : ");
                  String soyad = input.nextLine();
                  System.out.print("Doğum Tarihiniz : ");
                  String dogumTarihi = input.nextLine();
                  System.out.print("Doğum Yeriniz : ");
                  String dogumYeri = input.nextLine();
                  System.out.print("Kullanıcı adı : ");
                  String kullaniciAdiIlk = input.nextLine();
                  System.out.print("Şifre : ");
                  String sifreIlk = input.nextLine();
                  System.out.print("E-Mail Adresiniz : ");
                  String email = input.nextLine();
                  System.out.println("Üye Girişiniz Başarıyla Tamamlanmıştır\nÜye Girişi Yapmak İçin Enter'a, Çıkış Yapmak İçin Çarpıya(X) Basınız..");
                  input.nextLine();
                  String kullaniciAdi = "";
                  String sifre = "";
                  System.out.println("Üye Girişi Ekranı\n");
                  do {
                            System.out.print("Kullanıcı Adı: ");
                            kullaniciAdi = input.nextLine();
                            System.out.print("Şifre: ");
                            sifre = input.nextLine();
                            if (kullaniciAdi.equals(kullaniciAdiIlk) && sifre.equals(sifreIlk))
                                  break;
                           System.out.println("Kullanıcı adı veya Parola yanlış, tekrar deneyiniz.");
                   } while (!(kullaniciAdi.equals(kullaniciAdiIlk) && sifre.equals(sifreIlk)))
                   System.out.println("Hoşgeldin " + ad + " Giriş Başarılı, Kişisel Bilgileriniz Aşağıda Gösterilmektedir.");
                   System.out.println("Adınız : " + ad);
                   System.out.println("Soyadınız : " + soyad);
                   System.out.println("Doğum Tarihiniz : " + dogumTarihi);
                   System.out.println("Doğum Yeriniz : " + dogumYeri);
                   System.out.println("E-Mail Adresiniz : " + email);
                   System.out.print("Çıkış Yapmak İçin Lütfen Enter'a Basınız, Görüşmek Üzere..");
                   input.nextLine();
           }
}

ÖRNEK

Kullanıcıdan bir kelime veya cümle girmesini isteyelim. Ardından, her harfin ASCII değerini ekrana yazdıran bir döngü

yazdıralım (Döngü, kullanıcının çıkış yapmasını isteyene kadar devam etmelidir).


ÖRNEK

import java.util.Scanner;
public class dowhileBolumu{
           public static void main(String[] args) {
                   Scanner input = new Scanner(System.in);
                   String kelime;
                   int i;
                   do {
                                 System.out.print("Bir harf, kelime veya cümle giriniz (Programı sonlandırmak için 'exit' yazın): ");
                                 kelime = input.nextLine();
                                 if (kelime.equalsIgnoreCase("exit")) //equalsIgnoreCase() metodu, karşılaştırılan iki stringin büyük-küçük harf farklılıklarını dikkate
almaksızın eşit olup olmadığını kontrol etmek için kullanılır. Yani, exit veya Exit gibi farklı büyük-küçük harf kombinasyonları girildiğinde, equalsIgnoreCase()
metodu her iki durumda da doğru sonucu verecektir. Bu şekilde, kullanıcının büyük veya küçük harf kullanımına bakılmaksızın doğru sonuç elde edilir.
                                {
                                        System.out.print("Program sonlandırıldı..");
                                        System.exit(0);
                                }
                                i = 0;
                               while (i < kelime.length()) 
                               {
                                        char harf = kelime.charAt(i);
                                        int ascii = (int) harf;
                                        System.out.println(harf + " karakterinin ASCII değeri: " + ascii);
                                        i++;
                               }
                   } while (!kelime.equals("exit"));
           }
}

ÖRNEK

Kullanıcıdan bir kelime girmesini isteyelim. Do-while döngüsünü kullanarak, kelimenin her harfini büyük harfe dönüştürelim

ve ekrana yazdıralım.


ÖRNEK

import java.util.Scanner;
public class dowhileBolumu{
           public static void main(String[] args) {
                   Scanner input = new Scanner(System.in);
                   String kelime;
                   int i = 0;
                   System.out.print("Bir kelime giriniz: ");
                   kelime = input.nextLine();
                   do {
                             char harf = kelime.charAt(i);
                             System.out.print(Character.toUpperCase(harf));
                             i++;
                   } while (i < kelime.length());
           }
}

ÖRNEK

Bilgisayarın 1 ile 100 arasında rastgele sayı üretmesini sağlayarak bu sayıyı tahmin etmeye çalışacağımız kodları yazalım.

Math.Random kullanarak..


ÖRNEK

import java.util.Scanner;
public class dowhileBolumu{
           public static void main(String[] args) {
                   Scanner input = new Scanner(System.in);
                   int rastgeleSayi = (int)(Math.random() * 100 + 1); //Math.random() fonksiyonunun döndürdüğü ondalık sayı 0 ile 1 arasındadır. Bu
sayı 100 ile çarpılır ve bir integer değerine dönüştürülür. Son olarak, 1 eklenir ve rastgele 1 ile 100 arasında bir sayı üretilir.
                   int tahmin, denemeSayisi = 0;
                   do {
                             System.out.print("Bir tahminde bulunun (1-100 arasında): ");
                             tahmin = input.nextInt();
                             if (tahmin < 1 || tahmin > 100) 
                            {
                                    System.out.println("Lütfen 1 ile 100 arasında bir sayı giriniz.");
                                    continue; //continue ifadesi kullanarak döngünün başına geri dönülür ve tekrar kullanıcıdan bir tahmin istenir.
                            }
                            denemeSayisi++;
                            if (tahmin < rastgeleSayi)
                                  System.out.println("Daha yüksek bir sayı tahmin edin.");
                           else if (tahmin > rastgeleSayi)
                                  System.out.println("Daha düşük bir sayi tahmin edin.");
                           else
                                  System.out.println("Tebrikler, " + denemeSayisi + " denemede bildiniz!");
                      } while (tahmin != rastgeleSayi);
           }
}

ÖRNEK

Do-While döngüsü kullanılarak yapılan bir quiz uygulaması yazınız.

Uygulama kullanıcıya rastgele iki sayı soracak ve kullanıcının bu sayıların toplamını

girmesi istenecek.

Kullanıcının verdiği cevap doğru ise toplam puanını 5 arttıracak, yanlış ise 2

azaltacaktır.

Kullanıcıya sınav devam edip etmek istemediği sorulacak. "E" veya "e" harfi girildiği

sürece sınav devam edecektir.

Kullanıcının sınav sonunda doğru ve yanlış cevap sayıları ile toplam puanı

görüntülenecektir.

Random sınıfı import edilerek..


ÖRNEK

import java.util.Scanner;
import java.util.Random;
public class dowhileBolumu{
           public static void main(String[] args) {
                   int dogrucevap = 0, yanliscevap = 0, toplampuan = 0;
                   char cevap;
                   Scanner input = new Scanner(System.in);
                   do {
                           Random sayiOlustur = new Random(); // Random sınıfı ile sayı üretmek için bir nesne oluşturuluyor
                           int sayi1 = 0, sayi2 = 0, toplam = 0;
                           sayi1 = sayiOlustur.nextInt(100) + 1;//Rastgele sayı parantez içine girilen değerin 1 eksiği kadar oluşturulur.
                           sayi2 = sayiOlustur.nextInt(100) + 1;//Rastgele sayı parantez içine girilen değerin 1 eksiği kadar oluşturulur.
                           toplam = sayi1 + sayi2;
                           System.out.println("İlk Sayı: " + sayi1);
                           System.out.println("İkinci Sayı: " + sayi2);
                           System.out.print("İki Sayının Toplamı: ");
                           int giris = input.nextInt();
                           if (giris == toplam) 
                          {
                                System.out.println("Tebrikler! Bildiniz..");
                                toplampuan += 5;
                                dogrucevap += 1;
                          } 
                          else 
                         {
                               System.out.println("Üzgünüm, bilemediniz..");
                               toplampuan -= 2;
                               yanliscevap += 1;
                         }
                         System.out.print("Devam Etmek İstiyor musunuz ? (E/H): ");
                         cevap = input.next().charAt(0);
                } while (cevap == 'E' || cevap == 'e');
                System.out.println("Doğru Cevap Sayısı: " + dogrucevap);
                System.out.println("Yanlış Cevap Sayısı: " + yanliscevap);
                System.out.println("Toplam Puanınız: " + toplampuan);
           }
}

ÖRNEK

Do-while döngüsü kullanılarak yapılan bir quiz uygulaması yazınız.

Kullanıcı 10 adet sayı girecektir.

Girilen sayılardan 100 ile 200 arasındakilerin adet miktarı ekrana yazdırılacaktır.

Girilen sayılardan 100'den küçük olanlarının toplamı ekrana yazdırılacaktır.

Girilen sayılar arasında 200'den büyük ve 4'e bölünebilenler ekrana yazdırılacaktır.


ÖRNEK

import java.util.Scanner;
public class dowhileBolumu{
           public static void main(String[] args) {
                  int i = 1, adet1=0, adet2=0, adet3=0, toplam=0, sayi;
                  String gosterici = "";
                  Scanner input = new Scanner(System.in);
                  do {
                              System.out.print(i + ". Sayıyı Giriniz : ");
                              sayi = input.nextInt();
                              if (sayi > 100 && sayi < 200)
                                      adet1++;
                              else if (sayi <= 100)
                             {
                                     adet2++;
                                     toplam += sayi;
                             }
                            else if (sayi > 200 && sayi % 4 == 0)
                            {
                                     adet3++;
                                     gosterici+=sayi+" ";
                            }
                            i++;
                   } while (i < 11);
                   System.out.println();
                   System.out.println("100-200 arasındaki sayı adedi: " + adet1);
                   System.out.println("100'den küçük "+adet2+" adet sayı bulunmuştur. Bu sayıların toplamı: " + toplam);
                   System.out.print("200'den büyük ve 4'e bölünebilen "+adet3+ " adet sayı bulunmuştur. Bu sayılar: " + gosterici);
           }
}

ÖRNEK

Do-while döngüsü kullanılarak aşağıdaki görüntüleri elde edecek kodları yazınız.


ÖRNEK

1

2


ÖRNEK

3

Hafta 11 – Metotlar (Fonksiyonlar) (40 slayt)

Öğr. Gör. Soner ALTINTAŞ

T.C.

KIRKLARELİ ÜNİVERSİTESİ

LÜLEBURGAZ MESLEK YÜKSEKOKULU

NESNE TABANLI PROGRAMLAMA-I

HAFTA 11

METOTLAR (FONKSİYONLAR)

Metotlar, Java programlama dilinde kullanılan ve belli bir görevi yerine getirmek için tasarlanmış olan kod bloklarıdır.

Java programlama dilindeki her metodun bir ismi, geri döndürülecek bir değeri veya void olarak belirtilen geri

döndürülmeyen bir değeri ve isteğe bağlı parametreleri vardır.

NEDEN METOT KULLANIRIZ?

Programlamada metot kullanmamızın sebebi, birçok yerde kullanacağımız kodu tek seferde yazıp lazım olduğunda

çağırmaktır.

Örnek vermek gerekirse, programımız içerisinde birçok yerde matematikteki "üs alma" işlemini gerçekleştirmiş olalım.

Her defasında üs alma işlemi için aynı kodları yazmak yerine bu kodları metot olarak yazıp lazım olduğunda çağırmak

işlerimizi kolaylaştıracaktır.

Ayrıca metotlar "Nesne Yönelimli Programlama'nın" yapı taşlarındandır.

METOTLARIN AVANTAJLARI

Metotlar, programlama dillerindeki fonksiyonlara benzer bir şekilde çalışırlar ve aşağıdaki avantajları sağlarlar:

Kodun tekrar kullanılabilirliğini artırır.

Programın bakımını ve yönetimini kolaylaştırır.

Kod bloklarını parçalara ayırarak, her bir parçanın farklı bir görevi yerine getirmesine olanak sağlar.

Kodun daha okunaklı hale gelmesini sağlar.

METOT OLUŞTURMA

Genel olarak bir metodun oluşturulma şekli şöyledir:

Erişim_Belirleyici Dönüş_Tipi Metod_Adı (parametre listesi)

{

//Metot Gövdesi

}

Erişim Belirleyici: Metoda nasıl erişileceğini belirtir.

Yazmak zorunlu değildir.

Dönüş Tipi: Metottan dönecek değerin tipidir. Bu, int,

String, Object gibi tipler olabilir. Metot eğer geriye bir

değer döndürmüyorsa, void olarak tanımlanmalıdır.

Eğer döndürüyor ise dönüş tipi mutlaka yazılmalıdır.

Metot Adı: Metoda verilecek olan isimdir. Metodu

programımızda kullanmak istediğimizde bu ismi

kullanarak çağıracağız.

Parametre Listesi: Bir metoda, kullanması için

göndereceğimiz değerlerdir. Bu değerlerin sırası ve

tipi önemlidir. Gönderilecek olan değerlerin tipi de

belirtilmelidir.

Metot Gövdesi: Buraya metodun yapacağı işler

yazılır.

ERİŞİM BELİRLEYİCİLER

Genel olarak bir metodun oluşturulma şekli şöyledir:

Erişim_Belirleyici Dönüş_Tipi Metod_Adı (parametre listesi)

{

//Metod Gövdesi

}

public: Public seviyesinde olan bir metoda, aynı sınıf

içerisinden veya dışarıdan erişimde bulunmak

mümkündür. Bu erişimden kastedilen ise örneğin

oluşturulan

bir

sınıf

içerisindeki

herhangi

bir

değişkene farklı bir sınıf üzerinden farklı bir değer

yüklenebilir veya var olan değer alınabilir.

private:

Private

seviyesinde

olan

bir

metot

içerisindeki herhangi bir öğeye dışarıdan erişimde

bulunulamaz. Örneğin private olarak belirlenen pi

değeri, o sınıf dışındaki herhangi bir başka yerde

değiştirilemez.

protected: Public ve Private erişim seviyelerinin

ortasında bir erişim seviyesine sahiptir.

DÖNÜŞ TİPLERİ

Genel olarak bir metodun oluşturulma şekli şöyledir:

Erişim_Belirleyici Dönüş_Tipi Metod_Adı (parametre listesi)

{

//Metod Gövdesi

}

void

boolean

byte

short

int

long

float

double

char

String

Class

Array

Interface

Enum

Metot isimleri herhangi bir sayı ile başlayamaz.

Metot isimleri büyük/küçük harf duyarlılığına sahiptir.

Metot isimlerinde boşluk veya bazı karakterler kullanılamaz.

Main metodu iki kez kullanılamaz.

Bir metot içerisinde başka bir metot oluşturulamaz.

METOT OLUŞTURMA KURALLARI

NOT

Bir sınıf içerisinde sınırsız sayıda metot oluşturulabilir fakat bir metot içerisinde farklı bir metot oluşturulamaz!

merttopuz.com


METOTLAR (FONKSİYONLAR)

METOT TÜRLERİ

Parametreye Sahip Olmayan Metotlar

Parametreye Sahip Metotlar

Geriye Değer

Döndüren Metotlar

Geriye Değer

Döndürmeyen

Metotlar

Geriye Değer

Döndüren ve

Parametre Alan

Metotlar

Geriye Değer

Döndürmeyen ve

Parametre Alan

Metotlar

PARAMETREYE SAHİP OLMAYAN METOTLAR

GERİYE DEĞER DÖNDÜREN METOTLAR

Bu tür metotlar, belirli bir işlemi gerçekleştirir ve bu işlem sonucunu geri döndürür.

Bu tür metotların yapısı aşağıdaki gibidir.

[erişim_belirleyici] [static] [geri_dönüş_tipi] [metot_adı]() {

// metodun içinde yapılacak işlemler

return [değer];

}

erişim_belirleyici: Metodun hangi sınıflardan erişilebileceğini belirler. Örneğin, public, private veya protected olabilir.

static: Java’da normalde bir sınıfın metodunu kullanmak için o sınıftan bir nesne (object) oluşturmak gerekir. Ancak

programın başlangıç noktası olan main metodunda bu mantık işlemez. Çünkü program başlarken ortada henüz hiçbir

nesne yoktur. Bu yüzden main metodunun sınıfa ait bir metot olması gerekir. İşte static bunu sağlar.

geri_dönüş_tipi: Metodun geri döndürdüğü değerin türüdür. Geri dönüş tipi olmayan metotların türü void olarak

belirtilir.

metot_adı: Metodun ismidir.

() : Parametre yoksa, parantezler boş bırakılır.

return: Metodun sonucu geri döndürmesi gerektiğinde kullanılır.

PARAMETREYE SAHİP OLMAYAN METOTLAR

GERİYE DEĞER DÖNDÜREN METOTLAR
public class Metotlar {
 public static void main(String[] args) {
      System.out.println("Toplam: "+toplama());
 }
 public static int toplama() {
      int a = 5;
      int b = 10;
      return a+b;
 }
}
ÖRNEK

PARAMETREYE SAHİP OLMAYAN METOTLAR

GERİYE DEĞER DÖNDÜREN METOTLAR
public class Main {
    public static void main(String[] args) {
        System.out.println(mesajVer());
    }
    public static String mesajVer() {
             String a = "Soner";
             String b = " Altıntaş";
             String c=" 1";
             return a+b+c;
    }
}
ÖRNEK

ÖRNEK

Parametre almayan bir metot oluşturup 1 ile 100 arasındaki sayıların toplamını hesaplayan, sonucu geri döndüren ve

ekrana yazdıran kodları yazalım.


public class Main {
    public static int toplam() {
        int toplamSonuc = 0;
        for (int i = 1; i <= 100; i++) {
            toplamSonuc += i;
        }
        return toplamSonuc;
    }
    public static void main(String[] args) {
        System.out.println("1 ile 100 arasındaki sayıların toplamı: " + toplam());
    }
}
ÖRNEK

ÖRNEK

Parametre almayan bir metot oluşturup girilen sayının karesini hesaplayan, sonucu geri döndüren ve ekrana yazdıran

kodları yazalım.


import java.util.Scanner;
public class Main {
    public static int kareHesapla() {
             Scanner scanner = new Scanner(System.in);
             System.out.print("Bir tam sayı girin: ");
             int sayi=scanner.nextInt();
             return (int) Math.pow(sayi,2);
    }
    public static void main(String[] args) {
             System.out.println("Girdiğiniz sayısının karesi: " + kareHesapla());
    }
}
ÖRNEK

ÖRNEK

Parametre almayan bir metot oluşturup girilen metindeki karakter sayısını hesaplayan, sonucu geri döndüren ve ekrana

yazdıran kodları yazalım.


import java.util.Scanner;
public class Main {
    public static int karakterSay() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Bir kelime girin: ");
        String kelime = scanner.nextLine();
        int karakterSayisi = kelime.length();
        return karakterSayisi;
    }
    public static void main(String[] args) {
        System.out.println("Girdiğiniz kelimedeki karakter sayısı: " + karakterSay());
    }
}
ÖRNEK

ÖRNEK

Parametre almayan bir metot oluşturup girilen değerin faktöriyelini hesaplayan, sonucu geri döndüren ve ekrana

yazdıran kodları yazalım.


import java.util.Scanner;
public class Main {
    public static int faktoriyelHesapla() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Bir sayı girin: ");
        int sayi = scanner.nextInt();
        int faktoriyel=1;
        for (int i=1; i<=sayi; i++)
            faktoriyel*=i;
        return faktoriyel;
    }
    public static void main(String[] args) {
        System.out.println("Girdiğiniz sayının faktöriyeli: " + faktoriyelHesapla());
    }
}
ÖRNEK

PARAMETREYE SAHİP OLMAYAN METOTLAR

GERİYE DEĞER DÖNDÜRMEYEN METOTLAR

Bu tip metotlarda yalnızca iş yaptırılır, void metotlar olarak da bilinirler.

Bu tür metotlar genellikle, programın farklı yerlerinde birden fazla kez kullanılan veya tekrar tekrar yazılması gereken

kodları gruplandırmak için kullanılır.

void tanımlı olan metotlar içerisinde return komutu kullanılamaz.

PARAMETREYE SAHİP OLMAYAN METOTLAR

GERİYE DEĞER DÖNDÜRMEYEN METOTLAR
ÖRNEK
public class Metotlar {
 public static void main(String[] args) {
         universite();
 }
 public static void universite() {
        System.out.println("www.kirklareli.edu.tr");
 }
}

ÖRNEK

Parametre almayan bir metot oluşturup girilen değerin 100'den küçük olma durumunu kontrol eden, sonucu geri

döndürmeyen ve ekrana yazdıran kodları yazalım.


import java.util.Scanner;
public class Main {
    public static void degerKontrol()
    {
        Scanner input=new Scanner(System.in);
        System.out.print("Sayı giriniz:");
        int deger=input.nextInt();
        if (deger>100)
            System.out.print("Sayı 100'den büyük.");
        else if(deger==100)
            System.out.print("Sayı 100'e eşit");
        else
            System.out.print("Sayı 100'den küçük");
    }
    public static void main(String[] args) {
        degerKontrol();
    }
}
ÖRNEK

ÖRNEK

Parametre almayan bir metot oluşturup girilen metindeki karakter sayısını hesaplayan, sonucu geri döndürmeyen ve

ekrana yazdıran kodları yazalım.


import java.util.Scanner;
public class Main {
    public static void karakterSay() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Bir kelime girin: ");
        String kelime = scanner.nextLine();
        int karakterSayisi = kelime.length();
        System.out.println("Girdiğiniz kelimedeki karakter sayısı: " + karakterSayisi);
    }
    public static void main(String[] args) {
        karakterSay();
    }
}
ÖRNEK

ÖRNEK

Parametre almayan bir metot oluşturup girilen notların ortalamasını hesaplayan, sonucu geri döndürmeyen ve ekrana

yazdıran kodları yazalım.


import java.util.Scanner;
public class Main {
    public static void notOrtalama()
    {
        Scanner input = new Scanner(System.in);
        System.out.print("Kaç adet not gireceksiniz?: ");
        int adet = input.nextInt();
        int toplam = 0;
        for (int i = 1; i <= adet; i++) {
            System.out.print(i + ". notu giriniz: ");
            int not = input.nextInt();
            toplam += not;
        }
        double ortalama = (double) toplam / adet;
        System.out.println("Notların ortalaması: " + ortalama);
    }
    public static void main(String[] args) {
        notOrtalama();
    }
}
ÖRNEK

PARAMETREYE SAHİP METOTLAR

GERİYE DEĞER DÖNDÜREN VE PARAMETRE ALAN METOTLAR

Geriye değer döndüren ve parametre alan metotların yapısı aşağıdaki gibidir.

erişim_belirleyici dönüş_tipi metot_adi(parametre_tipi parametre_adi) {

// metot gövdesi

return deger; // dönüş tipi belirtilen bir değer döndürür

}

Klavyeden girilen iki sayıdan büyük olanı bulmayı sağlayacak geri değer döndüren ve parametre alan metodu yazınız.

ÖRNEK


import java.util.Scanner;
public class Main {
    public static int buyukSayiBul(int a, int b) {
        if(a>b)
            return a;
        else
            return b;
    }
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Sayı 1: ");
        int sayi1 = input.nextInt();
        System.out.print("Sayı 2: ");
        int sayi2 = input.nextInt();
        System.out.println(sayi1+" ve "+sayi2+" içerisinden büyük olan sayı: "+buyukSayiBul(sayi1, sayi2));
    }
}
ÖRNEK

Klavyeden girilen iki sayının seçilen işlem sonucunu bulmayı sağlayacak geri değer döndüren ve parametre alan metodu

yazınız.

ÖRNEK


import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner girdi = new Scanner(System.in);
        System.out.println("İki Sayı ile Dört İşlem");
        System.out.print("Sayı 1: ");
        double sayi1 = girdi.nextInt();
        System.out.print("Sayı 2: ");
        double sayi2 = girdi.nextInt();
        System.out.print("Yapılacak işlemi giriniz: (T (toplam) - F (fark) - C (çarpma) - B (bölme)): ");
        String islemTuru = girdi.next();
        System.out.println("Sonuç: "+ sonuc(sayi1, sayi2, islemTuru));
    }
    public static double sonuc(double sayi1, double sayi2, String islemTuru) {
        if(islemTuru.equals("T") || islemTuru.equals(("t")))
            return sayi1+sayi2;
        else if(islemTuru.equals("F") || islemTuru.equals(("f"))) {
            if(sayi1-sayi2 > 0)
                return sayi1-sayi2;
            else
                return sayi2-sayi1;
        }
        else if(islemTuru.equals("C") || islemTuru.equals("c"))
            return sayi1*sayi2;
        else if(islemTuru.equals("B") || islemTuru.equals("b"))
            return sayi1/sayi2;
        else
            return 0;
    }
}
ÖRNEK

Verilen bir kelimeyi ters çeviren bir metot yazalım. Kelimeyi parametre olarak alalım ve tersine çevrilmiş halini geri

döndürelim.

ÖRNEK

public class Main {
    public static String kelimeyiTersCevir(String kelime) {
        String tersKelime = "";
        for (int i = kelime.length() - 1; i >= 0; i--) {
            tersKelime += kelime.charAt(i);
        }
        return tersKelime;
    }
    public static void main(String[] args) {
        System.out.print(kelimeyiTersCevir("Soner"));
    }
}
ÖRNEK

Klavyeden girilen isim ve soyisim bilgisini cümle kuralına uygun bir hale getiren metodu yazalım.

ÖRNEK


import java.util.Scanner;
public class Main {
    public static String isimDuzenle(String isim, String soyisim){
        String isimDuzenlenmis=isim.substring(0,1).toUpperCase()+isim.substring(1).toLowerCase();
        String soyisimDuzenlenmis=soyisim.substring(0,1).toUpperCase()+soyisim.substring(1).toLowerCase();
        return isimDuzenlenmis+" "+soyisimDuzenlenmis;
        /*
        substring() metodu, bir string'in belli bir bölümünü almak için kullanılır.
        İlk parametre alınacak bölümün başlangıç indeksini, ikinci parametre ise son indeksini belirtir.
        Bu örnekte, isim.substring(0,1) ifadesi isim string'inin ilk harfini (0. indeks) alır ve 1. indekse kadar (yani 2. indeks hariç) bir bölüm oluşturur.
        Bu kodda, substring(0,1) ile isim ve soyisim string'lerinin sadece ilk harfleri alınır, toUpperCase() metodu ile bu harfler büyük harfe dönüştürülür.
        Sonra, substring(1) ile ilk harf haricindeki geri kalan kısmı alıp, toLowerCase() metodu ile küçük harfe dönüştürülür.
        Son olarak, iki string birleştirilir ve düzenlenmiş tam ad string'i elde edilir.
         */
    }
    public static void main(String[] args) {
        Scanner girisYap=new Scanner(System.in);
        System.out.print("İsminizi giriniz: ");
        String metin1=girisYap.nextLine();
        System.out.print("Soyisminizi giriniz: ");
        String metin2=girisYap.nextLine();
        System.out.println("İlk girilen:" + metin1 + " " + metin2);
        System.out.println("Değiştirilmiş hali: "+isimDuzenle(metin1,metin2));
    }
}
ÖRNEK

Girilen bir sayının faktöriyelini hesaplayan bir metot yazalım. Sayıyı parametre olarak alalım ve faktöriyelini geri

döndürelim.

ÖRNEK


import java.util.Scanner;
public class Main {
    public static int faktoriyelHesapla(int sayi) {
        int faktoriyel = 1;
        for (int i = 1; i <= sayi; i++) {
            faktoriyel *= i;
        }
        return faktoriyel;
    }
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.print("Kaç adet sayının faktöriyelini hesaplayacağınızı bildiriniz: ");
        int bildirim= input.nextInt();
        for(int i=1; i<=bildirim;i++)
        {
            System.out.print(i+". sayıyı giriniz: ");
            int giris=input.nextInt();
            System.out.println(giris+" sayısının faktöriyeli: "+faktoriyelHesapla(giris));
        }
    }
}
ÖRNEK
Hafta 12 – Metot Örnekleri (15 slayt)

Öğr. Gör. Soner ALTINTAŞ

T.C.

KIRKLARELİ ÜNİVERSİTESİ

LÜLEBURGAZ MESLEK YÜKSEKOKULU

NESNE TABANLI PROGRAMLAMA-I

HAFTA 12

ÖRNEK

f(x) ve g(x) fonksiyonları;

x>0 ise

f(x)=1/(3*x)

g(x)=1/(1+1/x)

x≤0 ise

f(x)=1/(1+x²)

g(x)=1/(1+x+x²)

şeklinde tanımlanmıştır. Bu bilgilere göre metotları oluşturup sonuçları geri döndüren ve ekrana yazdıran kodları yazalım.

import java.util.Scanner;
public class Main {
    public static float fFonksiyonHesapla(float deger){
        float sonucf;
        if (deger > 0)
            sonucf = 1 / (3 * deger);
        else
            sonucf = 1 / (1 + (float) Math.pow(deger,2));
        return sonucf;
    }
    public static float gFonksiyonHesapla(float deger){
        float sonucg;
        if (deger > 0)
            sonucg = 1 / (1 + 1 / deger);
        else
            sonucg = 1 / (1 + deger +  (float) Math.pow(deger,2));
        return sonucg;
    }
    public static void main(String[] args) {
        Scanner degerAl=new Scanner(System.in);
        System.out.println("x değerini giriniz: ");
        float x=degerAl.nextFloat();
        System.out.println("f(x) fonksiyonunun sonucu: "+fFonksiyonHesapla(x));
        System.out.println("g(x) fonksiyonunun sonucu: "+gFonksiyonHesapla(x));
    }
}
ÖRNEK

ÖRNEK

Kullanıcının girdiği yılın artık yıl olup olmadığını kontrol eden, parametre alan ve geri değer döndüren metot yazalım.

Bir yılın artık yıl sayılabilmesi için iki koşul vardır. Bu iki koşuldan birinin gerçekleşmesi yeterlidir. İlk koşul, yılın 4'e tam

bölünmesi fakat 4'e tam bölünürken 100'e tam bölünmemesidir. Bu durumdaki yıllar, artık yıl olarak kabul edilir.

İkinci koşul, yılın 400'e tam bölünüp bölünmemesiyle ilgilidir. Eğer yıl, 400'e tam bölünebiliyorsa o yıl artık yıl olarak kabul

edilir.


ÖRNEK


ÖRNEK

Kullanıcının girdiği sayıların asal olma durumunu parametre alan ve geri değer döndüren metot yardımıyla çözen kodları

yazalım.


ÖRNEK

Metot

Main


ÖRNEK

Kullanıcının girdiği metnin içindeki sesli harf sayısını veren, parametre alan ve geri değer döndüren metot yazalım.


ÖRNEK


ÖRNEK

Tersten okunuşu da aynı olan sayılara palindrom sayılar denir.

Örneğin; "121", "252", "949" gibi sayılar palindromdur.

Java'da kullanıcının girdiği sayının palindrom olup olmadığını kontrol eden metotları oluşturup sonuçları geri döndüren ve

ekrana yazdıran kodları yazalım.


import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sayiAl=new Scanner(System.in);
        System.out.print("Sayıyı giriniz: ");
        int girilenSayi=sayiAl.nextInt();
        System.out.print(palindrom(girilenSayi));
    }
    public static String palindrom(int sayi) {
        int gecici,tersSayi=0,kalan;
        gecici=sayi;
        while(gecici!=0)
        {
            kalan=gecici%10;
            tersSayi=tersSayi*10+kalan;
            gecici/=10;
        }
        if(sayi==tersSayi)
            return "Girilen sayı: "+sayi+" \nBu sayı palindromdur.";
        else
            return "Girilen sayı: "+sayi+" \nBu sayı palindrom değildir.";
    }
}
ÖRNEK

ÖRNEK

Bir sayının kendisi hariç diğer bölenlerinin toplamı, o sayıya eşit oluyorsa, o sayı mükemmel sayı kabul edilir.

Örneğin; 6 mükemmel sayıdır. Çünkü 6'yı tam bölen sayılar: 1, 2 ve 3'tür. 1+2+3=6'dır.

Kullanıcının girdiği sayının mükemmel sayı olup olmadığını ekrana parametre alan ve geri değer döndüren metot

yardımıyla yazan kodları yazalım.


ÖRNEK


ÖRNEK

Sezar şifreleme, her harfin belirli bir sayıda kaydırılarak şifrelenmesini sağlayan bir tekniktir.

Örneğin, kaydırma miktarı 2 ise, 'E' harfi 'G' ye, 'J' harfi 'L'ye dönüşür.

Kullanıcının gireceği metnin yine kullanıcının gireceği kaydırma miktarı kadar kaydırılıp metnin şifreli halini parametre alan

ve geri değer döndüren metot yardımıyla ekrana yazdıran kodları yazalım.


ÖRNEK

Metot

Main

StringBuilder, Java'da metinleri değiştirmek veya birleştirmek için kullanılan bir sınıftır. String sınıfı, değiştirilemez (immutable) bir yapıya sahip olduğu için her

değişiklikte yeni bir nesne oluşturmakta, bu da bellek ve performans açısından verimsizlik yaratmaktadır. Oysa StringBuilder, metin üzerinde yapılacak

değişiklikleri daha verimli bir şekilde gerçekleştirmek için tasarlanmıştır.

Hafta 13 – Metot - Pattern Örnekleri (4 slayt)

Öğr. Gör. Soner ALTINTAŞ

T.C.

KIRKLARELİ ÜNİVERSİTESİ

LÜLEBURGAZ MESLEK YÜKSEKOKULU

NESNE TABANLI PROGRAMLAMA-I

HAFTA 13

ÖRNEK

Tamamı metotlardan oluşan ve aşağıdaki görüntüleri elde ettirecek kodları yazınız.


ÖRNEK

1

2


ÖRNEK

Tamamı metotlardan oluşan ve aşağıdaki görüntüleri elde ettirecek kodları yazınız.

Hafta 15 – Metot - Pattern Örnekleri 2 (19 slayt)

Öğr. Gör. Soner ALTINTAŞ

T.C.

KIRKLARELİ ÜNİVERSİTESİ

LÜLEBURGAZ MESLEK YÜKSEKOKULU

NESNE TABANLI PROGRAMLAMA-I

HAFTA 15

ÖRNEK

Tamamı metotlardan oluşan ve aşağıdaki görüntüleri elde ettirecek kodları yazınız.


ÖRNEK

1

2


ÖRNEK

3


ÖRNEK

Tamamı metotlardan oluşan ve aşağıdaki görüntüleri elde ettirecek kodları yazınız.


ÖRNEK

1

2


ÖRNEK

Tamamı metotlardan oluşan ve aşağıdaki görüntüleri elde ettirecek kodları yazınız.


ÖRNEK

1

2


ÖRNEK

Tamamı metotlardan oluşan ve aşağıdaki görüntüleri elde ettirecek kodları yazınız.


ÖRNEK

1

2


ÖRNEK

Tamamı metotlardan oluşan ve aşağıdaki görüntüleri elde ettirecek kodları yazınız.


ÖRNEK

1

2


ÖRNEK

3


ÖRNEK

Tamamı metotlardan oluşan ve aşağıdaki görüntüleri elde ettirecek kodları yazınız.


ÖRNEK

1

2


ÖRNEK

3

4


ÖRNEK

Tamamı metotlardan oluşan ve aşağıdaki görüntüleri elde ettirecek kodları yazınız.


ÖRNEK

1

2


ÖRNEK

3

BÜTÜNLEME SINAVI HAZIRLIK

Sınav Bilgisi

Soru Dağılımı:

  • 1 adet döngü sorusu (do-while)
  • 2 adet metot sorusu (parametre alan + geri değer döndüren)

Kapsanan Konular: Artık yıl, Asal sayı, Sesli harf sayısı, Palindrom sayı, Mükemmel sayı

Sezar şifreleme bu sınavda yok.

İpucu: Tüm metotlar public static olarak yazılacak. Metotlar int veya boolean döndürecek. Döngü sorusunda mutlaka do-while kullanın.

1. Artık Yıl Kontrolü

Kural

Bir yılın artık yıl sayılması için iki koşuldan biri yeterlidir:

  • 4'e tam bölünür VE 100'e tam bölünmez
  • VEYA 400'e tam bölünür
public static boolean artikYilMi(int yil) {
    return (yil % 4 == 0 && yil % 100 != 0) || (yil % 400 == 0);
}

Kullanım

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("Yıl girin: ");
    int yil = input.nextInt();
    if (artikYilMi(yil))
        System.out.println(yil + " artık yıldır.");
    else
        System.out.println(yil + " artık yıl değildir.");
}
2. Asal Sayı Kontrolü

Kural

Asal sayı, 1 ve kendisinden başka pozitif böleni olmayan sayıdır. 1 asal değildir.

public static boolean asalMi(int sayi) {
    if (sayi < 2) return false;
    if (sayi == 2) return true;
    if (sayi % 2 == 0) return false;
    for (int i = 3; i <= Math.sqrt(sayi); i += 2) {
        if (sayi % i == 0) return false;
    }
    return true;
}

Kullanım

public static void main(String[] args) {
    for (int i = 1; i <= 100; i++) {
        if (asalMi(i)) System.out.print(i + " ");
    }
}
3. Sesli Harf Sayısı Bulma

Kural

Türkçe sesli harfler: a, e, ı, i, o, ö, u, ü (büyük/küçük fark etmez)

public static int sesliHarfSayisi(String metin) {
    String sesli = "aeıioöuüAEIİOÖUÜ";
    int sayac = 0;
    for (int i = 0; i < metin.length(); i++) {
        if (sesli.indexOf(metin.charAt(i)) != -1) sayac++;
    }
    return sayac;
}

Her Sesli Harfin Sayısını Bulma

public static void sesliHarfRaporu(String metin) {
    String sesli = "aeıioöuü";
    int[] sayac = new int[sesli.length()];
    for (int i = 0; i < metin.length(); i++) {
        char c = Character.toLowerCase(metin.charAt(i));
        int idx = sesli.indexOf(c);
        if (idx != -1) sayac[idx]++;
    }
    System.out.println("Sesli harf raporu:");
    for (int i = 0; i < sesli.length(); i++) {
        System.out.println(sesli.charAt(i) + ": " + sayac[i]);
    }
}
4. Palindrom Sayı (veya Metin)

Kural

Palindrom sayı: tersten okunuşu kendisine eşit olan sayı (121, 252, 949, 1221...)

Sayısal Çözüm (Basamak Çözümleme)

public static boolean palindromMu(int sayi) {
    int gecici = sayi, ters = 0;
    while (gecici > 0) {
        ters = ters * 10 + gecici % 10;
        gecici /= 10;
    }
    return sayi == ters;
}

Alternatif String Çözümü

public static boolean palindromMu(String metin) {
    String ters = new StringBuilder(metin).reverse().toString();
    return metin.equals(ters);
}

İki Sayı Arasındaki Palindromları Bulma

public static void araliktakiPalindromlar(int bas, int son) {
    for (int i = bas; i <= son; i++) {
        if (palindromMu(i)) System.out.print(i + " ");
    }
}
5. Mükemmel Sayı

Kural

Kendisi hariç pozitif bölenlerinin toplamı kendisine eşit olan sayıdır. Örn: 6 (1+2+3=6), 28 (1+2+4+7+14=28)

public static boolean mukemmelMi(int sayi) {
    int toplam = 0;
    for (int i = 1; i <= sayi / 2; i++) {
        if (sayi % i == 0) toplam += i;
    }
    return toplam == sayi;
}

1-N Arası Mükemmel Sayıları Bulma

public static void mukemmelSayilariBul(int n) {
    for (int i = 1; i <= n; i++) {
        if (mukemmelMi(i)) System.out.println(i + " mükemmel sayıdır.");
    }
}
do-while Döngü Şablonları

Temel Şablon

do {
    // işlemler (en az 1 kere çalışır)
} while (koşul);

Şablon 1 – Sayı Oku, Koşullu Çıkış

int sayi;
do {
    System.out.print("Sayı girin (0 çıkış): ");
    sayi = input.nextInt();
    if (sayi != 0) {
        // sayi ile işlem yap
    }
} while (sayi != 0);

Şablon 2 – Sayaç Kontrollü

int i = 1, n = 10;
do {
    // işlem
    i++;
} while (i <= n);

Şablon 3 – Menü / Evet-Hayır Kontrollü

char cevap;
do {
    // işlemler
    System.out.print("Devam etmek istiyor musunuz? (E/H): ");
    cevap = input.next().charAt(0);
} while (cevap == 'E' || cevap == 'e');

Şablon 4 – Geçerli Giriş Kontrolü

int yas;
do {
    System.out.print("Yaşınızı girin (0-150): ");
    yas = input.nextInt();
} while (yas < 0 || yas > 150);
Örnek Sınav Soruları (Tam Çözümlü)

Soru 1 (do-while + metotlar) – Çoklu Kontrol

Kullanıcı 0 girene kadar sayı okumaya devam eden bir program yazınız. Her sayı için:

  • Sayı asal mı?
  • Sayı mükemmel mi?
  • Sayı palindrom mu?

bilgilerini ekrana yazdırınız. (Asal, mükemmel ve palindrom kontrolleri ayrı metotlarda yapılacaktır.)

import java.util.Scanner;
public class ButOrnek1 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int sayi;
        do {
            System.out.print("Sayı girin (0 çıkış): ");
            sayi = input.nextInt();
            if (sayi == 0) break;
            System.out.print(sayi + " → ");
            if (asalMi(sayi)) System.out.print("ASAL ");
            if (mukemmelMi(sayi)) System.out.print("MÜKEMMEL ");
            if (palindromMu(sayi)) System.out.print("PALİNDROM");
            System.out.println();
        } while (true);
    }
    public static boolean asalMi(int s) {
        if (s < 2) return false;
        for (int i = 2; i <= Math.sqrt(s); i++)
            if (s % i == 0) return false;
        return true;
    }
    public static boolean mukemmelMi(int s) {
        int t = 0;
        for (int i = 1; i <= s / 2; i++)
            if (s % i == 0) t += i;
        return t == s;
    }
    public static boolean palindromMu(int s) {
        int g = s, t = 0;
        while (g > 0) { t = t * 10 + g % 10; g /= 10; }
        return s == t;
    }
}

Soru 2 (metot) – Aralıktaki Palindromlar

Kullanıcıdan başlangıç ve bitiş değerleri alan, bu aralıktaki tüm palindrom sayıları ekrana yazdıran bir program yazınız. Palindrom kontrolü ayrı bir metotta yapılacaktır.

import java.util.Scanner;
public class ButOrnek2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Başlangıç: ");
        int bas = input.nextInt();
        System.out.print("Bitiş: ");
        int son = input.nextInt();
        System.out.println("Palindrom sayılar:");
        for (int i = bas; i <= son; i++) {
            if (palindromMu(i)) System.out.print(i + " ");
        }
    }
    public static boolean palindromMu(int s) {
        int g = s, t = 0;
        while (g > 0) { t = t * 10 + g % 10; g /= 10; }
        return s == t;
    }
}

Soru 3 (metot) – Sesli Harf Raporu

Kullanıcıdan bir metin alan, metindeki toplam sesli harf sayısını ve her bir sesli harfin kaç defa geçtiğini döndüren metotları yazınız. Sesli harfler: a, e, ı, i, o, ö, u, ü (büyük-küçük fark etmez).

import java.util.Scanner;
public class ButOrnek3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Metin girin: ");
        String metin = input.nextLine();
        System.out.println("Toplam sesli harf: " + sesliHarfSayisi(metin));
        sesliHarfRaporu(metin);
    }
    public static int sesliHarfSayisi(String m) {
        String sesli = "aeıioöuüAEIİOÖUÜ";
        int s = 0;
        for (int i = 0; i < m.length(); i++)
            if (sesli.indexOf(m.charAt(i)) != -1) s++;
        return s;
    }
    public static void sesliHarfRaporu(String m) {
        String sesli = "aeıioöuü";
        int[] sayac = new int[sesli.length()];
        for (int i = 0; i < m.length(); i++) {
            char c = Character.toLowerCase(m.charAt(i));
            int idx = sesli.indexOf(c);
            if (idx != -1) sayac[idx]++;
        }
        for (int i = 0; i < sesli.length(); i++)
            if (sayac[i] > 0)
                System.out.println("'" + sesli.charAt(i) + "' → " + sayac[i]);
    }
}
Hızlı Bakış – Tüm Şablonlar
// === ARTIK YIL ===
public static boolean artikYilMi(int yil) {
    return (yil % 4 == 0 && yil % 100 != 0) || (yil % 400 == 0);
}

// === ASAL SAYI ===
public static boolean asalMi(int sayi) {
    if (sayi < 2) return false;
    for (int i = 2; i <= Math.sqrt(sayi); i++)
        if (sayi % i == 0) return false;
    return true;
}

// === SESLİ HARF SAYISI ===
public static int sesliHarfSayisi(String metin) {
    String sesli = "aeıioöuüAEIİOÖUÜ";
    int s = 0;
    for (int i = 0; i < metin.length(); i++)
        if (sesli.indexOf(metin.charAt(i)) != -1) s++;
    return s;
}

// === PALİNDROM ===
public static boolean palindromMu(int sayi) {
    int gecici = sayi, ters = 0;
    while (gecici > 0) {
        ters = ters * 10 + gecici % 10;
        gecici /= 10;
    }
    return sayi == ters;
}

// === MÜKEMMEL SAYI ===
public static boolean mukemmelMi(int sayi) {
    int toplam = 0;
    for (int i = 1; i <= sayi / 2; i++)
        if (sayi % i == 0) toplam += i;
    return toplam == sayi;
}

// === do-while ŞABLONU ===
do {
    // işlemler
} while (koşul);