PDA

View Full Version : مشکل با hashcode



harani
دوشنبه 11 شهریور 1392, 10:28 صبح
سلام دوستان من یک برنامه ویندوز با C#‎‎ نوشتم که دو یک string رو میگیره و مقدار زیر رو در یک textbox نشون میده :
txtcom.Text یک مقدار String خاصی است و مقدار در txtActiveCode.Text چاپ میشود


str_active = Math.Abs((txtCom.Text + " " + 1369).GetHashCode()).ToString();//b
txtActiveCode.Text = str_active;//a


حالا من دقیقاً میخوام همین فرمول رو تو اندروید نشون بد من از فرمول زیر استفاده کردم :


btnshow.setOnClickListener(new OnClickListener() {//e

@Override//d
public void onClick(View arg0) {//c
// TODO Auto-generated method stub

String str_active = ""+ Math.abs((txtcom.getText() + " " + 1369).hashCode());//b
txtcode.setText(str_active);//a

}
});




حالا من نمیدونم چرا این دو تا فرمول یکسان خروجی متفاوتی به من میدهند مشکل من کجاست ؟؟

cups_of_java
دوشنبه 11 شهریور 1392, 12:04 عصر
احتمالن پیاده سازی توابغ hashCode برای String توی جاوا با سی شارپ متفاوته
خودت روی یه string ساده و یکسان تست کن این دو تا تابع رو خب... با تست خودت زودتر به جواب میرسی که

harani
سه شنبه 12 شهریور 1392, 17:58 عصر
بله این حرف شما درست متفاوت ولی این پاسخ سوال من نبود شما نمیدانید الگوریتمی که در hashcode استفاده میشه چی ؟

cups_of_java
سه شنبه 12 شهریور 1392, 21:58 عصر
سورس کد جاوا رو ببین توی کلاس String رو نگاه کن
در مورد سی شارپ هم نمی دونم! سرچ کن عزیزم

harani
چهارشنبه 13 شهریور 1392, 22:27 عصر
تا دلتون بخواد سرچ کردم به نتیجه ای نرسیدم که کامنت گذاشتم فقط موضوعاتی در مورد md5 پیدا کردم که مورد نظر من نیست .

cups_of_java
پنج شنبه 14 شهریور 1392, 12:14 عصر
این هش کد جاواست برای رشته ها (نمی دونم چطوری گشتی که پیدا نکردی!!!)
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;

for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java#String.hashCode%28%29
http://stackoverflow.com/questions/2427631/how-is-hashcode-calculated-in-java

harani
پنج شنبه 14 شهریور 1392, 12:44 عصر
آقا ممنون از شما بالاخره فرق استاد و یه فرد عادی تو همین چیراس دیگه .

hamid1129
پنج شنبه 14 شهریور 1392, 15:01 عصر
برای override کردن Object#hashcode() در جاوا اگر از ای‌دی‌ای Eclipse استفاده می‌کنید در ادیتور کلاس مورد نظر راست کلیک کنید و از قسمت Source --> Generate hashcode را انتخاب کنید.
الگوریتم استفاده شده تمام فیلد‌های درون کلاس را در بر گرفته و قابل ویرایش می‌باشد.
اگر به منظور استفاده از جدول‌های درهم‌سازی (Hashing) متد را پیاده می‌کنید همواره متد Object#equals(Object obj) را نیز پیاده کنید.