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

برنامج لحساب ال Factorial

بدأه mr.beshoy في 2 أكتوبر 2008 · 25 رد · 5,493 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اول مشكلة مقبلانى انى مش عارف اظبط الانترفيس

يعنى مثلا هتلاقو هنا فى الصورة ال button واخد طول الframe كلها و هكذا مه الfield مش عارف ازاى احجمهم

؟؟؟

و ادى لينك فى ال output

http://www.4shared.com/dir/9619176/b854b3b2/sharing.html

اما المشكلة التانية انى مش عارف اظبط أزاى اخد الرقم الى بكتبه فى الfield

و لما اضغط على الزار يروح يتعرض المضروب

و فىبردو مشكلة فى ال مسود المسئولة عن الفكتوريل

شوفوا الكود كده

package TestFactorial;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TestFactorial extends JFrame {

	private JPanel fact_panel,  result_panel,  button_panel,  main_panel;
	private JLabel fact_label,  result_label;
	private JTextField fact_field,  result_field;
	private JButton fact_button;

	public TestFactorial() {
		main_panel = new JPanel(new GridLayout(3, 1));

		fact_panel = new JPanel(new GridLayout(1, 0));
		fact_label = new JLabel("Enter number");
		fact_field = new JTextField(10);

		fact_panel.add(fact_label);
		fact_panel.add(fact_field);

		result_panel = new JPanel(new GridLayout(1, 0));
		result_label = new JLabel("factorial is");
		result_field = new JTextField(10);

		result_panel.add(result_label);
		result_panel.add(result_field);

		button_panel = new JPanel(new BorderLayout());
		fact_button = new JButton("n!");
		fact_button.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				String num = fact_field.getText();
				fact(num);
			}

			private int fact(String num) {
				int n = 0;
				//  fact_field.setText(Integer.toString(n));
				int i = Integer.parseInt(num);
				for (i = n; i <= n; --i) {
					if (i < 1) 
						return 0;
					else 
						return fact(n-1)*fact(n);
				}
			}
	   });
		button_panel.add(fact_button, BorderLayout.CENTER);

		main_panel.add(fact_panel);
		main_panel.add(result_panel);
		main_panel.add(button_panel);

		getContentPane().add(main_panel);

	}

	public static void main(String[] args) {
		JFrame frame = new TestFactorial();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setSize(300, 200);
		frame.setVisible(true);
	}
}
#2

دقائق و لك الحل أنا أكتبه لك :happy:

image-27.gif

concepteur realisateur java j2ee

php5 and asp

#3

أخي أولاً أستخدم flowlayout داخل الgridlayout

ثانياً هذه ميثود قمت بكتابتها من قبل لإخراج المضروب

public long factorial(int in){
	long outf=1;
for(int i=1;i<=in;i++){
outf*=i;}
return outf;
}

مجربة وتعمل جيداً

بالنسبة للثاثة

 fact_button.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				String num = fact_field.getText();
			  result.setText(fact(num));
			}

حيث resultهذه textfield

أرجو ان أكون قد وضحت المطلوب

عذراً فالوقت ضيق

دمتم في رعاية الله

عذراً أخي man4maya

لقد كنا نكتب الرد في نفس الوقت

ولكن كان ردي طويل شوية

تم تعديل هذه المشاركة بواسطة abuoof في 2 أكتوبر 2008 في 19:24

مدونتي

برمجة وما يتبعها

#4

شكرا لردكم جميعا ً

و هجرب حل الأخ abuoof

بس انا عدلت الميسود بتاعتى و مازلت بها أخطاء

السطور التى بها علامة // بها خطا

			private int fact(String num) {
				//int n = 0;
				int i = Integer.parseInt(num);

				for (i = num; i <= num; --i) {
					if (i < 1) 
						return 0;
					else 
						return fact(num-1)*fact(num);
				}
				   fact_field.setText(Integer.parseInt(num));
			}
	   });

