Bu proje, temel algoritma ve veri yapısı kavramlarını pekiştirmek amacıyla Java dilinde yazılmış uygulamaları içerir. Genel olarak Fatih Özkaynak hocamın kaynaklar kısmındaki oynatma listelerinden ilerledim. Buna ek olarak, merak ettiğim algoritmaları Clean Code prensiplerine sadık kalarak, modüler ve okunabilir şekilde uygulamaya çalıştım.
| # | Proje Adı | Ana Dosya | Temel Kavramlar |
|---|---|---|---|
| 1 | Dinamik Dizi (Binary) | KutuphaneKullanmadanDinamikDizi.java |
Array Resizing, Binary Conversion |
| 2 | Matris Oluşturucu | Matris.java |
2D Arrays, Pattern Generation |
| 3 | Taban Dönüştürücü | OnlukTabanDonusturme.java |
Base Conversion (Octal/Binary) |
| 4 | Sayı Çözümleyici (V1) | SayiCozumleyici1.java |
Array Return Type |
| 5 | Sayı Çözümleyici (V2) | SayiCozumleyici2.java |
Class Structures, DRY Principle |
| 6 | Ortalama Hesaplayıcı | GirdiyeGoreOrtalama.java |
Modular Methods, Math Logic |
| 7 | Üçgen Çizme | UcgenCizme.java |
Nested Loops, Pattern Printing |
| 8 | Dörtgen Çizme | DortgenCizme.java |
Nested Loops, Grid Generation |
| 9 | Havalı İsim Yazdırıcı | HavaliIsim.java |
String Manipulation, Creative Output |
| 10 | Harf Analizi | HarfSay.java |
Frequency Counting, Bubble Sort, Helper Classes |
| 11 | Navigasyon | Navigasyon.java |
2D Arrays, Path Finding |
| 12 | Mayın Tarlası | MayinTarlasi.java |
2D Arrays, Game Logic, Random Generation |
| 13 | Sayıyı Yazıya Çeviri | SayiCevirici.java |
String Arrays, Helper Class |
| 14 | Vücut Kitle İndeksi | VucutKutleIndeksi.java |
OOP, Mathematical Logic |
📌 Dosya: src/KutuphaneKullanmadanDinamikDizi.java
- Amaç: Girilen onluk (decimal) sayıyı ikilik (binary) tabana çevirmek.
- Teknik Detay: Java'nın hazır
ArrayListsınıfını kullanmak yerine, dizi dolduğunda boyutunu manuel olarak artıran (dinamikDizi) özel bir algoritma yazılmıştır. Bu sayedeArrayList'in arka planda nasıl çalıştığı simüle edilmiştir.
📌 Dosya: src/Matris.java
- Amaç: Kullanıcıdan alınan satır sayısına (4-8 arası) göre özel bir sayısal örüntüye sahip 4 sütunlu matris oluşturmak.
- Teknik Detay: İç içe döngüler kullanılarak, her satırda azalan ve her sütunda artan dinamik bir matematiksel formül uygulanır.
📌 Dosya: src/OnlukTabanDonusturme.java
- Amaç: Girilen sayının Tek veya Çift olmasına göre farklı tabanlara (Octal veya Binary) dönüşüm yapmak.
- Özellikler: 'q' tuşu ile çıkış imkanı, hatalı giriş kontrolü (Exception Handling benzeri yapı) ve sonuçları
ArrayListile tersten yazdırma mantığı içerir.
📌 Dosya: src/SayiCozumleyici1.java
- Amaç: Bir sayının basamaklarını analiz ederek istatistiksel veriler sunmak.
- Teknik Detay: Verileri taşımak için
int[]dizisi kullanılmıştır. - Not: Bu yöntem çalışmakla birlikte, dönen dizinin hangi indeksinin ne anlama geldiği (
dizi[0]vb.) kod okunabilirliğini düşürmektedir. Gelişim sürecini görmek adına projede tutulmuştur.
📌 Dosya: src/SayiCozumleyici2.java
- Amaç: Versiyon 1'deki aynı problemi Clean Code prensiplerine göre çözmek.
- Clean Code Dokunuşu: Sonuçları taşımak için ilkel bir dizi yerine, özel bir Sınıf (Class) yapısı kullanılmıştır. Bu sayede "Magic Numbers" sorunu çözülmüş ve
dizi[0]yerinesonuc.tekToplamgibi kendi kendini açıklayan bir yapı kurulmuştur.
📌 Dosya: src/GirdiyeGoreOrtalama.java
- Amaç: Sayının türüne göre farklı ortalama hesapları yapmak.
- Çift Sayı: Basamakların Aritmetik Ortalaması.
- Tek Sayı: Basamakların Geometrik Ortalaması.
- Teknik Detay: Her işlem (
ciftTekKontrol,aritmetikOrtalama,geometrikOrtalama) ayrı metotlara bölünerek modülerlik sağlanmıştır.
📌 Dosya: src/UcgenCizme.java
- Amaç: Kullanıcıdan alınan yükseklik değerine göre yıldızlarla ikizkenar üçgen çizmek.
- Teknik Detay: İç içe döngüler kullanılarak satır, boşluk ve yıldız sayısı dinamik olarak hesaplanıp konsola bastırılır.
📌 Dosya: src/DortgenCizme.java
- Amaç: Kullanıcıdan alınan en ve boy değerlerine göre yıldızlarla dikdörtgen çizmek.
- Teknik Detay: Basit iç içe döngü mantığı ile kullanıcının belirlediği boyutlarda bir matris görselleştirilir.
📌 Dosya: src/HavaliIsim.java
- Amaç: Girilen ad ve soyadı, özel bir çerçeveleme mantığıyla ekrana yazdırmak.
- Teknik Detay: String manipülasyonu ile metin uzunlukları kontrol edilir, gerekirse dolgu karakterleri (
*veya+) eklenir ve karakterler belirli bir desen (köşeli veya sarmal benzeri) oluşturacak şekilde yazdırılır.
📌 Dosya: src/HarfSay.java
- Amaç: Rastgele üretilen 100 harf üzerinde analiz yaparak; harfleri alfabetik sıralamak, her harfin kaç kez geçtiğini bulmak ve en çok tekrar eden harfi tespit etmek.
- Teknik Detay:
Math.random()ile veri üretimi, Bubble Sort mantığı ile sıralama ve sonuçları döndürmek için yardımcı bir Sınıf (Class) (kutuyapısı) kullanımı içerir.
📌 Dosya: src/Navigasyon.java
- Amaç: 10x10'luk bir matris üzerinde (0,0) noktasından başlayıp bitiş noktasına ulaşan rastgele bir yol oluşturmak ve bu yolun koordinatlarını tespit etmek.
- Teknik Detay: İki boyutlu diziler (matrisler) üzerinde rastgele yol üretimi (
matrisDoldur) ve matris taraması ile yol koordinatlarının bulunması (yolBul). Matrisın görselliği için iç içe döngülerle yazdırma işlemi yapılır.
📌 Dosya: src/MayinTarlasi.java
- Amaç: Kullanıcıdan alınan boyutlara göre rastgele mayınlı bir harita oluşturmak ve mayınlara basmadan puan toplamaya çalışmak.
- Teknik Detay:
Math.random()ile 0 (boş) ve 1 (mayın) değerlerinin dağıtımı, koordinat sisteminin kullanıcı dostu hale getirilmesi (indislerin 0 yerine 1-based algılanması), puanlama mantığı ve modüler metot yapısı (Encapsulation denemesi) içerir.
📌 Dosya: src/SayiCevirici.java
- Amaç: Girilen 4 basamaklı bir sayıyı (örneğin 1453) Türkçe metin karşılığına (Bin Dört Yüz Elli Üç) dönüştürmek.
- Teknik Detay: Sayı modüler aritmetik ile basamaklarına ayrılır (
basamaklaraBol). VerilerBasamaklarisimli yardımcı bir sınıfta (Helper Class) tutulur ve önceden tanımlanmış String dizileri (birler,onlar) kullanılarak ekrana yazdırılır.
📌 Dosya: src/VucutKutleIndeksi.java
- Amaç: Kullanıcıdan alınan boy ve kilo değerlerine göre Vücut Kitle İndeksini hesaplayıp, kişinin durumunu (Zayıf, Normal, Şişman) belirlemek.
- Teknik Detay: Verilerin Nesne Yönelimli Programlama (OOP) prensiplerine uygun olarak işlenmesi,
boyvekilodeğerlerinin sınıf özellikleri (fields) olarak saklanması ve modüler metot yapısı kullanılır.