Şimdi Ara

Java Stringler aynı fakat if döngüsünde true dönmüyor [Çözüm]

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
6
Cevap
0
Favori
334
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar ben yaşayan olursa diye az önce aldığım saçma sapan hatanın çözümünü nasıl bulduğumu anlatacağım.

    Ilk olarak bu uygulama bir SERVER/CLIENT uygulamasında. Hata server'de
    Client ten gelen string "message kullanıcının mesajı" tarzında oluyor.
    Split ile 0. indexteki kelimeyi aldım (message). Sonrada if döngüsü ile eğer message ise diye kontrol ettim.
    Saçma bir nedenle ne denediysemde true dönmedi.

    Çözüm:
    String gelenMesaj = msg;
    String msgcmd = "message";

    if(msgcmd.hashCode() == gelenMesaj.hashCode()){

    }

    Arkadaşlar sonuç olarak olay hashCode fonksiyonu ile çözüme ulaştı.

    Bu hatayı neden aldığımı bilen varsa banada anlatabilir mi :D



  • Stringler primitive typler değil birer objeler yani == ile kontrol edemezsin. Karşılaştırmak için string1.equal(string2) ile kontrol etmen gerekiyor. == sadece bu stringlerin referanslarını check eder ve referansları aynı ise true döner. Bu sebeple javada objeleri karşılaştırmak için equals kullanmak gerekir. hatta kendi objelerinin equals metodlarını override ederekte kullanabilirsin.
  • Merhaba,

    Öncelikle client/server arasında bir iletişim kurmak istiyorsan bunu String veri tipi üzerinde değil de integer üzerinden yapman daha uygun olur.

    Örneğin,



    int MSG_CONNECTED = 1;
    int MSG_USER_JOINED = 2;
    int MSG_USER_LEAVING = 3;

    //while...

    if(intMsg == MSG_CONNECTED){
    ...
    }




    Eğer ki mesajlar böyle bir iletişim için değil de String üzerinden kullanılacaksa,



    if(strMsg.equals("merhaba"))
    //ya da
    if(strMsg.contains("hey"))



    şeklinde kullanılabilir.
  • Arkadaşlar hepinize çok teşşkür ediyorum equals baya işime yaradı.
    Ayrıca socket'de integer kullanmakta baya mantıklı ama kendime buffer system yaptım.
    channel <0,1,2,3,4> şeklinde bir aktarım gerçekleşiyor.
    yazdığım read fonksiyonları 0,1,2,3,4 ü char dan normale çevirip channel ile birlikte şöyle geri döndrüyor
    String[] ret = {"message", "channel"};
    böylece username ve chat gibi olayları gönderip alabiliyorum
  • JSON gonder, al. Kasma kendi protokolunu yaratmakla.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.