سورى فى الرد السابق حصل خطأ غير مقصود و ضغطت انتر من غير تظبيط الرد هنا المسود :

			private int fact(String num) {
				//int n = 0;
				int i = Integer.parseInt(num);

	   //		 for (i = num; i <= num; --i) {
					if (i < 1) 
						return 0;
					else 
				   //	 return fact(num-1)*fact(num);
				}
				  // fact_field.setText(Integer.parseInt(num));
			}
	   });
#5

اليك أخوي الحل أرجو أن أكون ٌد أفدتك

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class TestFactorial  extends JFrame  implements ActionListener{
	private  static JPanel P=new JPanel();
	private  static JButton B=new JButton("Calculer le Factoriel");
	private  static JTextField T=new JTextField(20);
	private  static JLabel L=new JLabel("Le resulta est : ");



public TestFactorial()
{ 
	setTitle("Programe qui permet de calculer le factoriel n! ");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	B.addActionListener(this);
	P.setLayout(new FlowLayout()); 
	P.add(T);
	P.add(B);
	P.add(L);
	add(P);
	pack();
	setVisible(true);


}
	public void actionPerformed(ActionEvent ev)
	{ 
	int Number =Integer.parseInt(T.getText());
	int fact= 1;
	for (int i = 1; i<=Number; i++)
	{
	fact =fact*i;


	}System.out.println (fact);

	} 

	public static void main (String[] args) 
	{

	TestFactorial prog =new TestFactorial();
	prog.setSize(250,300);


	}

}

تم تعديل هذه المشاركة بواسطة man4maya في 2 أكتوبر 2008 في 20:09

image-27.gif

concepteur realisateur java j2ee

php5 and asp

#6

:blink:

est alors vous avez rencontrer un problem ?

image-27.gif

concepteur realisateur java j2ee

php5 and asp

#7

سلام يا شباب

أشكر تعبكم جميعاً

و لكن المكشلة بالكود بتاعى اتحلت و للأمانة العلمية الأخت Jfriend

هى الى ساعدتنى

المهم أدى الكود أهو

package TestFactorial;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class TestFactorial extends JFrame {

	private JPanel fact_panel,  result_panel,  button_panel,  main_panel;
	private JLabel fact_label,  result_label;
	private JTextField fact_field,  result_field;
	private JButton fact_button;

	public TestFactorial() {
		main_panel = new JPanel(new GridLayout(3, 1));

		fact_panel = new JPanel(new GridLayout(1, 0));
		fact_label = new JLabel("Entered value");
		fact_field = new JTextField(10);

		fact_panel.add(fact_label);
		fact_panel.add(fact_field);

		result_panel = new JPanel(new GridLayout(1, 0));
		result_label = new JLabel("solution is (n!)");
		result_field = new JTextField(10);

		result_panel.add(result_label);
		result_panel.add(result_field);


		button_panel = new JPanel(new BorderLayout());
		fact_button = new JButton("n!");
		fact_button.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				int num = Integer.parseInt(fact_field.getText());
				int x = fact(num);
				String y = Integer.toString(x);

				result_field.setText(Integer.toString(x));
			}

			//iterative way
			private int fact(int num) {

//				int r = 1;
//				for (int i = num; i >= 1; --i) {
//					r *= i;
//				}
//				return r;
//				//recursion way
				if (num == 1) {
					return 1;
				} else {

					return num * fact(num - 1);
				}
			}
		});
		button_panel.add(fact_button,
				BorderLayout.CENTER);

		main_panel.add(fact_panel);

		main_panel.add(result_panel);
		main_panel.add(button_panel);

		getContentPane().add(main_panel);

	}

	public static void main(String[] args) {
		JFrame frame = new TestFactorial();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setSize(300, 200);
		frame.setVisible(true);
	}
}

مسيود الفكتوريل مرة مكتوبة بطريقتين الiterative & recusion

و الفرق بينهم ان ال iterative

بتعتمد على حلقة تكرارية مثل for - while ...etc

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

فإذا كان المضروب أقل من ال 1 هنرجع 1

خلاف ذللك الميسود شغالة

و شكرا لكم جميعا ً

#8

على حسب ما أذكر أن مضروب الصفر يساوي صفر

