اذهب إلى المحتوى
  • 0

JavaScript challenge

السؤال

نشر

السلام عليكم ورحمة الله وبركاته التحدي هو كالاتى

 write a javascript program to check two numbers and return true if one of the number is 100 or if the sum of two numbers is 100

ولقد فكرت وكتبت الكود التالى ولكن الكود دائما يرجع قيمة 

true 

???!!!!! ما السبب وكيف يمكن الحل؟؟؟؟؟؟؟؟!!!!!!!!!!

let X = 5;
let Y = 9;
if (X || Y === 100 || Y + X === 100) {
       console.log(true);
    } else {
       console.log(false);
     }

 

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته

المشكلة مرتبطة بطريقة عمل العامل المنطقي " || " في JavaScript لاحظ هذا السطر :

X || Y === 100

أنت لم تطلب من JavaScript أن تتحقق هل X يساوي 100 بل وضعت المتغير X وحده داخل الشرط وأي رقم غير 0 في JavaScript يعتبر قيمة true وهذا السطر يتحقق من قيمة المتغير  X فإذا كانت true سيتم تحقيق الشرط وبالتالي سيرجع الكود قيمة true

لذلك قم بكتابة المقارنة بشكل كامل لكل متغير كالتالي :

let X = 5;
let Y = 9;

if (X === 100 || Y === 100 || X + Y === 100) {
    console.log(true);
} else {
    console.log(false);
}

بهذه الطريقة أصبح الشرط واضحا هل X يساوي 100, أو هل Y يساوي 100, أو هل مجموعهما يساوي 100

بالتوفيق إن شاء الله.

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته .

أنصحك في الشروط المتداخله أن تضع كل شرط منفصل بداخل أقواس وذلك لتسهيل القراءة ولتفادي وإكتشاف الأخطاء بسهولة .

الخطأ لديك هنا :

بتاريخ 4 ساعة قال Yehia Amin2:
X || Y === 100

هنا أنت إستخدمت العامل || مع المتغيرين X و Y وهذا خطأ حيث نتيجة الشرط ستكون 5 وهذا لأن في لغة جافاسكريبت معامل أو المنطقي (||) لا يعيد دائما true أو false بل يعيد أول قيمة يجدها صحيحة منطقيا (Truthy) عند القراءة من اليسار إلى اليمين.

  • فعندما يبدأ جافاسكريبت بتقييم التعبير X || Y === 100، فإنه ينظر أولا إلى X.
  • قيمة X هنا هي 5.
  • في جافاسكريبت أي رقم باستثناء الصفر يعتبر قيمة صحيحة منطقياً (Truthy).
  • بمجرد أن يجد الكود أن X قيمة صحيحة فإنه يتوقف فورا عن قراءة باقي السطر ويعيد القيمة 5 مباشرة ولا يهتم إطلاقا ب Y === 100.

ولهذا فإن الشرط سيكون دائما ب true لأن أول جزء يعيد 5 دائما .

والصحيح هو أننا نريد أن نقيم أن X و Y يساوي كل منها 100 إذا سيكون الشرط كالتالي :

if ( (X === 100) || (Y === 100) || (Y + X === 100) ) {

 

  • 0
نشر

وعليكم السلام ورحمة الله تعالى وبركاته،

الخطأ في هذا الجزء من الشرط:

X || Y === 100

فعندما تكتب X وحده بجانب || فأنت هنا لا تطلب من JavaScript مقارنة X بالرقم 100، بل تضعه كقيمة منطقية مستقلة وبما أن X = 5، وأي رقم غير صفر يعدّ true في JavaScript، فإن الشرط يتحقق فورا ويتوقف عن تقييم باقي الشرط، ولهذا يعود الكود ب true دائما بغض النظر عن القيم ولحل المشكلة يجب كتابة المقارنة كاملة لكل متغير على حدة كالتالي:

let X = 5;
let Y = 9;

if (X === 100 || Y === 100 || X + Y === 100) {
    console.log(true);
} else {
    console.log(false);
}

وهكذا سيتم التحقق من ثلاثة أشياء بشكل صحيح:

  • هل X يساوي 100؟
  • هل Y يساوي 100؟
  • هل مجموع X + Y يساوي 100؟

وبما أن X = 5 و Y = 9، لا يتحقق أي شرط، فسيطبع false كما هو المطلوب.

  • 0
نشر

كما تم التوضيح في التعليقات السابقة فإن المشكلة تكمن في طريقة كتابتك للشرط الأول وطالما أنك تريد اختصار هذه الشروط قليلاً فيمكنك إنشاء قائمة ثم وضع كل الاحتمالات بها ومقارنتها بالرقم 100 كالتالي

let X = 5;
let Y = 9;

if ([X, Y, X + Y].includes(100)) {
    console.log(true);
} else {
    console.log(false);
}

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...