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

كورد بسيط في عمل أله حاسبة

مغلق
بدأه Help Desk في 12 ديسمبر 2007 · 7 رد · 1,638 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف يمكنني عمل حاسبة بحيث يقبل الكتابة في من الكيبورد، أنا عملت كل شيْ ولكن عندي مشكلة في كيفية تحديد العملية المطلوبه. طبعاً الملطوب هي العمليات الأساسية. يجب كتابة الأمر بهذه الطريقة 8+8 أو 5-4 أو 5*5 أو 25/5. المشكلة التي تواجهني هي كيف يمكنني تحديد العملية في المنتصف.

(( سُبْحَانََكَ لاَ عِلْمَ لَنَا إلّا مَا عَلّمْتَنَا إنّكَ أنْتَ الْعَلِيمُ الْحَكِيمُ ))

صدق الله العظيم

Network + certified

CCNA certified

********************************************************************************

#2

الامر بسيط استخدم الداله string.indexOf or string.valueOf

  String s="2+3";
	 System.out.println(s.indexOf("+")

);

#3

يعطيكم العافية جميعاً، أنا خلاص حليت المشكلة ونجحت معاي وهذا هو الكود الي عملته.


String str = read.readLine();
StringTokenizer str1 = new StringTokenizer(str);
num1 = Double.parseDouble(str1.nextToken());
oper = str1.nextToken().charAt(0);
num2 = Double.parseDouble(str1.nextToken());
if(oper=='+')
{
System.out.println("The result is "+(num1+num2));
}
else if(oper=='-')
{
System.out.println("The result is "+(num1-num2));
}
else if(oper=='*')
{
System.out.println("The result is "+(num1*num2));
}
else if(oper=='/')
{
System.out.println("The result is "+(num1/num2));
}
else
{
System.out.println("Unknow Operation");
}
}
   BufferedReader read = new BufferedReader(new InputStreamReader(System.in));

(( سُبْحَانََكَ لاَ عِلْمَ لَنَا إلّا مَا عَلّمْتَنَا إنّكَ أنْتَ الْعَلِيمُ الْحَكِيمُ ))

صدق الله العظيم

Network + certified

CCNA certified

********************************************************************************

#4

اختي الدكتوره ساره كلامك صحيح وهناك اكثر من حل

لكن في حلك فان يتطلب ان العدد يكون 0-9 وهذا شرط قاسي على الاله

#5
dr_sara كتب:
السلام عليكم

اكيد هناك الكثير من الحلول

لكن ما معنى ان حلى يتطلب ان يكون العدد من 0-9

معلش اخ عيسى ممكن توضح هكذا عهدك معنا نتعلم منك دائما ربنا يجزيك خير

بالتوفيق ان شاء الله

أنا بعد أضم صوتي للدكتورة سارة، أحب أعرف توضيح الفكرة .

الشيئ الثاني، أنا عملت الكود مثل ما هو واضح في الرد السابق ولكن أواجه مشكلة عند أداخل أي قيمة String حيث يقوم البرنامج بإستدعاء الـ Exception، أريد أعمل كود يستمع للمدخالات ويعرف نوعها بحيث أعمل له if statement أول ما يكون رقم يدخل العملية وأول ما يكون نص يروح على else. وأنا بأنتظار ردودكم.

(( سُبْحَانََكَ لاَ عِلْمَ لَنَا إلّا مَا عَلّمْتَنَا إنّكَ أنْتَ الْعَلِيمُ الْحَكِيمُ ))

صدق الله العظيم

Network + certified

CCNA certified

********************************************************************************

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

الكود الذي وضعته لن يعمل إلا لو أدخلت المدخلات بالطريقة التالية : الرقم الأول ثم مسافة ثم العملية ثم مسافة ثم الرقم الثاني، أما لو أدخلت المدخلات بدون مسافة فسوف يرمي إكسبشن.