ولا وجود لمضاريب الأعداد السالبة

وهذه الحالات يجب أن تأخذ في الاعتبار

على فكرة أكبر مضروب ستحصل عليه باستخدام المتغير int هو 9

حتى لو استخدمت long فلن تستطيع أن توجد أكثر من مضروب 13

لو أردت مضاريب أكثر

يحب أن تعتمد على الأخ string في تخزين حاصل الضرب

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

شكرا مستر علاء لتنبيهك لى فى هذه النقطة

هجرب أعمل exception للأعداد السالبة

بحيث لما أدخل رقم

سالب يعطينى رسالة error

على فكرة أكبر مضروب ستحصل عليه باستخدام المتغير int هو 9
حتى لو استخدمت long فلن تستطيع أن توجد أكثر من مضروب 13
لو أردت مضاريب أكثر
يحب أن تعتمد على الأخ string في تخزين حاصل الضرب

هجربها و لما اطلع النتيجة هضع الكود

و شكراً جداً

سلام

#10
اقتباس
على حسب ما أذكر أن مضروب الصفر يساوي صفر

مضروب الصفر = 1 ، لا تقلي كيف جبتها ، هي كذا وخلاص :P

روابط اذا كنت غير مقتنع :) :

What is "0!" ?

Why Zero Factorial is Equal to One

بالتوفيق ،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#11

والله بالخطأ

أرجو أن تعذروني

بالمناسبة أستطيع إثباتها أيضاً :lol: :lol:

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#12

سلام يا أخواتى

هنا فى هذا الكود كنت احاول ان افعل كما قال مستر علاء

أن : عندما أضع رغم سالب يحدث exception و يعطينى رسالة خطاً

و لكن عندما أضع رقم سالب يعطينى فى خانة المضروب رقم 1 و لا يعطينىرسالة الخطأ

و هاك الكود هنا :

			   package Factorial;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Factorial extends JFrame {

	private JPanel num_panel,  result_panel,  button_panel,main_panel;
	private JLabel fact_label,  result_label;
	private JTextField fact_field,  result_field;
	private JButton fact_button;
	private int num,result;

	public Factorial() {

		main_panel=new JPanel(new GridLayout(3,1));

		num_panel = new JPanel(new GridLayout(1, 1));
		fact_label = new JLabel("Enter number:");
		fact_field = new JTextField(10);
		num_panel.add(fact_label);
		num_panel.add(fact_field);


		result_panel = new JPanel(new GridLayout(1, 1));
		result_label = new JLabel("number factorial");
		result_field = new JTextField(10);
		result_panel.add(result_label);
		result_panel.add(result_field);

		main_panel.add(num_panel);
		main_panel.add(result_panel);

		button_panel=new JPanel();
		fact_button=new JButton("n!");
		button_panel.add(fact_button);
		fact_button.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				try{
				  num=Integer.parseInt(fact_field.getText());
				  result=fact(num);
				  result_field.setText(String.valueOf(result));
				}
				catch(ArithmeticException arithmeticexception){
					JOptionPane.showMessageDialog(null,"negative numbers have no factorial",
							"Erroe",JOptionPane.ERROR_MESSAGE);
				}
			}

			private int fact(int num) throws ArithmeticException {
				int r=1;
				for(int i=1;i<=num;++i){
					r*=i;
				}
				return r;
			}
		});

		main_panel.add(button_panel,BorderLayout.SOUTH);

		getContentPane().add(main_panel,BorderLayout.CENTER);

		}
	public static void main(String[]args){
		JFrame frame=new Factorial();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		frame.setSize(300,200);
	}
}

منتظر ردكم و أعذرونى إن كانت أسئلتى غبية شوية

شكرا

#13

الـ ArithmeticException يتم عمل Throws له عند القسمه على صفر ، وله أستخدامات قليله جدا ،، وفي مثالك لا أظن أن هناك حاجه له ،، جرب أن تدخل حرف وسيحصل Exception من نوع أخر ، جرب أن تدخل عدد حقيقي وسيحصل Exception أخر ،،

