# فناوری جاوا > برنامه‌نویسی جاوا > Java SE : نگارش استاندارد جاوا >  استفاده از متغیر های بولین (boolean)

## Sina.iRoid

سلام.
من دارم کد های این *سایت* و می نویسم. تا الان همه رو نوشتم. اما نمی دونم چرا این کدی و که لینکش و گذاشتم درست اجرا نمیشه.
من اصلا متوجه راه حلی که خودش استفاده کرده نمیشم.

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


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;
}


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

----------


## محمد فدوی

سلام.
توی کد شما یه بی دقتی در مورد عملگر منطقی فصل (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

public boolean posNeg(int a, int b, boolean negative) {
  if (negative){
  return a < 0 && b < 0;
  } else {
  return (a * b) < 0;
  }
}

----------

