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

كيف استرجع المتغير الداخلي في الميثود؟

مغلق
بدأه loloo_min في 11 يناير 2008 · 2 رد · 815 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أخواني الأفاضل

أنا أواجه مشكلة في برمجة اللعبة تبعي

< المشكلة إني عندي ميثود داخل كلاس لنقل <ب> وهذه الميثود لنقل <هـ> تحتوي على متغير داخلي < د

<يعني كل ماانادي الميثود<هـ>, تنشيء متغير داخلي جديد<د> للكلاس <ب

<ولكن بما أن المتغير<د> ليس عام في الكلاس<ب> بل داخلي للميثود<هـ

<فإني لاأستطيع الرجوع للمتغير<د> من كلاس اخر <ج

<طبعا في حال انشاء نسخة من الكلاس <ب> في -الكلاس <ج

ولحل هذه المشكلة عرفت متغير <و> للكلاس <ب> والمعرف في الفيلد لذلك الكلاس

<بحيث اني اضفت سطر داخل الميثود <هـ> يحفظ قيمة المتغير الداخلي <د> داخل المتغير <و> في كل مرة ندعو الميثود <هـ

<والحمدلله مشي الحال وسرت اقدر ادخل عالمتغير <د

:بس المشكلة التانية اللي بتواجهني حاليا هي

عندما انادي الميثود<هـ> في الكلاس <ج> لأكثر من مرة

commandAction(Command, Item) فإني أحتاج لان اختبر كل نسخة للمتغير <د> في الميثود

<ولكن للأسف فإن الإختبار يتم بناء على قيمة المتغير<د> الأخيرة فقط ويتم مسح جميع القيم الأخرى للمتغير<د

<أعلم أن ذلك بديهي لأن آخر تخزين لقيمة <د> تم في آخر استدعاء للميثود <هـ

ولكن مشكلتي هي ماالحل؟

شكرا جزيلا للاهتمام واتمام القراءة وأأسف للإطالة ولكن لتوضيح المشكلة بشكل أعمق

هنا نسخة من الاكواد اللي فيها المشكلة

الكلاس Button

addButtonToCenter الذي يحوي الميثود <هـ> والتي هنا

import javax.microedition.lcdui.*;

public class Button implements ItemCommandListener

{

protected StringItem item;

public Button(){

item = new StringItem("", null, Item.BUTTON);

}

public void addButtonToCenter(String name,boolean ln, Form form) {

Command cmmd = new Command(name, Command.ITEM, 1);

StringItem item3 = new StringItem(name, null, Item.BUTTON);

item3.setDefaultCommand(cmmd);

item3.setItemCommandListener(this);

int flags = Item.LAYOUT_2 | Item.LAYOUT_CENTER | Item.LAYOUT_EXPAND;

if (ln) flags |= Item.LAYOUT_NEWLINE_AFTER;

item3.setLayout(item3.getLayout() | flags);

item =item3;

form.append(item);

}

public void commandAction(Command c, Item i)

{

if(item.getLabel().equals("Level 1"))

try

{

Start.level1.displayInfo(Start.level1.form);

/**

Form a = new Form("A");

GameMidlet.display.setCurrent(a);

**/

}

catch(Exception e){

String gripe = "Error:" + e;

Alert a = new Alert("Error",gripe,null,AlertType.ERROR);

GameMidlet.display.setCurrent(a);

}

else{

if(item.getLabel().equals("Level 2"))

try

{

Start.level2.displayInfo(Start.level2.form);

/**

Form a = new Form("A");

GameMidlet.display.setCurrent(a);

**/

}

catch(Exception e){

String gripe = "Error:" + e;

Alert a = new Alert("Error",gripe,null,AlertType.ERROR);

GameMidlet.display.setCurrent(a);

}

}

}

}

Start الكلاس

addButtonToCenter هو اللا بيدعو الميثود <هـ> والتي هنا هي الميثود

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

/**

*

* @author Alla

*/

import javax.microedition.lcdui.*;

public class Start extends GamesScreens

{

protected static Level1 level1;

protected static Level2 level2;

protected static Button button;

protected static StringItem lev1=new StringItem("", null, Item.BUTTON);

protected static StringItem lev2=new StringItem("", null, Item.BUTTON);

public Start()

{

super("Start");

button = new Button();

button.addButtonToCenter("Level 1",false, form);

//lev1 = button.item;

button.addButtonToCenter("Level 2",false, form);

//lev2 = button.item;

level1 = new Level1();

level2 = new Level2();

}

}

يمكن تلاحظو السطرين المحذوفة

