اذهب إلى المحتوى

السؤال

نشر

في لغة جافا لدي كائنين، عرفتهم كالتالي

static Costomers costomer1;
 static Costomers costomer2;

وتم التعامل معهم وكل البرنامج يعمل بشكل صحيح لكن عندما اريد حساب عدد المرات التي يشتري فيها الكوستمر يدمج لي كل الكوستمرز في حسبه واحدة رغم انه المتغير الذي يجمع عدد المرات التي تم الشراء من المتجر لم أعرفه على انه static فما هو السبب ؟ المفترض كل كوستمر  يكون كائن مستقل بالبيانات التابعه له فلماذا يدمج لي؟

Recommended Posts

  • 0
نشر (معدل)
بتاريخ 6 ساعات قال Hassan Hedr:

يرجى إرفاق الشيفرة كاملة ضمن السؤال حتى يتوضح استفسارك ويتم تحديد المشكلة

طيب بسال بطريقة ثانية لانه الكود طويل، مثلا في الmain ادخلت الكوستمرز  كobject  كما يلي:

static Costomers costomer1;=new Costomers("shahad"); 

costomer1.count();

static Costomers costomer2;=new Costomers("reem"); 

costomer2.count();

static Costomers costomer1;=new Costomers("shahad");

اريد البرنامج يحسب لي عدد المرات اللتي يزور بها العميل هذا المتجر. هنا المتفرض يحسب لي العميل شهد مرتين اما ريم فمرة واحدة كيف القيام بهذا الشي؟

 

تم التعديل في بواسطة Hassan Hedr
تنسيق الشيفرة
  • 0
نشر
بتاريخ 5 ساعات قال Shahad Mohammad:

طيب بسال بطريقة ثانية لانه الكود طويل، مثلا في الmain ادخلت الكوستمرز  كobject  كما يلي:


static Costomers costomer1;=new Costomers("shahad"); 

costomer1.count();

static Costomers costomer2;=new Costomers("reem"); 

costomer2.count();

static Costomers costomer1;=new Costomers("shahad");

اريد البرنامج يحسب لي عدد المرات اللتي يزور بها العميل هذا المتجر. هنا المتفرض يحسب لي العميل شهد مرتين اما ريم فمرة واحدة كيف القيام بهذا الشي؟

 

في حال كان المتغير الذي يخزن عدد الزيارات للعميل هو خاصية ضمن الصنف Customer، هذا يعني أن لكل كائن جديد ينشئ باستخدام new عداده الخاص، أي لحساب زيارتين لنفس العميل يجب استدعاء count على نفس الكائن مرتين كالتالي:

Customer shahad = new Customer("shahad"); 

shahad.count(); // أول زيارة لشهد

shahad.count(); // الزيارة الثانية لشهد

Customer reem = new Customer("reem"); 

reem.count(); // أول زيارة لريم

يمكنك الاستفادة من قراءة المقال التالي:

 

  • 0
نشر
بتاريخ 5 ساعات قال Shahad Mohammad:

اريد البرنامج يحسب لي عدد المرات اللتي يزور بها العميل هذا المتجر. هنا المتفرض يحسب لي العميل شهد مرتين اما ريم فمرة واحدة كيف القيام بهذا الشي؟

لديك فاصلة منقوطة بمكان خطأ يمنع تخزين الكائن 

 costomer1;=new
      ^^^^^

 costomer1 = new Costomer()...

يتوجب إضافة كيفية تعريف الصنف Customer

  • 0
نشر (معدل)
بتاريخ 5 ساعات قال Wael Aljamal:

 


هذا الكود عندما يدخل المستخدم يطبع بياناته، الزيارات هي عدد المرات التي اشترى بها الشخصمن المتجر فمن المفترض اول مره يكون صفر ومن ثم يزداد كلما اشترى كماكتبت بالسطر 
    c.setVisits(c.bo++); 

لكن المشكله ان كل المستخدمين يحسب لهم بنفس العداد ولا اعلم السبب 

