السلاام عليكم
عند مشكله بسييطه وهي الpointer
المعرووف لو مثلا ابي قيمه تأشر عل المصدر حقها بلغه السي شارب بسويها كذا
*int x
fبالجافا كيف ؟؟
السلاام عليكم
عند مشكله بسييطه وهي الpointer
المعرووف لو مثلا ابي قيمه تأشر عل المصدر حقها بلغه السي شارب بسويها كذا
*int x
fبالجافا كيف ؟؟
fanon كتب:السلاام عليكم
عند مشكله بسييطه وهي الpointer
المعرووف لو مثلا ابي قيمه تأشر عل المصدر حقها بلغه السي شارب بسويها كذا
*int x
fبالجافا كيف ؟؟
فعلا هى مشكله
لكن للاسف لا يوجد pointers فى الجافا
هذه من مميزات الجافا
اللتى تمنع من التعارض فى الذاكره
انما تستخدم دائما الdynmice define
يعنى عاوز تعرف اى حاجه
هتلاقى نفسك بتعرفها دائما بـ new
يعنى عاوز تعرف حاجه من نوع Scanner
لم تيجى تعرفها
مش تعمل كدا
Scanner input;
لان كدا لسه مش بيشير على حاجه بيشير على null
لو استخدمته كدا هتلاقى بيقولك فيه exception من نوع
java.lang.NullPointerException
لازم تعمل ليها new
هتكون كدا
Scanner input = new Scanner ( System.in );
سلام عليكم
انا فهمت كلامك نوعا مااا
لكن لو عندي *int x
كيف احولها بالجافا ؟؟؟
fanon كتب:انا فهمت كلامك نوعا مااا
لكن لو عندي *int x
كيف احولها بالجافا ؟؟؟
الحمدلله على كل شىء
طب عاوز تعمل ايه بس ؟
int *x ;
عاوز تعمل بيها ايه ؟؟؟؟
تستخدمها ف ايه ؟
لان تحويلها مش هيكون بالطريقه دى لان الجافا زى ما قولت لك مش فيها pointers
يمكن يكون اللى انت عاوزه بيتعمل بطريقه تانيه فى الجافا ويمكن لا
قولى بس انت عاوز تعمل بيها ايه ؟
وان شاء الله نفيدك
تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 22 يونيو 2010 في 19:25
لاحظى الكود اختى الكريمة
class IntObj {
public int value;
}
public class Binky() {
public static void main(String[] args) {
IntObj x; // Allocate the pointers x and y
IntObj y; // (but not the IntObj pointees)
x = new IntObj(); // Allocate an IntObj pointee
// and set x to point to it
x.value = 42; // Dereference x to store 42 in its pointee
y.value = 13; // CRASH -- y does not have a pointee yet
y = x; // Pointer assignment sets y to point to x's pointee
y.value = 13; // Deference y to store 13 in its (shared) pointee
}
}

الجافا لا يوجد بها pointer variables و لكن يوجد بها reference variables و الاثنان متساويان فى المفهوم اصلا
و لاحظى ان ال reference variables تشير الى كائن من نوع فئة معينة


