Merhaba arkadaşlar bugün ki dersimizde
C’den Java’ya geçen genetik bir özelliğe değineceğim.
Bilindiği üzere Java programlama dilinde kullanıcıdan alınan her değer
String’dir bu yüzden dolayı, sayılarla ilgili bir işlem yapmak istiyorsak o sayıyı
String’den Double ya da Integer’a çevirmemiz gerekiyor. Bu işlem için Java da
çeşitli classlar ve metotlar kullanılmaktadır, bunlardan en bilineni “Integer.parseInt(); “ metodudur. Bir
örnekle anlatacak olursak bu metodu Integer.parseInt(urunFiyatField.getText()));
kullanımı bu şekilde. Gördüğünüz gibi urunFiyatField adında bir textField’mız var
buradan ürün fiyatı üzerinde işlem yapılması gerekiyor bu yüzden
Integer.parseInt metodunu kullanıyoruz, urunFiyatField’dan aldığımız değer
üzerinde ancak bu şekilde işlem yapabiliyoruz.
PEKİ, JAVA BU ÖZELLİĞİ NEREDEN ALDI?
Bilindiği üzere Java, C++ programlama
dili ile yazılmış bir programlama dilidir. Birçok özellikte C++’ın var olan
yapıları ile oluşturulan kısa fonksiyonlar aracılığı ile kullanıcılara
sunuluyor. parseInt metodunun içerisinde
barındırdığı çeşitli alt fonksiyonlar ile kullanıcıdan alınan sayıları String’den
Integer’a dönüştürüyor, bu metot’un bulunduğu class’ın adı Integer classıdır.
Şimdi Java’nın String’leri Integer’a dönüştürdüğü C’nin ise char [] dizilerini
Integer’a ayrıştırdığı fonksiyonu yaptığım basit bir örnekle açıklayarak,
bu sistemin nasıl çalıştığına dair ipucularını yakalamaya çalışalım.
Resim:1
/*Char [] dizisiden alınan değeri
Integer’a çevirmek*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>//strdot'u kullanmak için gerekli kütüphane.
int main(int argc, char *argv[]){
int ayrisanDeger;//Tam Sayı değişken.
char cumle[50];//karakter dizisi
char cumle2[50];//karakter dizisi
char *kuyrukPtr;//Pointer(gösterici) değişkeni
char *kuyrukPtr2;//Pointer(gösterici) değişkeni
int esc;
while(esc!=27){//tus ESC'ye basılmadığı sürece aşağı
daki işlemleri yap.
printf("Integer bir deger
ile baslayan cumle giriniz : ");
gets(cumle);//gets scanf
fonksiyonu gibi kullanıcıdan sayı ya da karakter almasını sağlar diziler aynı
zamanda göstericidir o yüzden gets ile &(adres operatörü) kullanmadan
kullanılabilir.
printf("Integer bir deger
ile baslayan ikinci bir cumle giriniz : ");
gets(cumle2);
ayrisanDeger
=strtod(cumle,&kuyrukPtr);/*cumle dizisinin adresi kuyrukPtr'ye kopyalanıyor.
Sonra strtod ile kuyrukPtr değişkenin içinde
ki double sayısı ayrıştırıluyor */
ayrisanDeger =strtod(cumle2,&kuyrukPtr2);/*cumle2 dizisinin
adresi *kuyrukPtr2'ye kopyalanıyor.
Sonra strtod ile
kuyrukPtr değişkenin içinde ki double sayısı ayrıştırılıyor */
ayrisanDeger=strtod(cumle,&kuyrukPtr)+strtod(cumle2,&kuyrukPtr2);
//Integer sayıları tespit edilmiş ve ayrıştırılmış gösterici değişkenler toplanıyor.
printf("Toplam TL %d\n", ayrisanDeger);//Ardından Ayrışan
Değerin toplanan ekrana basılıyor.
printf("1. kuyruk = %s\n",kuyrukPtr);//1.Ayrıştırılmış
karakterler ekrana basılıyor
printf("2. kuyruk = %s\n",kuyrukPtr2); //2.Ayrıştırılmış
karakterler ekrana basılıyor
printf("Cikis icin ESC'ye basiniz .\n");
esc=getch();//27'nin tuş olduğunu algılatma
}
system("PAUSE");//yapılan işlemin
kullanıcı tarafından görünmesini sağladığı komut.
return 0;
} Gördüğünüz üzere arkadaşlar C de String sayıları Integer’a
dönüştürme buna benzer bir şekilde gerçekleiyor, yazdığımız her parseInt metotdu. Buna benzer bir
uygulama ile gerçekleşiyor. Bugün ki dersimiz bu kadar arkadaşlar ileri ki derslerimizde daha verimli konulara değineceğim bizi takip etmeye devam edin.Not: bu makale Emrah DEDEOĞLU tarafından yazılmıştır. Öğretim Grv. Alper KAHRİMAN'nın katkılarıyla.
Bilgiler için teşekkürler devamını bekliyorum...
YanıtlaSilRica ederim, elbette ki devamı gelecek. yorumunuz için teşekkürler.
YanıtlaSilDeğerli bilgileriniz için Teşekkürler...
YanıtlaSilpaylaşım için tesekkürler ama birsey sormak istiyorum c# da kod yazarken sayıları cevirmek için sayi = int.Parse(Console.ReadLine()); kulanıyoruz ama gets(cumle); olayını anlamadım bunla ilgili bi paylaşımınız var mı ya da olacak mı ?
YanıtlaSilMerhaba Anna gets ve scanf kullanıcıdan kelime yada sayı almamızı sağlayan bir C fonksyonudur. Aşağıda kullanıldığı gibi.
Silchar karakterDizisi1[50];
char karakterDizisi2[50];
printf("Birinci cümleyi Giriniz:");
scanf("%s",sayi1); //gets yerine scanf kullanıyoruz.
printf("Ikinci Cümleyi Giriniz:");
gets(karakterDizisi2);//scanf yerine gets kullanıyoruz.
Anlaşıldığı üzere kullanıcıdan birşey aldırmak istediğimizde gets ve scanf ile bu işlemi yaptırabiliyoruz. gets işlemi kullanıcıdan sayı yada karakter aldırmamızı sağlıyor. ama scanf den en büyük farkı şudur sadece dizi değişkenlerine aldırabiliyoruz.
bunun nedeni ise dizilerin(Array)aynı zaman da gösterici olmasıdır.
scanf'te değişkenlerin adres yolunu &>>adres operatörüyle belirliyorduk, diziler için adres operatörü kullanmamıza gerek yok. çünkü dizinin zaten kendisi adrestir ve ram'de ki adresi bilinmektedir.
ilgilendiğiniz için çok teşekkür ederim paylaşımlarınızın devamını bekliyorum..
SilRica ederim nedemek. tabiki devamı gelecektir, siz değerli kullanıcılarında katkılarını bekliyoruz, çünkü bilgi paylaştıkça çoğalır. iyi geceler diliyorum.
SilKolay gelsin.
YanıtlaSilBen on parmak klavye çalışıyorum. İnternetim kısıtlı olduğu için online sitelerde pek fazla yazamıyorum. Bunun yerine kendi bilgisayarımda bir sayfa oluşturup offline olarak çalışmak istiyorum. Ancak bunun için ne yapmam gerektiğini bilmiyorum. Bana offline çalışan bir sayfa şablonu yazar veya editler misiniz?
Mesela hizliyaz.com, 10fastfingers.com gibi.
Ben sadece arada metinleri değiştirip çalışabileyim.
Bazı sayfaları bilgisayarıma çektiğimde çalışıyor ama kodlardan anlamadığım için düzenleme yapamıyorum.
Mesela hizliyaz.com çok güzel tasarlanmış. Yanlış karakter girildiğinde "input" alanının rengi kırmızı oluyor ve "split" özelliği çalışmıyor. Ta ki siz hatanızı düzeltinceye kadar. Ama 10fastfingers.com'da bu yok. Hatalı yazılan karakter, kelimeyi de hatalı olarak hafızaya alıyor. Üstelik test metnini karıştırıp karıştırıp veriyor kullanıcıya.. Yani rastgele kelimelerle çalışılıyor. Ayrıca noktalama işaretleri de kullanılmıyor. Bu yüzden skorlar bir hayli yüksek gözüküyor. Tabi bu gerçeği yansıtmıyor. Ama hizliyaz.com'da metin üzerinden çalışılıyor. Üstelik "input" alanının eventleri çok güzel. 10fastfingers.com global bir site. Yani dünyanın her yerinden oraya girenler oluyor. Geliştiricisi bu amaçla siteye çok güzel uygulamalar ekledi. Bunun için de çok rağbet görüyor. Üyelik sistemi, profil resmi, skorunuz ve resminizin live paylaşımı, son 50 testinizin grafiksel diyagramı vs gibi birçok güzel özellik eklemiş geliştiricisi. Ama dediğim gibi metin olarak değil de kelime olarak test yapılıyor orda. Bu da daktilografi çalışması imkanını sağlamıyor.
Bu konuda yardımcı olursanız sevinirim.
Hayırlı günler.