لذلك غيره بـ NumberFormatException وهو يتعامل مع الحالتين السابقتين ،، أيضا الداله fact لن تقوم بعمل throws لـ ArithmeticException لذلك يمكنك حذف السطر throws ArithmeticException .

بالنسبه الى الأعداد السالبه ، فعليك بعمل أجراء لها ، فهي أعداد صحيحه Interger مثلها مثل الأعداد الموجبه ، لذلك لن تجد أي Exception وسيتم أستدعاء الداله بشكل عادي ،

 

[color= #000000; font-weight: bold;]private [color= #000066; font-weight: bold;]int fact[color= #009900;]([color= #000066; font-weight: bold;]int num[color= #009900;]) [color= #009900;]{

                [color= #000066; font-weight: bold;]int r[color= #339933;]=[color= #cc66cc;]1[color= #339933;];

                [color= #000000; font-weight: bold;]for[color= #009900;]([color= #000066; font-weight: bold;]int i[color= #339933;]=[color= #cc66cc;]1[color= #339933;];i[color= #339933;]<=num[color= #339933;];++i[color= #009900;])[color= #009900;]{

                    r[color= #339933;]*=i[color= #339933;];

                [color= #009900;]}

                [color= #000000; font-weight: bold;]return r[color= #339933;];

            [color= #009900;]}

فاذا كان Num = -50 ، سوف تذهب للحلقه وتختبر i<=-50 ، وسوف يكون الشرط false وبالتالي لن ينفذ الحلقه ويرجع قيمه r وهي 1 .. لذلك جميع الأعداد السالبه سوف يرجع لها الناتج 1 .

أسهل حل قبل أن تستدعي الداله بالعدد ، حوله الى موجب اذا كان هو سالب ... وبالتالي تضمن عدم استدعاء الداله بعدد سالب .

if ( number < 0 ) then change it to positive

or you can call Math.abs(number) and you get Absolute value

أو أن تقوم بعمل كلاس يمثل NegativeNumberException بنفسك ،،

بالتوفيق ،

تم تعديل هذه المشاركة بواسطة Wajdy Essam في 11 أكتوبر 2008 في 18:58

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#14

سلام أخ وجدى عصام

انا فهمت ردك كويس

طب دلوقتى ايه العمل لو انا عاوز اظهر رسالة لما يكون العدد سالب

حضرتك بتقول

اسهل حل قبل أن تستدعي الداله بالعدد ، حوله الى موجب اذا كان هو سالب ... وبالتالي تضمن عدم استدعاء الداله بعدد سالب .

if ( number < 0 ) then change it to positive
or you can call Math.abs(number) and you get Absolute value

اوكى بس انا عاوز اظهر رسالة خطا مش احول من سالب لموجب

فكيف اعمل الexception ده

و جارى البحث

و منتظر ردك ايضا

شكرا

#15

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

ده الى عرفت اتوصلوه انى لما ادخل string يروح يدينى رسالة error

و ادى الكود أهو

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class FactorialDemo extends JFrame {

	private JPanel num_panel,  result_panel,  button_panel,  main_panel;
	private JLabel fact_label,  result_label;
	private JTextField fact_field,  result_field;
	private JButton fact_button;
	private int num,  result;
	//private NegativeNumber negativenumber;
	public FactorialDemo() {

		main_panel = new JPanel(new GridLayout(3, 1));

		num_panel = new JPanel(new GridLayout(1, 1));
		fact_label = new JLabel("Enter number:");
		fact_field = new JTextField(10);
		num_panel.add(fact_label);
		num_panel.add(fact_field);


		result_panel = new JPanel(new GridLayout(1, 1));
		result_label = new JLabel("number factorial");
		result_field = new JTextField(10);
		result_panel.add(result_label);
		result_panel.add(result_field);

		main_panel.add(num_panel);
		main_panel.add(result_panel);

		button_panel = new JPanel();
		fact_button = new JButton("n!");
		button_panel.add(fact_button);
		fact_button.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				try {
					num = Integer.parseInt(fact_field.getText());
					result = fact(num);
					result_field.setText(String.valueOf(result));
				} catch (NumberFormatException numberformateexception) {
					JOptionPane.showMessageDialog(null, "Error,This is aString",
							"Erroe", JOptionPane.ERROR_MESSAGE);
				}

			}

			private int fact(int num) {
				int r = 1;
				for (int i = 1; i <= num; ++i) {
					r *= i;
				}
				return r;
			}
		});

		main_panel.add(button_panel, BorderLayout.SOUTH);

		getContentPane().add(main_panel, BorderLayout.CENTER);

	}

	public static void main(String[] args) {
		JFrame frame = new FactorialDemo();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		frame.setSize(300, 200);
	}

}
#16

يمكن أن تستخدم جمل if عاديه لاختبار المتغير ، فقم باختبر العدد اذا كان أقل من 0 فأظهر رساله وأخرج ولا تكمل ..

 public void actionPerformed(ActionEvent e) {
				try {
					num = Integer.parseInt(fact_field.getText());
					if ( num < 0 )
					{
						JOptionPane.showMessageDialog(null,"This is Negative Number !!");
						return;
					}
					result = fact(num);
					result_field.setText(String.valueOf(result));
				} catch (NumberFormatException numberformateexception) {
					JOptionPane.showMessageDialog(null, "Error,This is aString",
							"Erroe", JOptionPane.ERROR_MESSAGE);
				}

			}

أو الحل الأخر بعمل كلاس جديد يرث Exception ، ضعه داخل الكلاس FactorialDemo :

class MyException extends Exception
	{
		int num; 
		public MyException (int n)
		{
			num = n;
		}

		public String toString ()
		{	return num + " is Negative Number"; }
	}

وقم بعمل catch لهذا النوع داخل الأكشن :

public void actionPerformed(ActionEvent e) {
				try {
					num = Integer.parseInt(fact_field.getText());
					result = fact(num);
					result_field.setText(String.valueOf(result));
				} catch (NumberFormatException numberformateexception) {
					JOptionPane.showMessageDialog(null, "Error,This is aString",
							"Erroe", JOptionPane.ERROR_MESSAGE);
				}
				catch (MyException me)
				{	
					JOptionPane.showMessageDialog(null, me,
							"Error", JOptionPane.ERROR_MESSAGE);
				}
			}

وقم بعمل بقبض هذا الException داخل الداله fact :

private int fact(int num) throws MyException{
				if ( num < 0 )
					throw new MyException(num);

				int r = 1;
				for (int i = 1; i <= num; ++i) {
					r *= i;
				}
				return r;
			}

للمزيد قم بالقرائه عن موضوع الـ Exception .

بالتوفيق ،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#17

شكرا جدا جدا افتدنى بجد ربنا يباركك

بس ليا تساؤل

ليه ابتدائاً من رقم 18 فما فوق يدى النتيجة بالسالب

و ارقام زى 100 و 200 ..... 1000

النتيجة 0

هلى عشان المتغير num من نوع int

أم ماذا ؟؟

شكرا جدا أخ وجدى

#18

نعم لأن مدى المتغير من نوع int هو حوالي 2 أس 32 -1 .. حوالى 4 بليون وحاجه :) .. لذلك سوف يحصل هذا الدوران ويدخل العدد بالقيمه السالبه ..

لتلافي ذلك ، يمكنك أستخدام أنواع أكبر مثل Long ، أو BigInteger لو أردت أرقام كبيره جدا (الف خانه ، مليون خانه :) ) ..

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#19

اوكى

طب لما هعمل num من نوع BigInteger

هجى اقول ايه بدل ده

num=Ineger.parseInt(fact_field.getText());
#20

السلام عليكم

new BigInteger(fact_field.getText());

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#21

سلام

طب حضرتك أنا لما غيرت قيمة المتغيريين int &result into BigInteger

فى الكود كله عملت مشاكل و اليك هذه المشاكل التى حدثت ( السطر الذى أمامه // به مشكلة )

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigInteger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class FactorialDemo extends JFrame {

	private JPanel num_panel,  result_panel,  button_panel,  main_panel;
	private JLabel fact_label,  result_label;
	private JTextField fact_field,  result_field;
	private JButton fact_button,clear;
	private BigInteger num;
	private BigInteger result;

	public FactorialDemo() {

		main_panel = new JPanel(new GridLayout(3, 1));

		num_panel = new JPanel(new GridLayout(1, 1));
		fact_label = new JLabel("Enter number:");
		fact_field = new JTextField(10);
		num_panel.add(fact_label);
		num_panel.add(fact_field);


		result_panel = new JPanel(new GridLayout(1, 1));
		result_label = new JLabel("number factorial");
		result_field = new JTextField(10);
		result_panel.add(result_label);
		result_panel.add(result_field);

		main_panel.add(num_panel);
		main_panel.add(result_panel);

		button_panel = new JPanel(new FlowLayout());
		fact_button = new JButton("n!");
		clear=new JButton("clear");
		button_panel.add(fact_button);
		button_panel.add(clear);
		fact_button.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				try {
					num = new BigInteger(result_field.getText());

					result = fact(num);
					result_field.setText(String.valueOf(result));
				} catch (NumberFormatException numberformateexception) {
					JOptionPane.showMessageDialog(null, "Error,This is aString",
							"Erroe", JOptionPane.ERROR_MESSAGE);
				} catch (MyException me) {
					JOptionPane.showMessageDialog(result_panel, me, "Error", JOptionPane.ERROR_MESSAGE);
				}

			}

			private BigInteger fact(BigInteger num) throws MyException {

//				if (num < 0) {
					throw new MyException(num);
				}

//				BigInteger r = 1;
//				for (BigInteger i = 1; i <= num; ++i) {
//					r *= i;
				}
				return r;
			}
		});
		clear.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				fact_field.setText("");
				result_field.setText("");
			}
		});

		main_panel.add(button_panel, BorderLayout.SOUTH);

		getContentPane().add(main_panel, BorderLayout.CENTER);

	}

	public static void main(String[] args) {
		JFrame frame = new FactorialDemo();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
		frame.setSize(300, 200);
	}

	private class MyException extends Exception {

		BigInteger num;

		public MyException(BigInteger n) {
			num = n;
		}

		@Override
		public String toString() {
			return "Math Error" + num + " " + "is negative number";
		}
	}
}
#22

