Cevaplar ve Açıklamalar
Not: Ideal kilo = (boy – 150) * 0.9 + 50
Açıklama:
Bu soruda, kullanıcıdan boy bilgisini kesirli sayı (ondalıklı sayı) olarak almamız gerekiyor, bu nedenle Java’da double
veya float
veri tipi kullanılabilir. double
, daha yüksek hassasiyet sağladığı için tercih edilir. Metot, boy bilgisini parametre olarak alacak, verilen formülü uygulayacak ve sonucu ekrana yazdıracak. Kullanıcı girdisini almak için Scanner
sınıfını kullanabiliriz, ancak metot sadece hesaplama ve yazdırma işlemini yapacaksa, girdiyi metot dışında alabiliriz. Soru, metodu yazmamızı istediği için, metot odaklı bir çözüm sunacağız.
double
tipinde bir boy parametresi alır.(boy - 150) * 0.9 + 50
.System.out.println
ile ekrana yazdırılır.Çözüm:
Test Kodu: Metodun nasıl kullanılacağını göstermek için bir test kodu:
Örnek Çıktı:
Girdi: 170
Çıktı: Ideal kilonuz: 68.0 kg
Hesaplama: (170 - 150) * 0.9 + 50 = 20 * 0.9 + 50 = 18 + 50 = 68
Analitik Perspektif: Metot, basit bir matematiksel formülü uygular ve kullanıcı dostu bir çıktı üretir. Gerçek dünyada, boy için geçerlilik kontrolleri (örneğin, 100 cm < boy < 250 cm) ve hata yönetimi eklenebilir. Ayrıca, çıktıyı daha hassas hale getirmek için String.format("%.2f", idealKilo)
kullanılarak ondalık basamaklar sınırlandırılabilir.
Açıklama:
Bu soruda, kullanıcıdan bir tamsayı alınacak ve sayının tek mi yoksa çift mi olduğu kontrol edilip ekrana yazdırılacak. Tamsayı için Java’da int
veri tipi uygundur. Bir sayının tek veya çift olduğunu belirlemek için mod operatörü (%
) kullanılır: Eğer sayi % 2 == 0
ise sayı çifttir, değilse tektir. Metot, tamsayıyı parametre olarak alacak ve sonucu ekrana yazdıracak, bu nedenle void
dönüş tipine sahip olacak.
int
tipinde bir parametre alır.sayi % 2
kullanılır.System.out.println
ile ekrana yazdırılır.-4 % 2 == 0
), bu nedenle ek kontrol gerekmez.Çözüm:
Test Kodu:
Örnek Çıktı:
Girdi: 6
Çıktı: 6 çift bir sayıdır.
Girdi: 7
Çıktı: 7 tek bir sayıdır.
Analitik Perspektif: Metot, temel bir karar yapısı (if-else
) kullanarak hızlı ve doğru sonuç verir. Gerçek dünyada, metot bir boolean döndürebilir (return sayi % 2 == 0
) ve yazdırma işlemi çağıran tarafından yapılabilir, böylece metot daha esnek olur.
Kod:
Açıklama:
Bu soruda, bir okul numarası (örneğin, 12345) sayi
değişkenine atanacak ve kod çalıştırılacak. Kod, sayının rakamlarını tek tek ayırarak toplamını hesaplar ve her adımda ara toplamı ekrana yazdırır. İşlemi adım adım inceleyelim:
toplam = 0
, sayi
okul numarası (örneğin, 12345).while (sayi > 0)
, yani sayı sıfır olana kadar döngü devam eder.sayi % 10
: Sayının son rakamını alır (örneğin, 12345 için 5).toplam += sayi % 10
: Son rakamı toplama ekler.sayi = sayi / 10
: Sayının son rakamını atar (12345 / 10 = 1234).System.out.print(toplam + " ")
: Ara toplamı ekrana yazdırır.Örnek Okul Numarası: 12345
Adım adım hesaplama:
sayi = 12345
, toplam = 0
sayi % 10 = 5
, toplam = 0 + 5 = 5
sayi = 12345 / 10 = 1234
5
sayi = 1234
, toplam = 5
sayi % 10 = 4
, toplam = 5 + 4 = 9
sayi = 1234 / 10 = 123
9
sayi = 123
, toplam = 9
sayi % 10 = 3
, toplam = 9 + 3 = 12
sayi = 123 / 10 = 12
12
sayi = 12
, toplam = 12
sayi % 10 = 2
, toplam = 12 + 2 = 14
sayi = 12 / 10 = 1
14
sayi = 1
, toplam = 14
sayi % 10 = 1
, toplam = 14 + 1 = 15
sayi = 1 / 10 = 0
15
sayi = 0
, döngü biter.Çıktı: 5 9 12 14 15
Örnek Çıktı (Okul Numarası: 12345):
5 9 12 14 15
Not: Çıktı, okul numarasına bağlıdır. Örneğin, okul numarası 54321 için çıktı: 1 4 7 10 15
olur.
Analitik Perspektif: Kod, bir sayının rakamlarını sağdan sola işler ve kümülatif toplamları yazdırır. Negatif sayılar için kod çalışmaz, çünkü sayi > 0
koşulu sağlanmaz. Performans açısından, döngü O(log n) karmaşıklığa sahiptir, çünkü sayının basamak sayısı log₁₀(n) ile orantılıdır.
Açıklama:
Bu soruda, bir tamsayı dizisi parametre olarak alınacak, dizideki elemanlar kontrol edilecek: tek sayılar 3 ile, çift sayılar 2 ile çarpılacak. Güncellenmiş dizi geri döndürülecek. Java’da diziler referans tiplidir, yani metot içinde yapılan değişiklikler orijinal diziyi etkiler. Metot, int[]
tipinde dönüş yapabilir, çünkü dizi geri döndürülmesi isteniyor.
int[] dizi
parametresi alır.Çözüm:
Test Kodu:
Örnek Çıktı:
Orijinal dizi: [1, 2, 3, 4, 6]
Güncel dizi:
[3, 4, 9, 8, 12]
Hesaplama:
1 (tek): 1 * 3 = 3
2 (çift): 2 * 2 = 4
3 (tek): 3 * 3 = 9
4 (çift): 4 * 2 = 8
6 (çift): 6 * 2 = 12
Analitik Perspektif: Metot, diziyi yerinde (in-place) günceller, bu da bellek kullanımını optimize eder. O(n) zaman karmaşıklığına sahiptir, n dizi boyutudur. Gerçek dünyada, orijinal diziyi korumak için yeni bir dizi oluşturulabilir, ancak bu ek bellek maliyeti getirir.
Kod:
Açıklama:
Bu soruda, kelime
değişkenine ad ve soyad yazılacak (örneğin, "Ahmet Yilmaz"), kod çalıştırılacak ve belirli bir çıktı üretilecek. Kod, stringin tek indeksli karakterlerini (1, 3, 5...) bir tire işaretiyle birlikte yazdırır. İşlemi adım adım inceleyelim:
for(int i = 1; i < kelime.length(); i += 2)
, i=1’den başlar, her adımda 2 artar (1, 3, 5...).kelime.charAt(i)
ile i’nci indeksdeki karakter alınır ve önüne tire eklenerek yazdırılır.Örnek Ad ve Soyad: "Ahmet Yilmaz"
Kelime: "Ahmet Yilmaz" (uzunluk 12)
Adım adım:
i = 1
: charAt(1) = 'h'
, yazdır: -h
i = 3
: charAt(3) = 'e'
, yazdır: -e
i = 5
: charAt(5) = ' '
, yazdır: -
i = 7
: charAt(7) = 'i'
, yazdır: -i
i = 9
: charAt(9) = 'm'
, yazdır: -m
i = 11
: charAt(11) = 'z'
, yazdır: -z
i = 13
: Döngü biter, çünkü 13 >= 12
.Çıktı: -h-e- -i-m-z
Örnek Çıktı (Ad ve Soyadı: Ahmet Yilmaz):
-h-e- -i-m-z
Not: Çıktı, ad ve soyadına bağlıdır. Örneğin, “Ali Veli” için çıktı: -l- -e-i
Analitik Perspektif: Kod, stringin her ikinci karakterini alır, O(n/2) karmaşıklığa sahiptir. Gerçek dünyada, stringin null veya boş olduğu durumlar için kontrol eklenebilir. Çıktı, tirelerin karakterleri ayırması nedeniyle okunabilir bir formattadır.