با سلام من میخوام دو مقدار رو از یک تابع برگردونم اما نمیدونم چه جوری گفتن باید با کلاس بنویسم نوشتم اما باز تو برگردوندن مقادیر موندم به هیچ منبعی هم دسترسی ندارم اگه کسی یه مثال خیلی کوچک برام بنویسه ممنون میشم.من فقط امشب وقت دارم.
با سلام من میخوام دو مقدار رو از یک تابع برگردونم اما نمیدونم چه جوری گفتن باید با کلاس بنویسم نوشتم اما باز تو برگردوندن مقادیر موندم به هیچ منبعی هم دسترسی ندارم اگه کسی یه مثال خیلی کوچک برام بنویسه ممنون میشم.من فقط امشب وقت دارم.
سلام دوست عزیز
میشه بیشتر توضیح بدی که دقیقا میخوایی چه کار کنی؟
من دارم الگوریتم tabu search رو مینویسم برای ماشین های موازی یه قسمت از الگوریتم به صورتیه که تابع تعریف شده دو مقدار رو برمیگردونه یکی بهترین ماشین و دومین بهترین کاری که انتخاب شده برای اینکه جواب مین بشه حالا من نمیدونم جه جوری دو تا return رو توسط یه تابع برگردونم خیلی تلاش کردم اما نتیجه ای نداشت اگه لازمه الگوریتم رو براتون بذارم.با تشکر از شما.
لطفا الگوریتم رو بزارین
سپاس
چندین راه برای اینکار وجود داره :
یک راهش اینه که یک کلاس از دو متغیر بسازی.
مثلا فرض کنید شما میخواهید نقطه ای رو که کاربر کلیک کرده برگردونید که شامل مختصات x و y است.
بهترین راه اینکه که یک کلاس بسازید به نام point که شامل دو خصوصیت x و y است :
class point
{
public int x;
public int y;
}
بعد از این کلاس به عنوان مقدار خروجی تابع استفاده کنید :
public point getMouseLocation(){}
میتوانید از کلمات کلیدی مثل ref و out هم برای گرفتن و ارسال مقدار خروجی استفاده کنید.
مثل :
public void getMouseLocation(ref x,ref y){}
در این روش شما ابتدا متغیرهای x و y رو در کد اصلی میسازید و هنگام فراخوانی تابع به عنوان مقدار ورودی وارد می کنید :
public void main()
{
int x=0;
int y=0;
getMouseLocation(ref x,ref y);
messagebox.show(x.ToString()+","+y.ToString());
}
راه دیگش استفاده از Array هست. مقدار خروجی رو از نوع متغیر آرایه ای از int تعریف کنید و اندیس ها رو به ترتیب برداشت کنید.
راه دیگش استفاده از structure است که خیلی شبیه class است و به دلایل زیادی برتری نسبت به کلاس نداره و بهتره ازش استفاده نکنید.
اینم الگوریتم این قسمت از برنامه
bestnonetabuemove(X,TL)
bestduration=∞
for i=0 to n-1 do
if TL[i]=0 then
for j=1 to m do
X'=X
X'[i]=j
if getduration(X')<bestduration then
bestduration=getduration(X')
bestjob=i
bestmachine=j
end if
end for
edn if
end for
return bestjob,bestmachine
در هنگام فراخوانی این تابع مقادیر برگشتی درون دومتغییر دیگه قرار میگیرن که رو اونهام پردازش داریم.
i,p=bestnontabumove(X,TL)
در ضمن مقادیر برگشتی من از نوع عدد صحیح هستند و تقریبا تمام توابعم مقدار برمیگردونن.
با سلام مجدد
کدتون کامل نیست و نمیشه کامل مقادیرو بررسی کرد اما طبق گفته دوست عزیزم hakim22 میتونین هرجا که قراره متغییری برگشت داده شه اونو به صورت Public تعریف کنید یا اگه مقادیر هر کدوم از متغییرهای برگشتی یکیه به تعداد جدا کنید مثلا اگه عدد بازگشتی 123456789 هست و همیشه 4رفم اول مال یک چیزه و بقیه مال یه چیز دیگه بگین از عدد برگشتی 4 اولو بریزه تو یک متغیر و بقیم بریزه تو یک متغیر دیگه.
موفق باشین
بایت بایت
ممنون از راهنمایی های خوبتون مفید بودن از اینکه برای سوالم وقت گذاشتین متشکرم.
با سلام خدمت دوستان
من يك روش رو ابداع كردم كه بد نيست جواب ميده گفتم براي دوستان هم بذارم(ما همه يه جورايي به اين سايت بدهكاريم)
براي ارسال دو مقدار همراه تابع از يك ليست استرينگ استفاده كردم كه شما بنا به نوع دادتون مي تونيد نوع اون رو تغيير بديد
public static List<string> mandeh_hesab1(string name_sherkat)
}
// برنامه محاسبات تابع رو اينجا مي نويسيد
//برگشت دو مقدار توسط يك تابع
string bedeh_kol = bedeh1.ToString();
string bestan_kol=bes1.ToString();
List<string> outpot = new List<string>();
outpot.Clear();
outpot.Add(bedeh_kol.ToString());
outpot.Add(bestan_kol.ToString());
return outpot ;
{
بعدش براي بكار بردن دو مقدار و استفاده از تابع
List<string> outp = new List <string>();
outp = tavabeh.mandeh_hesab1("رشته مورد نظر");
MessageBox.Show("بده:" + " " + outp[0].ToString() + " " + "طلب:" + outp[1].ToString());
اميدوارم به كارتون بياد
سلام دوست عزیز می تونید از Pair استفاده کنید
https://www.baeldung.com/java-pairs
همچنین میشه برای بازگشت 3 مورد از Triple استفاده کرد .
برای برگشت دادن بیشتر از 1 مقدار میتونید به این صورت عمل کنید
اگر از نسخه سی شارپ 7 به بالا استفاده میکنید کافیه به این صورت تابع رو بسازید
(string, string, string) myFunc(long id)
{
return ("first", "middle", "last");
}
نحوه استفاده هم به این صورت هست:
var names = myFunc(id);
var val1 = names.Item1;
var val2 = names.Item2;
var val3 = names.Item3;