public void login(Costomers c){


         System.out.println(" ");
      System.out.println("---------------------------------- ");
      System.out.println("thare is a user trying to login");
       System.out.println("---------------------------------- ");
      System.out.println("welcome " +  c.getC_name() );
         if(c.getVisits()<=2){
         System.out.println("( New Costumer ) " +"id: "+ c.getID()+ ", name: "+ c.getC_name() + ", Visits : " +c.getVisits()+" time(s)");  
    }
         else if(c.getVisits()>2) {
          System.out.println("( Spicial Costumer )" +"your id: "+ c.getID()+ ", name : "+ c.getC_name() + ", Visits  : "+c.getVisits()+" time(s)"); 
    }   
           try{
              this.Scn =new Scanner(System.in);
              System.out.println("what the name of product you loking for?");
              this.Product_Name=Scn.next();
            }
          catch(InputMismatchException e){
              System.out.println("catch ");
              System.out.println(e.getMessage() );
            }
          finally{
          }
          
      product_n= this.Product_Name;
      xx=   Get_name(product_n);
      if(xx== null){
           System.out.println("not found");
           Any_Thing_Else();    
      }else{
           System.out.println("the products Avalible:");
           System.out.println("the Data of products :");   
           System.out.println("_____________________________________________________________________");
           System.out.println("");
           System.out.println("ID: " + xx.getID_p() + "    Name of Product: "+ xx.getName() + "      Price: " + xx.getPrice() +" RS");
           System.out.println("_____________________________________________________________________");
           System.out.println("Do you want to buy? (yes,no) ");
           this.y_N=Scn.next();
           if (y_N.equalsIgnoreCase("yes")){
                buy();
            }else if (y_N.equalsIgnoreCase("No")){      
                 System.out.println("do you want any thing else?");
              this.y_N=Scn.next();
            if(y_N.equalsIgnoreCase("No")){
                
                if( total_price==0){
                      System.out.println("thanks for visiting");
                }
                else{
                    System.out.println("whith total price:" + total_price +" RS");
                    total_price=0;
                   
                    System.out.println("thanks for buying");
                     c.setVisits(c.bo++);  
                }
                
            }else if(y_N.equalsIgnoreCase("yes")){
                Is_Exist_byname(); 
            }else{
               doing();
    }
           }         
       }
        
}

 

  •  
بتاريخ الآن قال Shahad Mohammad:
  • بتاريخ 1 دقيقة مضت قال Shahad Mohammad:
    • ارجو النظر للكود الذي ارفقته للتو بالاعلى 

     

    بتاريخ 5 ساعات قال Wael Aljamal:

    لديك فاصلة منقوطة بمكان خطأ يمنع تخزين الكائن 

    
    
     costomer1;=new
          ^^^^^
    
     costomer1 = new Costomer()...

    يتوجب إضافة كيفية تعريف الصنف Customer

     

 

تم التعديل في بواسطة Shahad Mohammad
  • 0
نشر
بتاريخ 11 ساعات قال Shahad Mohammad:
بتاريخ 11 ساعات قال Shahad Mohammad:

ارجو النظر للكود الذي ارفقته للتو بالاعلى 

 

إذا كنت تستخدم هذه الشيفرة في بناء تطبيق ويب فإن كل طلب جديد سينشئ كائنات Customer جديدة بخصائص جديدة تبدأ من الصفر، بحسب إطار العمل الذي تستخدمه الحل يكون بتخزين تلك القيمة ليس كخاصية ضمن الكائن نفسه بل ضمن مخزن دائم (كقاعدة بيانات أو معلومات الجلسة Session) وعند كل طلب تستخرج هذه القيمة إلى الصنف Customer وتضيف عليها وتحدثها ضمن المخزن

  • 0
نشر
بتاريخ 6 ساعات قال Hassan Hedr:

إذا كنت تستخدم هذه الشيفرة في بناء تطبيق ويب فإن كل طلب جديد سينشئ كائنات Customer جديدة بخصائص جديدة تبدأ من الصفر، بحسب إطار العمل الذي تستخدمه الحل يكون بتخزين تلك القيمة ليس كخاصية ضمن الكائن نفسه بل ضمن مخزن دائم (كقاعدة بيانات أو معلومات الجلسة Session) وعند كل طلب تستخرج هذه القيمة إلى الصنف Customer وتضيف عليها وتحدثها ضمن المخزن

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

  • 0
نشر
بتاريخ 1 ساعة قال Shahad Mohammad:

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

في هذه الحالة المشكلة قد تكون من تعريفك للخاصية التي تخزن عدد الزيارات بشكل ثابت static، هذا يعني أن المتغير سيتم مشاركته بين جميع كائنات Customers وليس لكل كائن عداده الخاص، هنا الحل يكون بإزالة الكلمة static لتصبح الخاصية خاصة بكل كائن على حدى بشكل منفصل

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...