أخ mr.beshoy

هذه فئة وليست متغير أولي

عند التعامل معها يتم التعامل من خلال صانع الكائنات constructor والدوال methods

فكل عملية إنشاء متغير جديد تتم عن طريق new BigInteger

وكل عملي جمع تتم من خلال الدالة add

وهكذا

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#23

مش فاهمك كويس

بس مش لطول ما هجهل الnum من نوع BigInteeger

يبقى لازم اجعل الresult من نوع bigInteger

و قيمة الr =1

فى الMethof fact()

لازم تبقى بردو BigInteger

ياريا توضح شوية معلش استحملنى

شكرا

#24

الكائن BigInteger يحتوي على دوال للجمع والضرب ، يعني لا تستطيع تطبيق المعاملات * , + مع هذا الكائن ...

// Create via a string
	BigInteger bi1 = new BigInteger("1234567890123456890");

	// Create via a long
	BigInteger bi2 = BigInteger.valueOf(123L);

	bi1 = bi1.add(bi2);
	bi1 = bi1.multiply(bi2);
	bi1 = bi1.subtract(bi2);
	bi1 = bi1.divide(bi2);
	bi1 = bi1.negate();
	int exponent = 2;
	bi1 = bi1.pow(exponent);

هذا مثال للعمليات الحسابيه ، وهناك الداله :

 int BigInteger.compareTo(BigInteger val)

تستخدم لعمليه المقارنه ،،يعني راح يكون الشرط كذا :

if ( num1.comapreTo(new BigInteger("0") < 0 )
throws yourException

راجع الDocumentation لكي تتعرف على الدوال ...

بالتوفيق ،،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#25

شكرا اخ علاء و أخ وجدى

فهمت لحد ما موضوع الbigInteger

و هقراه من الjavaDoc

شكرا

بيشوى عاطف

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…