PDA

View Full Version : Return Muitiple Values From Method



pesare
شنبه 10 خرداد 1393, 02:50 صبح
سلام دوستان

من یه تابع دارم که یه سری محاسبات انجام میده و در نهایت دو عدد رو باید پاس بده به خروجی , توی جاوا چطوری این کار انجام میشه؟
تابع من :

public Double MyCalc(double a, double n) {


a=a/2;
double d;
double m;
double l;
double q=0;
double af=0;




if (n <= 100000000)
{
d = n * 0.5 / 100;
af = (d * a / 100);
q = d;
// x1 = af;
return q;
}


اینجا من میخوام مقدار q و x1 رو برگردونم .

poorman
شنبه 10 خرداد 1393, 03:05 صبح
سلام

توی جاوا نمیشه دو یا چند تا مقدار برگشتی داشته باشید

برای انجام اینکار شما باید یک کلاس بسازید و داخلش متغیرهای مورد نظرتون رو تعریف کنید

بعد توی تابع از اون کلاس یک نمونه تعریف کنید و اون متغیرها رو مقدار بدید

و اون کلاس نمونه رو از طریق تابع خودتون برگشت بدید

pesare
شنبه 10 خرداد 1393, 04:47 صبح
سلام

توی جاوا نمیشه دو یا چند تا مقدار برگشتی داشته باشید

برای انجام اینکار شما باید یک کلاس بسازید و داخلش متغیرهای مورد نظرتون رو تعریف کنید

بعد توی تابع از اون کلاس یک نمونه تعریف کنید و اون متغیرها رو مقدار بدید

و اون کلاس نمونه رو از طریق تابع خودتون برگشت بدید


الان با فرمایش شما من این تابع رو چطوری پیاده سازی کنم؟

poorman
شنبه 10 خرداد 1393, 05:48 صبح
شما یک کلاس می سازید داخلش دو تا متغیر دارید، میشه این متغیرهای رو پابلیک بذارید و مقدار بدید، میتونید هم داخل کلاس یک تابع بذارید که اون متغیرها رو مقدار بده

به این صورت

public final class MyResult {
private final double af;
private final double q;

public MyResult(double af, double q) {
this.af = af;
this.q = q;
}

public double get_q() {
return q;
}

public double get_af() {
return af;
}
}

بعدش توی تابع اینطوری عمل میکنید

public static MyResult MyCalc() {
a=a/2;
double d;
double m;
double l;
double q=0;
double af=0;

if (n <= 100000000)
{
d = n * 0.5 / 100;
af = (d * a / 100);
q = d;
}
return new MyResult(af, q);
}

هرجا که تابع رو خواستید صدا بزنید به این صورت عمل میکنید و اطلاعات رو ازش میگیرید

MyResult result = MyCalc();
double af = result.get_af();
double q = result.get_q();


به این روش شما میتونید هر چند تا که خواستید اطلاعات رو برگردونید و این اطلاعات رو میتونید از هر نوعی قرار بدید ( چند داده برگشتی با انواع متفاوت )

البته شاید یک راه ساده تر باشه، اون اینکه شما اگر اطلاعاتتون نوع یکسان دارن، اونا رو به صورت آرایه برگردونید !!!

pesare
شنبه 10 خرداد 1393, 12:06 عصر
شما یک کلاس می سازید داخلش دو تا متغیر دارید، میشه این متغیرهای رو پابلیک بذارید و مقدار بدید، میتونید هم داخل کلاس یک تابع بذارید که اون متغیرها رو مقدار بده

به این صورت

public final class MyResult {
private final double af;
private final double q;

public MyResult(double af, double q) {
this.af = af;
this.q = q;
}

public int get_q() {
return q;
}

public int get_af() {
return af;
}
}

بعدش توی تابع اینطوری عمل میکنید

public static MyResult MyCalc() {
a=a/2;
double d;
double m;
double l;
double q=0;
double af=0;

if (n <= 100000000)
{
d = n * 0.5 / 100;
af = (d * a / 100);
q = d;
}
return new MyResult(af, q);
}

هرجا که تابع رو خواستید صدا بزنید به این صورت عمل میکنید و اطلاعات رو ازش میگیرید

MyResult result = MyCalc();
double af = result.get_af();
double q = result.get_q();


به این روش شما میتونید هر چند تا که خواستید اطلاعات رو برگردونید و این اطلاعات رو میتونید از هر نوعی قرار بدید ( چند داده برگشتی با انواع متفاوت )

البته شاید یک راه ساده تر باشه، اون اینکه شما اگر اطلاعاتتون نوع یکسان دارن، اونا رو به صورت آرایه برگردونید !!!

خطا میده
119728

pesare
شنبه 10 خرداد 1393, 13:58 عصر
دوستان کسی میتونه توی پیاده سازی این تابع در جاوا کمک کنه؟

public Double MyCalc(double a, double n) {


a=a/2;
double d;
double m;
double l;
double q=0;
double af=0;




if (n <= 100000000)
{
d = n * 0.5 / 100;
af = (d * a / 100);
q = d;
// x1 = af;
return q;
}





این تابع دو ورودی a,n رو میگیره ,محاسبات رو انجام میده و q,x1 رو باید به خروجی برگردونه

poorman
شنبه 10 خرداد 1393, 16:54 عصر
شما قبلش کلاس رو ایجاد کردید؟ ذخیره کردید؟

کد کلاس یک خطای کوچیک داشت و اونم نوع خروجی تابع های get_af و get_q بود که باید double باشه نه int ( من تصحیح کردم توی پست اول )

یک کلاس جدید ایجاد کنید و اون کد کلاس رو داخلش کپی و ذخیره کنید، بعدش تابع شما با همین دستوراتی که نوشتید نباید هیچ خطایی داشته باشه

اگر بازم خطا داشت بگید تا از راه دیگه حل کنیم مشکل رو

smemamian
شنبه 10 خرداد 1393, 17:36 عصر
سلام
دو روش ساده :

1 - استفاده از متغیرهای جهانی : که قطعاً با آن آشنایی دارید.

2 - استفاده از آرایه ها :


private int[] myCal(int one,int two){

int[] newcal = new int[2] ;
newcal[0] = one+1 ;
newcal[1] = two+2 ;
return newcal ;
}

و بعد برای دریافت :

int one , two ;
one = 5;
two = 10 ;
int [] mycal = new int[2] ;
mycal = myCal(one, two);

pesare
شنبه 10 خرداد 1393, 18:44 عصر
شما قبلش کلاس رو ایجاد کردید؟ ذخیره کردید؟

کد کلاس یک خطای کوچیک داشت و اونم نوع خروجی تابع های get_af و get_q بود که باید double باشه نه int ( من تصحیح کردم توی پست اول )

یک کلاس جدید ایجاد کنید و اون کد کلاس رو داخلش کپی و ذخیره کنید، بعدش تابع شما با همین دستوراتی که نوشتید نباید هیچ خطایی داشته باشه

اگر بازم خطا داشت بگید تا از راه دیگه حل کنیم مشکل رو

یک کلاس جدید ایجاد کردم , توی اون کلاس متد رو پیاده کردم و این خطا رو داد.

poorman
شنبه 10 خرداد 1393, 18:52 عصر
نه دیگه توی اون کلاس که نباید تابعتون رو مینوشتید، تابع رو توی اکتیویتی باید مینوشتید :|

به هرحال گفتم راه ساده ترش اینه که از آرایه استفاده کنید، که دوست خوبمون مثال هم گذاشتن

pesare
یک شنبه 11 خرداد 1393, 12:13 عصر
نه دیگه توی اون کلاس که نباید تابعتون رو مینوشتید، تابع رو توی اکتیویتی باید مینوشتید :|

به هرحال گفتم راه ساده ترش اینه که از آرایه استفاده کنید، که دوست خوبمون مثال هم گذاشتن

ممنون از راهنماییتون
انجام شد