والسبب أن ال StringTokenizer تقسم النص على أساس المسافات (طبعا ما لم تحدد لها)

أرى أن تستخدم ما ذكره الإخوة فوق

#7
dr_sara كتب:
الدالة charAt() f بتعطيها انت الindex يعنى لازم تكون محدد الcharcater بتاع العملية الحسابية فين

فانت تعطيها فى مثلنا الان قيمة الindex مثلا 1 وتعنى تانى حرف فى الstring ماشى هذا صحيح اذا ادخلت الارقام من 0-9

اما اذا ادخلت مثلا 10*31 مثلا فقيمة الindex بتتغير

أنا مستخدم String Tokenizer الي راح يأخذ المدخل الثاني على أساس أنه مدخل جديد وراح يبداء معاه من الـ index صفر وكذاك راح تكون العملية في الموقع الصحيح الي قمت بتحديده. وعلى فكره أنا عندي الحاسبة شغاله مية في المية حتى لو أدخلت 5648*124.

dr_sara كتب:
ثانيا بالنسبة للبرنامج على ما اظن انك مفروض تضع try--catch

راح أجرب أستخدم try-catch وعطيكم النتائج.

prog_omer كتب:
والسبب أن ال StringTokenizer تقسم النص على أساس المسافات (طبعا ما لم تحدد لها)

كيف أستطيع أن أحدد للـ String Tokenizer بعدم أخذ مسافات لتقسم النص، وكيف ستستطيع تحديد المدخلات الثلاثة أذم لم أحدد له خاصية المسافة.

(( سُبْحَانََكَ لاَ عِلْمَ لَنَا إلّا مَا عَلّمْتَنَا إنّكَ أنْتَ الْعَلِيمُ الْحَكِيمُ ))

صدق الله العظيم

Network + certified

CCNA certified

********************************************************************************

#8
Help Desk كتب:
وعلى فكره أنا عندي الحاسبة شغاله مية في المية حتى لو أدخلت 5648*124.

المفترض أنها لا تعمل إذا أدخلتها بالصورة السابقة (أقصد بدون وجود مسافات بيسن المدخلات)

Help Desk كتب:
كيف أستطيع أن أحدد للـ String Tokenizer بعدم أخذ مسافات لتقسم النص، وكيف ستستطيع تحديد المدخلات الثلاثة أذم لم أحدد له خاصية المسافة.

StringTokenizer str1 = new StringTokenizer(str, "-");

السطر السابق معناه قسم الكلام الموجود في المتغير str إلى مجموعة من المقاطع

طيب التقسم سيكون على أي أساس على أساس الشرطة (المدخل الثاني للدالة)

بمعنى لو أدخلت "عمر-محمود-عمران"

سيكون التقسيم إلى ثلاثة مقاطع الأول هو "عمر" والثاني هو "محمود" والثالث هو "عمران"

طيب لو أدخلتله "عمر محمود عمران"

سيكون التقسيم إلى مقطع واحد فقط، وهو "عمر محمود عمران"

طيب لو كتبت الكود التالي:

StringTokenizer str1 = new StringTokenizer(str);

سيعتبر أن المدخل الثاني هو المسافة، وبالتالي سيكون التقسيم إلى مقاطع على أساس المسافة

بمعنى لو أدخلت "2 * 3"

لاحظ وجود المسافات بين المدخلات سيتم التقسيم إلى ثلاثة مقاطع الأول هو الرقم الأول الذي حولته إلى double

والثاني هو العملية والذي حولته إلى حرف

والثالث هو الرقم الثاني والذي حولته إلى double

وبالتالي الكود سيكون شغال بكفاءة ولكن المشكلة مع إدخال التالي

"2*3"

لاحظ عدم وجود المسافات سيتم التقسيم إلى مقطع واحد فقط وهو

"2*3" وستحاول أنت تحويله إلى double

فيحدث الإكسبشن الشهير NumberFormatException

أرجو ان اكون قد أوضحت المسألة

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

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