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

عملية حسابية بسيطة

مغلق
بدأه otherworld في 3 أبريل 2006 · 12 رد · 1,169 مشاهدة · في JavaME
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الأعزاء .. في هذا الموقع الكبير والاكثر من مفيد ....

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

اقتباس
TextField.NUMERIC
.. وقد استخدمت الدالة
اقتباس
getString()
للحصول على النص الموجود في التكست فيلد ولكن المشكلة هي كيف أستطيع أن أحصل على النص بشكل رقمي وليس نصي ....

لذا أرجو ممن يجدون في نفسهم الرغبة في التعاون أن لا يترددوا في الإسراع في الإجابة وسأكون شاكراً ...

أرجو ممن يجد في نفسة الرغبة في المساعدة أن يتواصل معي على هذا الإيميلnath_althoraya@hotmail.com

#2

حول الكلمة إلى رقم!

int x= Integer.parseInt(myString);
#3

هل تريد تشفير الكلمه؟

ام انها ارقام اصلا ؟

Moore’s Law

– “Number of transistors in chips doubles every 18 
months”.
–  Every 10 years, processors are 100 times more 
powerful.

Gilder’s Law

– “Bandwidth grows at least three times faster than 
computer power”.
– Assuming bandwidth doubles every 12 months; 
every 10 years, it is 1000 times better.
#4
حسام الملحم أبومازن كتب:
حول الكلمة إلى رقم!

int x= Integer.parseInt(myString);

الأخ أبو مازن ... أشكرك على المساعدة .. ولكن للأسف البرنامج لم ينفذ بعد ، حيث تظهر لي رسالة خطأ تقول لا يمكن أن يطبق النوع الرقمي على دالة وضع النص

setString(sum)

مع العلم أن المتغير

اقتباس
sum = x1+x2;
هو ناتج جمع الرقمين المأخوذين من التكست فيلد1 والتيكست فيلد2 من الفورم ..

فالمشكلة الان هي كيف يمكن أن اعرض ناتج العملية الحسابية (الجمع) ..

وشكراً مرة اخرى ...

#5
NUCLEAR كتب:
هل تريد تشفير الكلمه؟

ام انها ارقام اصلا ؟

الأخ العزيز

المطلوب هو كيفية عمل عملية حسابية بسيطة ( جمع رقمين ) حيث يتم إخال الأرقام من قبل المستخدم إلى تكست فيلد1 ، و تكست فيلد2 وإظهار الناتج على تكست فيلد آخر ، في الفورم الخاصة بالعملة الحسابية ..

فهل هناك دالة تحول من رقم إلى نص لكي يتم عرض الناتج على التكست فيلد3 أم لا يوجد .

مع العلم بأن الأخ أبومازن جزاه الله خيراً قد أخبرني بكيفية تحويل النص إلى رقم

وشكراً

#6
setString(sum+"")

تم تعديل هذه المشاركة بواسطة حسام الملحم أبومازن في 7 أبريل 2006 في 23:35

#7

الأخ العزيز أبو مازن .. حياكم الله ،،

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

وقد قمت بعمل بناء للمشروع

Build

والحمد لله بإنه تم بنجاح ،، ولكن المشكلة التي جاءت ولم أستطلع أن افهمها هي عندما اردت أن أنفذ البرنامج (ررن) حيث ظهرت رسالة لم أستطع فهمها وهي ..

اقتباس
Exception      java.lang.IllegalArgumentException .

فهل المقصود بإن هناك معاملات لهذه الدالة غير متوافقة أم ماذا ..

أفدنا جزاك الله خير ،،

#8

1- ضع الخطأ كاملا كاملا كاملا.

2- ضع الشفرة كاملة ما أمكن!

أو ضع القطعة التي تحوي الخطأ إذا كنت تعلم!

#9

الأخ العزيز أبو مازن ،، حياكم الله

إليكم الخطأ المذكور سابقاً

Unable to create MIDlet calc

java.lang.IllegalArgumentException