اسراء شلبى كتب:لاحظى الكود اختى الكريمة
class IntObj { public int value; } public class Binky() { public static void main(String[] args) { IntObj x; // Allocate the pointers x and y IntObj y; // (but not the IntObj pointees) x = new IntObj(); // Allocate an IntObj pointee // and set x to point to it x.value = 42; // Dereference x to store 42 in its pointee y.value = 13; // CRASH -- y does not have a pointee yet y = x; // Pointer assignment sets y to point to x's pointee y.value = 13; // Deference y to store 13 in its (shared) pointee } }
لم ما الغرض من وضع
class IntObj {
public int value;
}واستخدامها بعد ذلك ؟
هل الغرض منها كيفيه عمل كائن؟
ام ماذا ؟
تقبلى مرورى
معلش :wacko: :wacko:
تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 22 يونيو 2010 في 20:57
لان ال x دىrefer to objects و كدة بقى هى تعتبر reference variables
و زى ما قولت ان ال reference variables تساوى فى المفهوم pointer variables


اسراء شلبى كتب:لان ال x دىrefer to objects و كدة بقى هى تعتبر reference variables
و زى ما قولت ان ال reference variables تساوى فى المفهوم pointer variables
ما انا بدال هاخزن فيها قيمه واحده و integer
طب ما اعمل كدا وخلاص ؟
int x ; int y ; // after some code // assign my x, y values x = 13 ; y = 42 ;
ولا ايه ؟
انا وجدت الكود دا هنـــــــا
بس بردوا لحد دلوقتى مش عارف هو عامل كدا ليه ؟
ايه الغرض من كدا
لو الغرض هو انى اخزن قيمه interger طب ما اعمل زى ما انا ذكرت كدا
تقبلى مرورى
سلام عليكم
==================
اللى فهمته بعد قراءه بدقه شويه وتركيز لان مفيش تركيز خالص
لقيت هو عاوز يحافظ على مبدأ pointer
لكن كدا انا بصعبها عليا
لاعمل متغير من نوع integer كدا هاتعب فى نفسى
والحكايه اسهل من انى اعمل له class وكدا ؟
دا اللى فهمته من الشرح اللى قبل الكود مباشره
لو حد عنده كلام تانى ياريت يفيدنا
يمكن فيه وجهه نظر لم اتعرض لها من قبل
سلام عليكم
تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 22 يونيو 2010 في 21:08
لاااااااااااااااااحظ الفرق
فى كودى x عبارة عن reference variables يشير الى object
لكن فى كود حضرتك عامل ال x عبارة عن integer variable
فيه فرق...!!!


اسراء شلبى كتب:لاااااااااااااااااحظ الفرق
فى كودى x عبارة عن reference variables يشير الى object
لكن فى كود حضرتك عامل ال x عبارة عن integer variable
فيه فرق...!!!
دى كللها لااااااااحظ
طيب
هو انا لم اعمل
int x ;
هو مش دا بردوا object من Integer ?
يعنى انا ممكن اعمل كدا
int x = new Integer(10);
ممكن توضحى الفرق ؟
من استخدام الطرريقه دى والطريقه بتاعتى ؟
الهدف الاخير الوصول الى ايه ؟؟؟
وهل فعلا ساعتها فيه فرق؟ ولا لآ؟
معلش تعبتك معايا :ohmy:
تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 22 يونيو 2010 في 21:13
اخووي انا شغاله على RC5 algorithm
المهم ان الفنكشن حقت التشفير بلغه السي شارب كذا
اقتباسprivate void Encode(ref uint r1, ref uint r2, int rounds)
{
r1 = r1 + s[0];
r2 = r2 + s[1];
for (int i = 1; i <= rounds; i++)
{
r1 = leftRotate(r1 ^ r2, (int)r2) + s[2 * i];
r2 = leftRotate(r2 ^ r1, (int)r1) + s[2 * i + 1];
}
}
اي بياخذ الريفرنس حق r1 ,r2
كيف الطريقه بالجافا
الصنف int يعتبر primitive type وليس reference type، وفي المثال، يحاول الحصول على reference type يحتوي على قيمة integer.
لكن توجد ال wrappers لهذا الغرض
int -> java.lang.Integer
float -> java.lang.Float
....
herch كتب:الصنف int يعتبر primitive type وليس reference type، وفي المثال، يحاول الحصول على reference type يحتوي على قيمة integer.
لكن توجد ال wrappers لهذا الغرض
int -> java.lang.Integer
float -> java.lang.Float
....
اخى عصام
مداخله طيبه منك
انا افهم واعرف ما قولته والحمدلله
لكن سوالى الان اريد ان اعرف ما الفرق بين استخدام كود الاخت اسراء
واستخدام الكود تبعى
هل هناك مميزات لكود الاخت اسراء عن كودى ؟
او ايه الفرق ؟
ومتشكر على المداخله والرد
تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 22 يونيو 2010 في 21:20
كودك
int x ; int y ; // after some code // assign my x, y values x = 13 ; y = 42 ;
هنا قمت بعمل متغير له عنوان فى الذاكرة يشير اليه و يحتوى على قيمة معينه
اوكى..؟ من الممكن تغيرها
تعريف ال pointer ::هو عبارة عن متغير خاص special kind of variable و لكن يحتوى على عنوان متغير اخر
كودى:::
IntObj x; x.value = 42;
هنا قمنا بعمل كائن هو فى الحقيقة يكون عبارة reference variables
اوكى..؟
و عنا تنفيذ السطر الاخير هنا يقوم البرنامج بوضع قيمة 42 داخل العنوان الذى يحتويه ال x


اسراء شلبى كتب:كودك
int x ; int y ; // after some code // assign my x, y values x = 13 ; y = 42 ;هنا قمت بعمل متغير له عنوان فى الذاكرة يشير اليه و يحتوى على قيمة معينه
اوكى..؟ من الممكن تغيرها
تعريف ال pointer ::هو عبارة عن متغير خاص special kind of variable و لكن يحتوى على عنوان متغير اخر
كودى:::
IntObj x; x.value = 42;هنا قمنا بعمل كائن هو فى الحقيقة يكون عبارة reference variables
اوكى..؟
و عنا تنفيذ السطر الاخير هنا يقوم البرنامج بوضع قيمة 42 داخل العنوان الذى يحتويه ال x
والله انا فاهم كل كلامك
لكن سوالى ليه استخدم reference variables
ايه الفرق بينه وبين ال primitive variables
فى الحاله هذه ؟
التى هي ان اخزن قيمه صحيحه
ما الفرق فى تلك الحاله فى كلتا الحالتين خزنت قيمه صحيحه ولكن هل هناك من مميزات
او فرق بين الطريقتين ؟
و اسف على الازعاج
ولو محدش فاهم سوالى او انا اقصد ايه
خلاص مفيش مشاكل
herch كتب:الصنف int يعتبر primitive type وليس reference type، وفي المثال، يحاول الحصول على reference type يحتوي على قيمة integer.
لكن توجد ال wrappers لهذا الغرض
int -> java.lang.Integer
float -> java.lang.Float
....
وش هي ال wrappers
اذا هي مش نوع ريفرنس كيف اخلي هال int يحصل عل ريفرنس من خلاال الجافا
اعذرني لكني ضيعفه نوعا ما بالبرمجه
Mahmoud Kelany كتب:والله انا فاهم كل كلامك
لكن سوالى ليه استخدم reference variables
ايه الفرق بينه وبين ال primitive variables
فى الحاله هذه ؟
التى هي ان اخزن قيمه صحيحه
ما الفرق فى تلك الحاله فى كلتا الحالتين خزنت قيمه صحيحه ولكن هل هناك من مميزات
او فرق بين الطريقتين ؟
و اسف على الازعاج
ولو محدش فاهم سوالى او انا اقصد ايه
خلاص مفيش مشاكل
انا متفق معاك تماماً ومش شايف فرق
--
اقتباسلكن سوالى ليه استخدم reference variablesايه الفرق بينه وبين ال primitive variables
فى الحاله هذه ؟
طيب تقدر تقولى حضرتك هتستطيع تغير قيمة المتغير الموجودة فى class اخر ازاى؟؟
و لكن عندما تتعامل مع عنوان المتغير فى الذاكرة تستطيع ذلك بكل سهولة و فى اى مكان
لكن لو قمت بتعريف متغير اى اخر بنفس الاسم فى فئة اخرى الذاكرة لا يهمها الاسم و لكن يهمها العنوان
باستخدام reference variables انت تسطيع تغير قيمة المتغير ذاته التى تريد و راجع درس ال scope
عندما تريد تغير قيمة متغير موجود فى دالة و تريد تغير قيمتة بداخل دالة اخرى مع انهم فى نفس الفئة و لكن ال scope هنا يحكمك كيف تستطيع تغيير القيمة دون الحصول على عنوان المتغير فى الذاكرة
اتمنى تكون الصورة وضحت اخى محمود و اخى مينا


أخ محمود، هدئ أعصابك ![]()
سؤالك على ما يبدو لي هو لماذا سنستعمل الفئة IntObj مثلا بدل int، إذا كنا في الحالتين سنقوم بتخزين نفس القيمة.
الفرق ليس في التخزين، لكن في طريقة تغيير هذه القيمة، خصوصا عند تمريرها إلى method ما.
فكما تعلم، ال primitive types يتم تمريرها by value، أي أنك عندما تمرر متغيرا int إلى method، فلا يمكنك التعديل عليه. لكن بالنسبة لل reference types فالأمر مختلف، حيث يمكنك التعديل، طبعا إذا كان الكائن mutable، أي أنه يسمح لك بالتعديل عليه.
مثال
class IntObj {
private int val;
IntObj(int val) {
this.val = val;
}
public void setVal(int newVal) {
val = newVal;
}
public int getVal() {
return val;
}
}
public class Test {
public static void increment(int x) {
x++;
}
public static void increment2(IntObj x) {
x.setVal(x.getVal()+1);
}
public static void main(String[] args) {
int i = 2;
IntObj iObj = new IntObj(2);
increment(i);
increment2(iObj);
System.out.println("int: " + i); //لم تتغير القيمة
System.out.println("IntObj: " + iObj.getVal()); //هنا تغيرت القيمة
}
}ملاحظة أخرى
بالنسبة للكود الذي كتبته سابقا
int x = new Integer(10);
المتغير x لا يحتوي على object من صنف Integer، بل يحتوي على القيمة 10 نفسها. هذا راجع إلى ال AutoBoxing، حيث يتم التحويل تلقائيا من Integer إلى int.
لذلك فالكود الذي الذي كتبته غير جيد، لأنك تضيف عملا زائدا لل JVM، بينما من الأبسط تمرير القيمة مباشرة
تم تعديل هذه المشاركة بواسطة herch في 22 يونيو 2010 في 21:38
اسراء شلبى كتب:طيب تقدر تقولى حضرتك هتستطيع تغير قيمة المتغير الموجودة فى class اخر ازاى؟؟
و لكن عندما تتعامل مع عنوان المتغير فى الذاكرة تستطيع ذلك بكل سهولة و فى اى مكان
لكن لو قمت بتعريف متغير اى اخر بنفس الاسم فى فئة اخرى الذاكرة لا يهمها الاسم و لكن يهمها العنوان
باستخدام reference variables انت تسطيع تغير قيمة المتغير ذاته التى تريد و راجع درس ال scope
عندما تريد تغير قيمة متغير موجود فى دالة و تريد تغير قيمتة بداخل دالة اخرى مع انهم فى نفس الفئة و لكن ال scope هنا يحكمك كيف تستطيع تغيير القيمة دون الحصول على عنوان المتغير فى الذاكرة
اتمنى تكون الصورة وضحت اخى محمود و اخى مينا
انا لم اتكلم عن الفرق بين
استخدم reference variables
و ال primitive variables
بوجهه عام
انا اتحدث عن الفرق فى استخدامه فى هذه الحاله فقط
ليس بوجهه عام
طب ما اانا ممكن اعمل publice int x ;
واغيره فى اى مكان انا عاوزه ؟ :wacko: :wacko:
انا عارف ان انا كدا زهقتكم معلش
طب خلاص مش مشكله هاحاول افكر فى الموضوع دا كتيرررررررر اوى
ونشوف حل له
مش عاوزين نتعبكم معانا
شكرا على ردك وتفاعلك اختى اسراء
على فكره انتو جلستو تتناااقشو ....في شئ قد يكووون ماله داعي بموضوووعي
طلبت شي معييين وجلس كل واااحد يعرض وجهه نظرررره في مثاااال ..وانا جالسه اتفرج ؟؟
اخ herch اتمنى ترد عل سؤالي
اقتباسعلى فكره انتو جلستو تتناااقشو ....في شئ قد يكووون ماله داعي بموضوووعيطلبت شي معييين وجلس كل واااحد يعرض وجهه نظرررره في مثاااال ..وانا جالسه اتفرج ؟؟
اخ herch اتمنى ترد عل سؤالي
هههههههههههههه
اسفين اختى الكريمة
و لكن اذا فكرتى قليلا
فى المناقشة ستجدى الاجابة على سؤالك :lol:
اقتباسطب ما اانا ممكن اعمل publice int x ;
هل عندما تفعل ذلك تستطيع تغيير القيمة داحل اى فئة..؟ :wacko:


طيب بما ان الاجابه موجووده ..جاوبي
عندي
اقتباسprivate void Encode(ref uint r1, ref uint r2, int rounds)
{
r1 = r1 + s[0];
r2 = r2 + s[1];
for (int i = 1; i <= rounds; i++)
{
r1 = leftRotate(r1 ^ r2, (int)r2) + s[2 * i];
r2 = leftRotate(r2 ^ r1, (int)r1) + s[2 * i + 1];
}
}
كيف احول الريفرنس هنا بلغه السي شاارب
بدون امثله بس عطيني الاجااابه
herch كتب:أخ محمود، هدئ أعصابك
سؤالك على ما يبدو لي هو لماذا سنستعمل الفئة IntObj مثلا بدل int، إذا كنا في الحالتين سنقوم بتخزين نفس القيمة.
الفرق ليس في التخزين، لكن في طريقة تغيير هذه القيمة، خصوصا عند تمريرها إلى method ما.
فكما تعلم، ال primitive types يتم تمريرها by value، أي أنك عندما تمرر متغيرا int إلى method، فلا يمكنك التعديل عليه. لكن بالنسبة لل reference types فالأمر مختلف، حيث يمكنك التعديل، طبعا إذا كان الكائن mutable، أي أنه يسمح لك بالتعديل عليه.
مثال
class IntObj { private int val; IntObj(int val) { this.val = val; } public void setVal(int newVal) { val = newVal; } public int getVal() { return val; } } public class Test { public static void increment(int x) { x++; } public static void increment2(IntObj x) { x.setVal(x.getVal()+1); } public static void main(String[] args) { int i = 2; IntObj iObj = new IntObj(2); increment(i); increment2(iObj); System.out.println("int: " + i); //لم تتغير القيمة System.out.println("IntObj: " + iObj.getVal()); //هنا تغيرت القيمة } }ملاحظة أخرى
بالنسبة للكود الذي كتبته سابقا
int x = new Integer(10);المتغير x لا يحتوي على object من صنف Integer، بل يحتوي على القيمة 10 نفسها. هذا راجع إلى ال AutoBoxing، حيث يتم التحويل تلقائيا من Integer إلى int.
لذلك فالكود الذي الذي كتبته غير جيد، لأنك تضيف عملا زائدا لل JVM، بينما من الأبسط تمرير القيمة مباشرة
اولا هجاوب على الخطا التانى الاول فعلا دا حمل ذائد
ثانيا الكود بتاع حضرتك مقنع والحمدلله
انا كنت بكتب رد تانى على الرد بتاع الاخ عصام لكن وانا برد فهمت والحمدلله القصد من الكود بتاع الاخ عصام
معلش انا دايما كدا مغلب الكل فى كل مكان والله
بس لازم اعرف الفرق والحمدلله الاخ عصام غلبنى هههههه
جزاك الله خيرا
لكن بردوا هذه حاله ممكن ف حالات تانيه مش احتاج مثل هذه اللخبطه
على العموم كفايه كدا
انا ااساسا عندى امتحان OS ويمكن ماثر شويه
معذره عل الازعاج
ومعذره اخت اسراء
تقبلوا مرورى
سلام عليكم