5 Mayıs 2017 Cuma

Integer bir değerin String değere çeviren algoritma



Girilen sayının %10 u yani mod 10 da diyebiliriz sanıyorum, kalanlar sırasıyla 1,9,8,7,6,5,4,3,2,1 rakamlar olacaktır. Bunları String bir değerde peş peşe tutarsak "1987654321" olacaktır. Bu String değerinin ise yine tersini almalıyım ki ilk girilen rakamın string halini bulmuş olayım. Bunun için String değerin 0.index ini en son index'e , en son index'i ise en baştaki 0. indexe atmalıyım, şeklinde bir algoritma üretebiliriz.

Not: Java'da reverse alabilen farklı algoritmalar mevcut, ör: StringBuilder("...değer ..").reverse().


  • Bir public main class içinde aşağıdaki kodları uygulayalım;


public static void main(String[] args) {

int input =1234567891;

String result =  numberToString(input);
System.out.println("numberToString=" + result);
}

public static String numberToString(int num) {
String result = "";
String stringValue = null;
while (num > 0) {
int rem = num % 10;

result += rem;
num = num / 10;
}
System.out.println("Reverse:" + result);
stringValue = reverse(result);
              //new StringBuilder(result).reverse().toString(); kullanılabilir.
  
return stringValue;
}


  • String bir değerin harflerini /indexler üzerinden, Reverse methodunu birden farklı şekilde olabilir, araştırdıklarımdan sadece 2 tanesini vereceğim.

1. Yöntem;
public static String Reverse(String input) {
char[] in = input.toCharArray();
int begin = 0;
int end = in.length - 1;
char temp;
while (end > begin) {
temp = in[begin];
in[begin] = in[end];
in[end] = temp;
end--;
begin++;
}
return new String(in);
}

2.Yöntem daha kısa kod, recursive algoritma şeklinde;

"1987654321" string değerinin

  • 0.index'i 1
  • 1.index' ise 9 dur gördüğünüz üzere.Öyle bir algoritmam olsun ki , bir döngü içinde ilk indexi alıp (charAt(0) fonksiyonu) ,ilk index'ten sonraki kalan değerini alsın (substring(1) fonksiyonu) ve en sonuna yazsın, En sondaki index olan "1" değerini de attıktan sonra döngüden çıksın. Şahsen az beynim yanmadı desem ilk başta yalan olur:)



public static String reverse(String s) {
if (s.length() <= 1) {
return s;
}
return reverse(s.substring(1))   +    s.charAt(0);
}