PDA

View Full Version : استفاده از متغیر های بولین (boolean)



Sina.iRoid
یک شنبه 19 مرداد 1393, 12:27 عصر
سلام.
من دارم کد های این سایت (http://codingbat.com/prob/p159227) و می نویسم. تا الان همه رو نوشتم. اما نمی دونم چرا این کدی و که لینکش و گذاشتم درست اجرا نمیشه.
من اصلا متوجه راه حلی که خودش استفاده کرده نمیشم.

من اینطوری می نویسم:


public boolean posNeg(int a, int b, boolean negative) {

if((a < 0 && b > 0) || (a > 0 && b < 0) && negative == false){

return true;
}
if((a < 0 && b < 0) && negative == true){

return true;
}

return false;
}


اگر میشه اشکال همین کدی و که من نوشتم و بگیرین. چون می خوام کد ها دقیقا مثه اون سایت نشه.
ممنون اگر راهنماییم کنید.

محمد فدوی
یک شنبه 19 مرداد 1393, 19:15 عصر
سلام.
توی کد شما یه بی دقتی در مورد عملگر منطقی فصل (OR) وجود داره. توجه داشته باشید که توی عبارت (first || second) وقتی first مقدار منطقی TRUE داشته باشه دیگه ارزش second بررسی نمیشه تا سرعت بالا بره. همینطور در مورد عملگر منطقی عطف (AND) توی عبارت (first && second) وقتی first مقدار منطقی FALSE داشته باشه دیگه second بررسی نمیشه...
حتی اگه بعد از second چندین AND و OR یا XOR دیگه هم باشه بازم بررسی نمیشه!

حالا بریم سراغ کد شما!
من تابع رو بصورت زیر فراخوانی میکنم:

System.out.println(posNeg(-1, 1, true));


و انتظار دارم طبق توضیحات سوال مقدار false توی خروجی ظاهر بشه. اما مقدار true ظاهر میشه! اشکال اینجاست که توی شرط اول بعد از اینکه درستی (a > 0 && b < 0) بررسی میشه که true هست دیگه بقیه ش بررسی نمیشه (طبق توضیحات بالا). برای اینکه کد شما به همین صورت که هست اصلاح بشه باید ۲ تا پرانتز اضافه بشه. به این صورت:


public boolean posNeg(int a, int b, boolean negative) {
if (((a < 0 && b > 0) || (a > 0 && b < 0)) && negative == false) {
return true;
}
if ((a < 0 && b < 0) && negative == true) {
return true;
}


return false;
}


به نظر میاد مشکل همین بوده.
خیلی تابع حساسی نیست و صرفا هم یه تمرینه. ولی به نظرم میتونی خواناتر و زیبا ترم بنویسیش. :چشمک:

موفق باشی.

ahmad.mo74
دوشنبه 20 مرداد 1393, 10:30 صبح
public boolean posNeg(int a, int b, boolean negative) {
if (negative){
return a < 0 && b < 0;
} else {
return (a * b) < 0;
}
}