HackerRank — Java If-Else
Java’da koşullar… If-Else Nedir ve Nasıl Kullanılır? If-Else sorusunun çözümü
HackerRank üzerindeki Java problemlerini çözüyoruz. Bu üçüncü problem. Eğer diğer problem çzöümlerini okumadıysanız önce onlara bakmanızı tavsiye ederim, hepsinin toplu hali:
Önce problemi anlayalım sonra da çözümüne geçelim. Problemi anlama kısmını okuduktan sonra problemi çözmeyi denemenizi sonra da buradaki çözümle karşılaştırmanızı şiddetle tavsiye ederim :)
Problemin linki 👇
Problemi anlayalım
Yazılımın en temel kavramlarından biri koşullar… Koşul yazmadan kod yazabilmek çok zor. Bu problemde koşul yazmaya başlayacağız. Koşul yazmak için “if-else” yapısını kullanıyoruz.
If-Else Nedir ve Nasıl Kullanılır?
Yazılım yazarken her şey karar aşamalarından ibaret. Günün sonunda belirlenen koşullar ile kod yazmış oluruz. Bol kepçeden if kullanımını tavsiye etmesem de onsuz bir hayat düşünemiyorum :D
Clean code nasıl yazılır aşamasına geldiğimizde ilk söyleyeceğim şey “iç içe if yazarken iki kere düşünün”, “şu koşullarda if-else yerine conditional operatör kullanımı daha güzel”, “şu if yapısı yerine kesinlikle switch-case kullanın”, “şu yapıda factory pattern çok daha mantıklı if’leri sıralamayın” gibi iddialı ifadeler kullacağım şimdiden hazırlıklı olun :)
if-else kullanırken ikiden fazla koşul olacaksa araya “else if” girer. “if()” ve “else if()” bir boolean sonuç üreten koşul belirtirler. Örneğin if(5>4) kodunda “5>4” koşulu true döneceği için if’in içindeki blok çalışır.
int sayi= 10;
if(sayi>10){
System.out.println("Sayı 10'dan büyüktür");
}
else if(sayi === 10){
System.out.println("Sayı 10'a eşittir");
}
else{
System.out.println("Sayı 10'dan küçüktür");
}
Yukarıdaki örnekte “sayi” değişkeni 10 olduğu için “else if(sayi==10)” koşulunu karşılar ve “Sayı 10'a eşittir” ifadesinin print edildiğini görürüz.
Yani “bu olacaksa şu olsun” gibi bir probleminiz varsa koşulları kullanıyoruz. Koşul yazmak ise yukarıdaki örnekteki gibi.
Problem Beklentisi
Terminalden input olarak bir integer alınacak, bu integer aşağıdaki koşullara göre çıktı üretecek:
- Tek sayı ise, “
Weird
” print edilecek - Sayı çift ve [2–5] aralığıdaysa (2 ve 5 dahil), “
Not Weird
” print edilecek - Sayı çift ve [6–20] aralığındaysa (6 ve 20 dahil), “
Weird
” print edilecek - Sayı çift ve 20'den büyükse, “
Not Weird
” print edilecek
Girilen sayı [1-100] aralığında (1 ve 100 dahil) ve tek bir integer olacak.
Örnekler:
- 3 girilirse çıktısı “Weird” olacak
- 24 girilirse çıktısı “Not Weird” olacak
Problem Çözümü
Problem çözümü için aşağıdaki scanner yapısı HackerRank platformu tarafından sağlanmış. Bu yapıyı bozmuyoruz ve altına koşul ifademizi ekleyeceğiz.
int N = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
Çözümü yazarken ilk önce çift-tek durumunu kontrol edeceğiz bunun için modül operatörü olan “%” ile işlem yapacağız. Örneğin “10%2” yaptığımızda 0 sonucunu verecek. 10'u 2'ye böldüğümüzde kalanı 0 sonucunu verdi. Çift sayılar 2'ye tam bölündüğü için sayının tek ya da çift olduğunu 2'ye bölerek anlıyoruz.
İlk koşulda kontrol ettiğimiz “N%2!=0”ifadesi sayının tek sayı mı olduğunu kontrol ediyor. Sonrasında yer alan “else if” kontrollerinde de problemde verilen sınırlar kontrol ediliyor. “&&” → ve operatörü, “> =” ve “< =” operatörleri de matematikteki kullanımıyla aynı.
if(N%2!=0)
{
System.out.print("Weird");
}
else if(N>=2 && N<=5)
{
System.out.print("Not Weird");
}
else if(N>=6 && N<=20)
{
System.out.print("Weird");
}
else{
System.out.print("Not Weird");
}
Normalde yaptığımız kontrollerin bir anlamsal karşılığı olduğunda kodun okunuşunu artırmak ve olası karmaşayı azaltmak için ayrı metodlar oluştururuz. Tek-çift belirleme işlemini ayrı bir metoda yazıp, şu şekilde çağırabilirdik: (Bu problemde bunu yapmaya gerek yok, yukarıdaki çözüm yeterli. Bu çözüm herhangi bir hızlandırma vb. yapmıyor, sadece bir pratik)
public static void solutionTwo(int N) {
if (isNumberOdd(N)) {
System.out.print("Weird");
} else if (N >= 2 && N <= 5) {
System.out.print("Not Weird");
} else if (N >= 6 && N <= 20) {
System.out.print("Weird");
} else {
System.out.print("Not Weird");
}
}
private static boolean isNumberOdd(int number) {
return number % 2 != 0;
}
“ Java If-Else” problemini de çözmüş olduk! Bol kodlu ama bug’sız günler dilerim :)
Tüm problemlerin çözümleri 👇