آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

تابع با تعداد آرگمان ورودی دلخواه !

مجتبی یگانه  12 سال پیش  12 سال پیش
+1 0

سلام 

توی سایر زبان ها ، میشد مثلا یه آرگمان تابع رو ننویسی ، اما توی جاوا همون تابع 10 جور syntax داره ، درسته واضح تر میکنه ، اما چطور میشه توی جاوا آرگمان optional (دلخواه ) گرفت ؟

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
مقدسیان  12 سال پیش
0 0

سلام؛
توی #c خیلی خوب راحت تره ولی یه راهش توی جاوا به این شکله

 public class OptArg {
    public static void main(String[] args)
    {
        OptionalArgs("Sum 1 to 3",1 , 2, 3);
        OptionalArgs("Sum");
    }
    private static void OptionalArgs(String sum_s, int... a)
    {
        int sum = 0;
        if (a.length == 0)
        {
            sum = 6; //some optional value
            System.out.println(sum_s + " 1 to 3" + " = " + sum);
        } else {
            for(int i = 0; i < a.length; i++)
            {
                sum += a[i];
            }
            System.out.println(sum_s + " = " + sum);
        }        
    }
}

 روشهای دیگه هم هست. شاید یه روش مشابه #c هم باشه. نمیدونم. ولی این روشی که گفتم برای خودم هم اصلا جذابیت نداره! ترجیح میدم اصلا ازش استفاده نکنم!

0 0
البته این کد رو من روی ویندوز اجرا میکنمآ! ولی سینتکسش فرق نمی کنه (12 سال پیش)
0 0
من نفهمیدم ! ، ولی ممنون که وقت گذاشتی :) (12 سال پیش)
0 0
سادست. اگه دقت کنی من ارگومان دوم تابع رو به شکل Int... a تعریف کردم. و به دو شکل فراخوانی کردم. حالا اگه حالت دوم بود،یعنی متغیرت خالی بود،میتونی مقدار دلخواهت رو جایگزین کنی. یه مزیت دیگه هم که داره اینه که تعداد متغیرهایی که وارد میکنی محدودیت نداره؛ از صفر الی ماشالله! فقط باید درست ازش استفاده کنی. (12 سال پیش)
پاسخ به سوال 
مقدسیان  12 سال پیش
0 0

فرض کن شما یه تابع داری به نام plot که قراره برای شما نمودار بکشه. بنابراین متغیر اول شما یک آرایه از داده های x و متغیر شما یک آرایه از نوع y است. یعنی اگر بنویسی 

plot(x, y)

نمودارش ترسیم میشه؛ کاری نداریم چطوری. حالا فرض کن ضخامت منخنی ترسیم شده 0.1 هست و شما دوست داری ضخامت منحنی ترسیم شده را تغییر بدی. اگر آرگومان سوم رو وارد نکنی، یعنی حالت پیش فرض رو قبول کرد (آپشنال) و اگر وارد کنی باید ضخامت جدید در نظر گرفته بشه.
حالا توی تعریف تابعت میگی اگر متغیر سوم وارد نشد، یعنی مقدارش null بود در نتیجه مقدار پیش فرض یعنی 0.1 درنظر گرفته بشه. اگر هم که وارد شده بود دیگه هیچی دیگه!

plot(x, y, 0.5)

تا این جا مشکل شما حل میشه.
از طرفی این روش این قابلیت رو به تابع شما میده که نه تنها یک متغیر آپشنال، بلکه بیشتر هم تعریف کنی. مثلا 2 تا، 3 تا و....  فقط تا جایی که میدونم باید آخرین آرگومان ورودی باشه؛ وسط تابع نمیشه تعریف کرد.

0 0
یعنی تو شرط چک کنیم null هست یا نه ؟ ، فکر کنم سینتکس خاصی داره ، چون ide ارور میده که 3 تا آرگمان اجباری داره ، ممنون (12 سال پیش)
0 0
یه کد ساده تر دیگه نوشتم و کامنت گذاری کردم. (12 سال پیش)
0 0
خط آخر رو تغییر بده و در کد اندروید خودت استفاده کن. فقط توجه کن که در خط اول پارامتر ورودی دوم به چه شکلی تعریف میشه. من این کد رو توی برنامه ویندوز اجرا میکنم مشکلی نداره؛ قبلی هم همینطور. اکه خطا داد حتما اطلاع بده. (12 سال پیش)
0 0
در این کد تابع دو تا ورودی میگیره که اولی string و دومی int هست. و این دو را کنار هم قرار میده و توی صفحه خروجی نشون میده (خط آخر). اگه ورودی دومی وارد نشه فرض اینه که این مقدار صفره (خط 7) (12 سال پیش)
0 0
مرسی از توضیحات و سورس کد، خیلی خوب بود. (12 سال پیش)
پاسخ به سوال 
مقدسیان  12 سال پیش
0 0

     private static void printNum(String s, int... a){
        int aa; // 'aa' is your target variable; 'a' is temporary.
        // if (a == null) -> Exception will occur
        // if (a[0] == null) -> Exception will occur
        if (a.length == 0) // this means 'a' is null
        {
            // a[0] = 0; -> Exception will occur
            aa = 0;
        } else {
            aa = a[0]; // set 'aa' value using 'a' first element
        }
        System.out.println(s + aa); // this line prints 's+aa' in Java 
            // Output window. Change it and use your code in ANDROID code.
    }
0 0
تشکر و سپاس :) ، استفاده کردم ، (12 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .