Enteresan Bir Kod Olayı (YAZILIM)
-
if fonksiyonu mu yanlış çalışıyor mantığı mı farklı benim yazdığım kod mu yanlış ?
for(int Friends=0;Friends<FriendsIdsArray.size();Friends++)
{
for(int Followers=0;Followers<FollowerIdsArray.size();Followers++)
{
if (FriendsIdsArray.get(Friends) == FollowerIdsArray.get(Followers))
{
Log.e("Unfollow Yemeyenler ",FriendsIdsArray.get(Friends)+ " - " +FollowerIdsArray.get(Followers));
}
else
{
Log.e("Unfollow Yiyenler ",FriendsIdsArray.get(Friends)+ " - " +FollowerIdsArray.get(Followers));
}
}
}
Log Çıktısı ( Ekran çıktısı ) ----
Bu Olay çok saçma değil midir ?
Array'ler Long tipinde ve eşit olmasına rağmen attığı loga bakın ? sayılar da eşit 1453 defa kontrol ettim anneme babama sordum sayılar aynı mı diye aynı
diyorlar ? Benim mi hatam var kodda anlamadım Object.equals(ArrayList.get(...)) şeklinde yapmama rağmen olmadı
2 ArrayList değerini String'e çevirip karşılaştırdım gene olmadı :D If else yapısı mı değişti ?
Bu Çok tuhaf değil mi gerçekten makinalar aptalmış :D
Dipnot: Genel bir konu olduğu için genel olarak açtım her dilde aynı .. eğer gene yanlış ise lütfen uygun konuya taşır mısınız.. -
FriendsIdsArray.get(Friends) ne döndürüyor normalde hocam?
toString metodu ile equals metodu farklı kodlanmış olabilir.
Ayrıca == operatörü primitive tipler dışında direkt karşılaştırma yapmıyor diye biliyorum. -
NmC bunu yazdı
FriendsIdsArray.get(Friends) ne döndürüyor normalde hocam?
toString metodu ile equals metodu farklı kodlanmış olabilir.
Ayrıca == operatörü primitive tipler dışında direkt karşılaştırma yapmıyor diye biliyorum.FriendsIdsArray = new ArrayList<Long>();
ikisi de aynı şekilde Long tipinde
-
bunların long olduğuna eminsen o zaman farkını neden kontrol etmiyorsun?
FriendsIdsArray.get(Friends) - FollowerIdsArray.get(Followers)) == 0
gibi..
ama bu farkı ekrana yazdır bakalım ne çıkıyor..
-
unbalanced bunu yazdı
bunların long olduğuna eminsen o zaman farkını neden kontrol etmiyorsun?
FriendsIdsArray.get(Friends) - FollowerIdsArray.get(Followers)) == 0
gibi..
ama bu farkı ekrana yazdır bakalım ne çıkıyor..
Hocam hiç aklıma gelmemişti bu nasıl bi mantıktır vallaha helal olsun :D Çok uğraşınca sinir mantığın önüne geçiyor bunu bi deneyeyim
EDİT : Çalıştı ama anlamadığım konu şuan if içerisinde String ve Long tipini eşit almıyor eşit olmasına rağmen ... Sebebi nedir ? Bilmediğim birşey olmalı Yazılımcının hayatı if-else den ibarettir o yüzden çok merak ettim bu konuyu
MhmdAlmz tarafından 03/Şub/16 01:38 tarihinde düzenlenmiştir -
hocam olayın if ile ilgisi yok..
senin karşılaştırma için kullandığın değerlerle ilgili sorun vardır..daha önce bi konuda yazdım geçenlerde, == ile Equals(..) metodu bazı durumlarda farklı cevaplar dönderir aynı görülse de.. Bu yüzden karşılaştıracağın değişkenlerin tiplerine, karşılaştırma için kullandığın metoduna dikkat etmelisin.
bahsettiğim örnek burada http://www.tahribat.com/forum/entity-sorgusu-yardim-215542#msg2680261
-
Hocam java gibi dillerde özellikle javada == operatörü class karşılaştırmalarında problemlidir. Bu yüzden .equals kullanılır ve sanırım sorununuzun kaynağı bu olabilir
-
Theholiqan bunu yazdı
Hocam java gibi dillerde özellikle javada == operatörü class karşılaştırmalarında problemlidir. Bu yüzden .equals kullanılır ve sanırım sorununuzun kaynağı bu olabilir
yok hocam equals yaptım olmadı Unbalancedin dediği şey oldu ikisini çıkardım fakat farklı bi problem olduğunda sıkıntım olacak tekrardan yani 2 string karşılaştırmasında gene böyle bir sorun ile karşılaşırsam sıkıntı olacak
-
MhmdAlmz bunu yazdıTheholiqan bunu yazdı
Hocam java gibi dillerde özellikle javada == operatörü class karşılaştırmalarında problemlidir. Bu yüzden .equals kullanılır ve sanırım sorununuzun kaynağı bu olabilir
yok hocam equals yaptım olmadı Unbalancedin dediği şey oldu ikisini çıkardım fakat farklı bi problem olduğunda sıkıntım olacak tekrardan yani 2 string karşılaştırmasında gene böyle bir sorun ile karşılaşırsam sıkıntı olacak
Unbalanced bu konularin uzmanidir. bu hatanin da nedeni genelde 1.00 ile 1 bir birine esit degildir ama ikiside long olabilir. int64'e convert edip de bir denersen == kontrolu de yemesi lazim.
dipce; Unbalanced'in onerdigi yontem daha performansli calisacaktir cevrim yapmadan esitligin kontrolu
-
Almaz, ikisi ayni deger farkli objeler. Primitive type degiller, objeleri kiyaslarken equals kullanilir.
Ayrıca; @unbalanced ve @theholiqan' ın dediği gibi bazen karşılaştırır bazen karşılaştırmaz diye bir olay yok.
Burdan da cevabını bulabilirsin;
http://stackoverflow.com/questions/7520432/java-vs-equals-confusion
-
abi eğer Long class ını kullandıysan normal böyle olması.
Long ve long farklı şeyler aslında. Sen Long tipindeki bir değişkeni == ile karşılaştırırsan o gidip jwm üzerindeki bellek adreslerini karşılaştırır. Bunun yerine compare metodunu kullanman daha mantıklı olacaktır.