Bu Java uygulamasında amacımız girilen sayının ya da karakterlerin bulunduğu sayı sisteminden istenilen sayı sistemine çevrilmesi.
Öncelikle tam olarak kodu görelim ve bu kodları ayrıntılı bir şekilde ele alalım. Daha sonra ise olası çıktıları inceleyeceğiz.
Kodumuzun tam hali bu şekilde. Şimdi bu kodları ayrıntılı bir şekilde açıklayacağım.
Kodların Açıklaması:
package javaapplication;
ifadesi, bu sınıfın javaapplication
adlı bir paketin parçası olduğunu belirtir. Bu ifadeyi yazmak zorunlu değildir.
import java.util.Scanner; ifadesinin amacı Java’daki Scanner
sınıfını kullanarak kullanıcıdan giriş almaktır.
public
: Bu metot diğer sınıflardan erişilebilir anlamına geliyor.
static
: Bu metot, bir nesne oluşturmadan çağrılabilir. Doğrudan BaseConversion.convertToDecimal()
şeklinde kullanılabilir.
number, çevrilecek sayıdır. base sayının mevcut tabanıdır. result çevrilen sayıyı tutar, başlangıçta 0 olarak ayarlanır. power Çarpanları (üsleri) takip eder. Sağdan sola ilerlerken basamak değerlerini tabanın kuvvetleriyle çarpmak için kullanılır.
Burada result, power ve base değişkenlerini integer tipinde bildirirken digits ve number değişkenini String tipinde bildirdik. Çünkü digits ve number değişkeni harf de içeriyor.
Amaç: Sayının karakterinin, digits
dizisindeki konumunu bulmak.
number.length() - 1
: Sağdaki en son karakterden başlamak için kullanılır.
number.charAt(i)
: Sağdan sola her bir basamağı alır.
Eğer karakter, digits
içinde bulunamazsa (örneğin G
gibi), indexOf
-1
döndürür.
Amaç: Karakterin geçerli olup olmadığını kontrol etmek.
value == -1
: Geçersiz bir karakterse hata fırlatır.
value >= base
: Basamaktaki değer, verilen tabandan büyükse hata verir.
value * Math.pow(base, power)
: Basamağın değerini, tabanın ilgili kuvvetiyle çarpar.
Burada while döngüsü, sayıyı belirtilen tabana çevirir.
number % base
: Kalanı hesaplamak için.
digits.charAt(number % base): Kalanın karakterini almak için.
result.insert(0, …): Kalan, stringin başına eklenir çünkü taban dönüşümü sırasında sayıyı ters okuruz.
number /= base
): Sayının bölünmesi için kullanılır. Sayıyı hedef tabana böler ve döngüye devam eder.
return result.toString(): Döngü tamamlandıktan sonra, tüm basamakları içeren stringi döndürür.
Bu kodun amacı kullanıcıdan girdi almak. Bunun için Scanner sınıfı kullanılır.
Scanner scan = new Scanner(System.in): Kullanıcının klavye aracılığıyla veri girmesine izin verir. (System.in) kullanıcıdan veri almayı ifade eder.
String inputNumber = scan.nextLine().toUpperCase(): Kullanıcının girdiği girdiyi alır ve harf varsa bunu büyük harfe çevirir. Çünkü onaltılık sistemde büyük harf kullanılır.
convertToDecimal(inputNumber, inputBase)
: Kullanıcının girdiği sayıyı (inputNumber) belirtilen tabandan (inputBase) 10’luk (decimal) tabana çevirir.
Eğer girişteki sayı ve taban uyumsuzsa, IllegalArgumentException
fırlatılır.
catch (IllegalArgumentException e)
: Hata mesajını ekrana yazdırır.
return
ile programın devam etmesini engeller.
convertFromDecimal(decimalValue, targetBase)
: Onluk (decimal) tabandaki sayıyı, kullanıcının istediği hedef tabana (targetBase
) çevirir.
System.out.println(“Converted number: ” + result): Bu kod ise son olarak çevrilen sayıyı ekrana yazdırır.
Çıktı Örnekleri
Bu çıktı örneğinde, kullanıcı girdiği sayının tabanını yanlış girdi. Bu yüzden ekrana karakterlerin geçersiz olduğu ve uygun karakterler girilmesi gerektiği yazıldı.
Bu çıktı örneğinde, kullanıcı onaltılık sayı sistemine uygun olmayan bir karakter (G) girdi. Bu yüzden ekrana karakterlerin geçersiz olduğu ve uygun karakterler girilmesi gerektiği yazıldı.
Bu çıktı örneğinde ise uygun olmayan bir karakter girilmedi bu sayede kod istenilen şekilde çalıştı.