at javax.microedition.lcdui.TextField.setChars(+150)

at javax.microedition.lcdui.TextField.setString(+27)

at javax.microedition.lcdui.TextField.<init>(+134)

at calc.<init>(+87)

at java.lang.Class.runCustomCode(+0)

at com.sun.midp.midlet.MIDletState.createMIDlet(+19)

at com.sun.midp.midlet.Selector.run(+22)

وإليكم الشيفرة كاملة

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class calc extends MIDlet implements CommandListener

{

private Display display;

Command cmdExit= new Command ("Exit", Command.EXIT,0);

Command cmdBack= new Command ("Back", Command.BACK,0);

Command cmdResult= new Command ("RESULT", Command.SCREEN,0);

Form form;

Alert alert;

List mainlist;

TextField text1;

TextField text2;

TextField text3;

public calc()

{

display=Display.getDisplay(this);

mainlist=new List("Calculator",List.IMPLICIT);

text1= new TextField("NO1"," ",10,TextField.NUMERIC);

text2= new TextField("NO2"," ",10,TextField.NUMERIC);

text3= new TextField("NO2"," ",10,TextField.ANY);

}

public void startApp()

{

mainlist.append("SUM",null);

mainlist.append("SUBTRACT",null);

mainlist.setCommandListener(this);

display.setCurrent(mainlist);

}

public void pauseApp(){}

public void destroyApp(boolean unconditional){}

//**********Implement CommandListener .

public void commandAction(Command c , Displayable s)

{

if (s==mainlist)

{

if (c==cmdExit)

{

destroyApp(false);

notifyDestroyed();

}

else if (c==List.SELECT_COMMAND)

if (mainlist.getSelectedIndex()==0)

{

form=new Form("SUMATION");

form.append(text1);

form.append(text2);

form.append(text3);

form.addCommand(cmdResult);

form.addCommand(cmdBack);

form.setCommandListener(this);

int x1=Integer.parseInt(text1.getString());

int x2=Integer.parseInt(text2.getString());

int sum = x1 + x2;

display.setCurrent(form);

if (c==cmdResult)

{

text3.setString(sum+"");

}

}

}

}//end of Command Action.

}//end of Class.

وتقبلوا جزيل الشكر ..

#10

IllegalArgumentException

تعني خطأ في المعطيات!

أنت طلبت صناعة TextField تحوي أرقام فقط:

	text2= new TextField("NO2","",10,TextField.NUMERIC);

يعني لماذا جعلت القيمة الافتراضية هي مسافة فارغة؟ " " هل هذا رقم؟!!

أرجو أنك فهمت المقصود.

بالتوفيق!

#11

الأخ العزيز أبو مازن حياكم الله ،،

أشكرك عل المساعدة الاخيرة والتي نفذتها ، حيث نفذ البرنامج بشكل صحيح .

ولكن للأسف عند اختيار عملية الجمع من القائمة list

ظهر الخطأ التالي :

اقتباس
java.lang.NumberFormatException:

at java.lang.Integer.parseInt(+271)

at java.lang.Integer.parseInt(+6)

at calc.commandAction(+134)

at javax.microedition.lcdui.List.callKeyPressed(+73)

at javax.microedition.lcdui.Display$DisplayAccessor.keyEvent(+198)

at javax.microedition.lcdui.Display$DisplayManagerImpl.keyEvent(+11)

at com.sun.midp.lcdui.DefaultEventHandler.keyEvent(+121)

at com.sun.midp.lcdui.AutomatedEventHandler.keyEvent(+210)

at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+178)

وعند النقر على زر الإختيار مرة أخرى .. أي إختيار الأمر sum .

يظهر الخطأ التالي بعد الخطأ السابق المذكور في الأعلى

اقتباس
java.lang.IllegalStateException

at javax.microedition.lcdui.Form.append(+20)

at calc.commandAction(+69)

at javax.microedition.lcdui.List.callKeyPressed(+73)

at javax.microedition.lcdui.Display$DisplayAccessor.keyEvent(+198)

