الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تتبع مخرجات if

بدأه محمد1991 في 12 نوفمبر 2012 · 8 رد · 1,064 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سؤال

int x=0;

if(x++)

هاد الشرط شو معناته ايمتا بتحقق وايمتا لا ؟؟؟؟

اذا غيرت القيمة الابتائية عن صفر بيصير ناتج الجملة false

#3
mohamed salama كتب:

لا يمكن لهذا الشرط التحقق لانه سوف يعطى compilation error

لا اذا كانت قيمة x=0 يعطي false غير ذلك العكس

انا اريد ان اعرف لماذاااااااااااااا

#4
اقتباس
هاد الشرط شو معناته ايمتا بتحقق وايمتا لا ؟

الشرط if(x++) يحتوي ضمنياً على أمرين يتم تنفيذهما بشكل تتابعي :

if(x != 0)//x = true
x = x + 1//increment the value of x

يتحقق الشرط عندما تختلف قيمة x عن الصفر.

و بعد المقارنة تتم زيادة قيمة x بواحد.

تحياتي.

تم تعديل هذه المشاركة بواسطة Sn@CkeR في 12 نوفمبر 2012 في 18:13

#5
Sn@CkeR كتب:

الشرط if(x++) يحتوي ضمنياً على أمرين يتم تنفيذهما بشكل تتابعي :

if(x != 0)//x = true
x = x + 1//increment the value of x

يتحقق الشرط عندما تختلف قيمة x عن الصفر.

و بعد المقارنة تتم زيادة قيمة x بواحد.

تحياتي.

اخي اريد فقط التحقق من اننا نتكلم عن لغة جافا هنا، واضح ان هذا غير وارد وان لغة جافا تقبل معاملات منطقية فقط في جملة if

مع ذلك قمت بتجربة الكود في نت بينز(على فرض ان هناك قاعده في الJLS لا اعلمه) لكي أتأكد و مع ذلك فإن عملية التجميع تفشل.

وعليه فأنا ارى ان اجابة الاخ محمد سلامه هي الاصح

تحياتي

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#6

مرحبا أخي metnal :)

نعم, إجابتي كانت أقرب لــ C++ من Java.

المثال الذي وضعه الأخ يُكافئ الكود التالي في الجافا :

public class NewClass {
    public static void main(String[] args){
        boolean x = false;
        if(!x)
            System.out.println("x = "+x);
        else
            System.out.println("x = "+x);
    }
}

تحياتي.

#7

المشكلة ليست فى post increment لكن فى انها تحتاج الى معامل منطقى يعطى اما True او False

اذا نفس الشرط يمكن كتابته مع الحفاظ على استخدام ++ بهذه الطريقة

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1;

/**
 *
 * @author Mohamed Fathei
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int x = 0;
        if (x++ > 0) {
            System.out.println("X > 0\n");
            return;
        }

        System.out.println("X <= 0\n");
    }
}


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#8

ما رأيكم فى هذه الدالة isDigit

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1;

/**
 *
 * @author Mohamed Fathei
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        char x = '9';
        if (isDigit(x)) {
            System.out.println("X is digit \n");
        } else {
            System.out.println("X is not digit \n");
        }

    }

    static boolean isDigit(char x) {
        // Note bitwise and (&) instead of logical and (&&)
        return (x >= '0' & x <= '9');
    }
}

هى تستخدم bitwise and داخل ال condition terms ومع ذلك يقبلها المترجم Compiler

أظن أن & دائما تعيد قيمة رقمية وليست بوليانية او منطقية

ثم يحولها المترجم الى منطقية بنفس المبدأ فى لغة ++C

اذا لماذا لا يقبلها مباشرة ؟؟؟؟؟؟؟؟؟


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#9
MOHAMED FATHEI كتب:

ما رأيكم فى هذه الدالة isDigit

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1;

/**
 *
 * @author Mohamed Fathei
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        char x = '9';
        if (isDigit(x)) {
            System.out.println("X is digit \n");
        } else {
            System.out.println("X is not digit \n");
        }

    }

    static boolean isDigit(char x) {
        // Note bitwise and (&) instead of logical and (&&)
        return (x >= '0' & x <= '9');
    }
}

هى تستخدم bitwise and داخل ال condition terms ومع ذلك يقبلها المترجم Compiler

أظن أن & دائما تعيد قيمة رقمية وليست بوليانية او منطقية

ثم يحولها المترجم الى منطقية بنفس المبدأ فى لغة ++C

اذا لماذا لا يقبلها مباشرة ؟؟؟؟؟؟؟؟؟

الداله isDigit يتم عمل evaluation لها ثم تعيد قيمة boolean بينما x++ تعيد قيمه عدديه وهنا يكمن الفرق ، الامر كما لو انك عرفت isDigit لتعيد int فهذه الحاله هل ستعمل؟

المعامل & يتم تفسيره حسب نوع المعاملات ويكون bitwise عندما تقارن قيم integral types . بقية المعلومات في JLS

تحياتي

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

مواضيع مشابهة