//lev1 = button.item;

//lev2 = button.item;

item والتي حاولت فيها حفظ قيمة المتغير <د> والتي هنا

Button داخل المتغير العام lev1 للكلاس <ب> والذي هنا

Level 1ولكنها فشلت فعندما اضغط على الزر Level 1 او الزر Level 2 فكليهما يقودني لللكلاس

شكرا جزيلا وعفوا على الإطالة

في انتظار الردود والمشاركات من الجميع

وجزى الله الجميع خيرا

تم تعديل هذه المشاركة بواسطة loloo_min في 11 يناير 2008 في 17:30

#2

عفوا إذا كانت الاكواد مش واضحة

ان شاء الله تكون دحين اوضح

Buttonعلى فكرة انا حاولت انشيء مثالين من الكلاس

في الكلاس Start

لكن للأسف مااشيغل

ممكن احد يساعدني فس اقرب فرصة لان الوقت بيروح علي وانا مو عارفة اش الحل

شكرا

الكلاس Button

addButtonToCenter الذي يحوي الميثود <هـ> والتي هنا

import javax.microedition.lcdui.*;


public class Button implements ItemCommandListener 
{

protected StringItem item;
public Button(){

item = new StringItem("", null, Item.BUTTON);

}

public void addButtonToCenter(String name,boolean ln, Form form) {
Command cmmd = new Command(name, Command.ITEM, 1);
StringItem item3 = new StringItem(name, null, Item.BUTTON);
item3.setDefaultCommand(cmmd);
item3.setItemCommandListener(this);
int flags = Item.LAYOUT_2 | Item.LAYOUT_CENTER | Item.LAYOUT_EXPAND;
if (ln) flags |= Item.LAYOUT_NEWLINE_AFTER;
item3.setLayout(item3.getLayout() | flags);
item =item3;
form.append(item);
}


public void commandAction(Command c, Item i)
{

if(item.getLabel().equals("Level 1"))
try
{
Start.level1.displayInfo(Start.level1.form);
/**
Form a = new Form("A");
GameMidlet.display.setCurrent(a);
**/
}

catch(Exception e){
String gripe = "Error:" + e;
Alert a = new Alert("Error",gripe,null,AlertType.ERROR);
GameMidlet.display.setCurrent(a);
}

else{
if(item.getLabel().equals("Level 2"))
try
{
Start.level2.displayInfo(Start.level2.form);
/**
Form a = new Form("A");
GameMidlet.display.setCurrent(a);
**/
}

catch(Exception e){
String gripe = "Error:" + e;
Alert a = new Alert("Error",gripe,null,AlertType.ERROR);
GameMidlet.display.setCurrent(a);
}
}


}
}

Start الكلاس

addButtonToCenter هو اللا بيدعو الميثود <هـ> والتي هنا هي الميثود

import javax.microedition.lcdui.*;

public class Start extends GamesScreens 
{
protected static Level1 level1;
protected static Level2 level2;
protected static Button button;
protected static StringItem lev1=new StringItem("", null, Item.BUTTON);
protected static StringItem lev2=new StringItem("", null, Item.BUTTON);
public Start()
{
super("Start");
button = new Button();
button.addButtonToCenter("Level 1",false, form);
//lev1 = button.item;
button.addButtonToCenter("Level 2",false, form);
//lev2 = button.item;
level1 = new Level1();
level2 = new Level2();
}

}

يمكن تلاحظو السطرين المحذوفة

//lev1 = button.item;

//lev2 = button.item;

item والتي حاولت فيها حفظ قيمة المتغير

شكرا جزيلا وعفوا على الإطالة

في انتظار الردود والمشاركات من الجميع في اسرع فرصة رجاءا

وجزى الله الجميع خيرا

#3

السلام عليكم

إخواني خلاص الحمدلله انحلت مشكلتي

المشكلة ماكانت في المتغير الداخلي بل في طريقة تطبيق

commandAction method

عالعموم هادا الحل الصحيح اللي اشتغل معايا للفائدة

وشكراً

public void commandAction(Command c, Item i)
{
try{
		   if (c.getLabel().equals("Level 1"))

	  Start.level1.displayInfo(Start.level1.form); 

		 else if(c.getLabel().equals("Level 2"))

Start.level2.displayInfo(Start.level2.form);
}
catch(Exception e){

String gripe = "Error:" + e;
Alert a = new Alert

("Error",gripe,null,AlertType.ERROR);
GameMidlet.display.setCurrent(a);
}
}

هذا الموضوع مغلق.

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