at javax.microedition.lcdui.Display$DisplayManagerImpl.keyEvent(+11)

at com.sun.midp.lcdui.DefaultEventHandler.keyEvent(+121)

at com.sun.midp.lcdui.AutomatedEventHandler.keyEvent(+210)

at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+178)

وهذه الشيفرة مرة أخرى

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class calc extends MIDlet implements CommandListener
{
 private Display display;
 Command cmdExit= new Command ("Exit", Command.EXIT,0);
 Command cmdBack= new Command ("Back", Command.BACK,0);
 Command cmdResult= new Command ("RESULT", Command.SCREEN,0);

	Form form;
	Alert alert;
	List mainlist;
	TextField text1;
	TextField text2;
	TextField text3;

  public calc()
  {
     display=Display.getDisplay(this);
     mainlist=new List("Calculator",List.IMPLICIT);
     text1= new TextField("NO1","",10,TextField.NUMERIC);
     text2= new TextField("NO2","",10,TextField.NUMERIC);
     text3= new TextField("NO3","",10,TextField.NUMERIC);
  }

  public void startApp()
  {
   mainlist.append("SUM",null);
   mainlist.append("SUBTRACT",null);
   mainlist.setCommandListener(this);
   display.setCurrent(mainlist);
  }

  public void pauseApp(){}
  public void destroyApp(boolean unconditional){}

//**********Implement CommandListener .
public void commandAction(Command c , Displayable s)
{
   if (s==mainlist)
    {
	if (c==cmdExit)
	{
   destroyApp(false);
   notifyDestroyed();
	}
	else if (c==List.SELECT_COMMAND)
	if (mainlist.getSelectedIndex()==0)
   {
    form=new Form("SUMATION");
    form.append(text1);
    form.append(text2);
    form.append(text3);
    form.addCommand(cmdResult);
    form.addCommand(cmdBack);
    form.setCommandListener(this);
    // int sum;

    int x1=Integer.parseInt(text1.getString());
    int x2=Integer.parseInt(text2.getString());
    int sum = x1 + x2;

   display.setCurrent(form);
   if (c==cmdResult)
  { 
    
  text3.setString(sum+"");

  }
	}
    }
}//end of Command Action.
}//end of Class.

وأعتذر مرة أخر لأنه ليس لدي اي خلفية عن هذه اللغة ( J2ME)

وإن كان لديك برنامج مبسط يقوم بجمع رقمين من تيكستان ويضع الناتج في تيكست فيلد آخر أكون ممتن لك إن أرسلته لي ..

وشكراً مرة أخرى .

#12

لم أجرب البرنامج.... لكن الخطأ واضح اقرأه بنفسك!

الخطأ هو java.lang.NumberFormatException:

ويعني خطأ في شكل الرقم! وقد خرج الخطأ من الأمر هذا:

at java.lang.Integer.parseInt(+271)

وقد استعملت هذا الأمر في برنامجك CALC هنا:

at calc.commandAction(+134)

يعني ابحث عن الخطأ في commandAction

ويبدو أنك لا تقرأ رقما،، فربما لا تقرأ شيئا أصلا!!

عموما اطبع القيم قبل تحويلها إلى ألاقام حتى ترى نتائج برنامجك أولا بأول.

System.out.println(textField.getText());

بالتوفيق!

#13

عذراً أخي العزيز أبو مازن ،،

ولكن كيف لي أن أطبع القيم المدخلة قبل أن أحولها ، وأنا أصلاً أنتظر تنفيذ البرنامج كي أستطيع أن أدخ القيم ..

مع العلم أني قد طبقت أمر الطباعة الذي اعطيتني إياه

System.out.println(textField.getString());

مع تغيير بسيط وهو

getString()

لأن النص تيكست يعطيني خطأ ..

ومع هذا كله أحصل على نفس الخطأ ،،

وقد بحثت عنه في الـ

commandAction()

وللأسف لم أفهم أين الخطأ ..

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

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