الوقت/التاريخ الآن هو الأحد أكتوبر 06, 2024 2:08 am
10 نتيجة بحث عن java
الرسم ثانئى الابعاد فى الجافا باستخدام Graphics2D...مقال 1_مقدمة تمهيدية
أهلا وسهلا بكم اخوانى الكراممن بداية هذا المقال سبأبدء معكم سلسلة مقالات عن الرسم أو الجرافيك فى الجافا وذلك من خلال الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] التى توفرها الحزمة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط].awt , تلك الفئة المجردة التى تحتوى على كافة الاساليب و الطرق التى يحتاجها المطورين فى رسم الأشكال الهندسية البسيطة والنصوص وحتى الصور فى تطبيقات الجافا.
_اساليب فئة الرسومات Graphics
يوفر الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] عدة أساليب لرسم ثلاثة أنواع من الكائنات الرسومية:
- الاسلوب drawString :لرسم النصوص
- الاسلوب drawXxx :لرسم الاشكال الهندسية حيث يمكن أن تكون Xxx خط Line أو Rect أو Oval أو Arc أو 3DRect أو 3DRect ..الخ
- الاسلوب drawImage لرسم الصور النقطية.
كما توفر عدة طرق لملء الأشكال الهندسية :
- الاسلوب fillxxx :لملىء الاشكال الهندسية باللون حيث أن Xxx خط Line أو Rect أو Oval أو Arc أو 3DRect أو 3DRect ..الخ
- الاسلوب setColor :ايضا لطلاء الالوان للشكل
وطرق اخرى لمسح وحذف اجزاء من الرسم على النحو التالى :
- الكود:
// رسم النصوص:
drawString(String str, int xBaselineLeft, int yBaselineLeft);
// رسم الخطوط
drawLine(int x1, int y1, int x2, int y2);
drawPolyline(int[] xPoints, int[] yPoints, int numPoint);
// رسم الاشكال الهندسية
drawRect(int xTopLeft, int yTopLeft, int width, int height);
drawOval(int xTopLeft, int yTopLeft, int width, int height);
drawArc(int xTopLeft, int yTopLeft, int width, int height, int startAngle, int arcAngle);
draw3DRect(int xTopLeft, int, yTopLeft, int width, int height, boolean raised);
drawRoundRect(int xTopLeft, int yTopLeft, int width, int height, int arcWidth, int arcHeight)
drawPolygon(int[] xPoints, int[] yPoints, int numPoint);
// ملىء الاشكال الهندسية
fillRect(int xTopLeft, int yTopLeft, int width, int height);
fillOval(int xTopLeft, int yTopLeft, int width, int height);
fillArc(int xTopLeft, int yTopLeft, int width, int height, int startAngle, int arcAngle);
fill3DRect(int xTopLeft, int, yTopLeft, int width, int height, boolean raised);
fillRoundRect(int xTopLeft, int yTopLeft, int width, int height, int arcWidth, int arcHeight)
fillPolygon(int[] xPoints, int[] yPoints, int numPoint);
// رسم الصور النقطية
drawImage(Image img, int xTopLeft, int yTopLeft, ImageObserver obs); // draw image with its size
drawImage(Image img, int xTopLeft, int yTopLeft, int width, int height, ImageObserver o); // resize image on screen
//مسح المنطقة مستطيلة إلى الخلفية
void clearRect(int x, int y, int width, int height)
//انسخ المنطقة المستطيلة إلى الإزاحة (dx، dy).
void copyArea(int x, int y, int width, int height, int dx, int dy)
و سيتم شرحها فى المقالات القادمة بشىء من التفصيل
أما الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الممتدة من فئة الرسومات [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] لتوفير تحكم أكثر تطوراً في رسم الاشكال الهندسة ، وإدارة الألوان ، وتخطيط النص بشكل أكثر احترافية وهي الفئة الأساسية لتقديم أشكال ثنائية الأبعاد حيث يتيح رسمًا أكثر تعقيدًا ، مثل الخطوط ذات السماكة المتفاوتة ، وملء الأشكال بالألوان والأنماط ، ورسم الخطوط المتقطعة ، والنص المتراكب المتراكب والرسومات ، والتدرجات والملمس ....الخ
وهذه الفئة تحتوي على الطرق الاكثر فاعلية فى للرسم وهي :
- fill3DRect()
- draw3DRect()
- rotate()
- scale()
- shear()
- transform()
- setRenderingHints()
وسيتم تناول كل تلك الطرق فى مقالا لاحقة باذن الله تعالى :
_كيف تتم عملية الرسم
عندما نريد رسم رسوماتنا الخاصة فى تطبيق جافا ، يجب أن نضع شفرة الرسومات الخاصة بنا داخل طريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]...وهذة الطريقة لا نستطيع تغير تسميتها.لان النظام هو الذى يسميها... يتم استدعاء هذه الطريقة عندما يحين وقت الرسم.
- الكود:
public void paint(Graphics g) {
}
يمكنك ملاحظة أن كائن الرسومات [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] هو الوسيطة لهذا الأسلوب. إنه الرسم الفعلي الذي سيتم عرضه. يجب أن نعطيه للنظام.وبداخل هذه الطريقة نقوم بكتابة شفرات الرسم الخاصة بنا ....مثال بسيط لرسم خط :
- الكود:
public void paint(Graphics g) {
g.drawLine(25, 25, 120, 120);
}
الاخراج :
كما تلاحظ قد قمنا بكتابة الشفرات داخل الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] لرسم خط مستقيم.... حيث يستدعي النظام الفرعي للرسم الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] التى تقوم بدروها باستدعاء الطرق الثلاثة التالية:
- paintComponent ()
- paintBorder ()
- paintChildren ()
وذلك ومن أجل تحسين الاداء يجب تجاهل الطريقة paint فى عملية الرسم خصوصا اذا كان الرسم خاص بتطبيقات الجافا سوينج Swing components و نستبدل عوضا عنها الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] وذلك على النحو التالى :
- الكود:
public void paintComponent(Graphics g) {
g.drawLine(25, 25, 120, 120);
}
الاخراج :
المثال بالكامل :
- الكود:
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MainClass extends JPanel {
public void paintComponent(Graphics g) {
g.drawLine(25, 25, 120, 120);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().add(new MainClass());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200,200);
frame.setVisible(true);
}
}
كما تلاحظ اننا قمنا برسم خط مستقيم بسيط لكن لا تستطيع تغير حجم الخط أو نوعه كما فى الصورة التالية وذلك لكوننا لم نستخدم حتى الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] التى تتيح رسمًا أكثر تعقيدًا من الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
لذلك فى المقالات القادمة سيتم التركيز على الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] فى عملية الرسم
- في الإثنين ديسمبر 02, 2019 10:20 pm
- ابحث في: التعامل مع الرسومات Java 2D/3D Graphics
- موضوع: الرسم ثانئى الابعاد فى الجافا باستخدام Graphics2D...مقال 1_مقدمة تمهيدية
- المساهمات: 1
- مشاهدة: 2276
[Java]معالجة الصور فى الجافا ...1_قراءة و كتابة الصور فى الذاكرة
أهلا بكمسأبدء فى عدة مقالات بداية من هذا المقال لمعالجة الصور فى لغة البرمجة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] و أول مقال هو عن كيفية كتابة صورة و تخزينها فى ذاكرة الوصول العشوائي Ram أو قرائتها من الذاكرة و سنحتاج لذلك ما يلى :
1_لقراءة ملف الصورة وكتابته ، يتعين علينا استيراد فئة الملف java.io.File و تمثل هذه الفئة أسماء مسارات الملفات والدلائل بشكل عام بشكل عام.
2_ نستخدم فئة java.io.IOException؛تعامل مع الأخطاء التى قد تظهر لعدم وجود الملف أو الدليل .
3_ نقوم بإنشاء كائن BufferedImage الموجود فى الفئة java.awt.image.BufferedImage . يستخدم هذا الكائن لتخزين الصورة في ذاكرة الوصول العشوائي تخزين موقت
4_لتنفيذ عملية قراءة الصورة ، سنقوم باستيراد الفئة javax.imageio.ImageIO .و التى لديها طرق ثابتة لقراءة وكتابة الصور كما سيتم بيانه عند كتابة الشفرات على النحو التالى :
- الكود:
// إستيراد المكتبات اللازمة لقراءة وكتابة الصور
import java.io.File;
import java.io.IOException;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class MyImage
{
public static void main(String args[])throws IOException
{
//تعين حجم الصورة
int width = 963;
int height = 640;
// إنشاء كائن مخزن مؤقت لتخزين الصورة
BufferedImage image = null;
// قراءة الصورة
try
{
File input_file = new File("G:\\Inp.jpg"); //تحديد مسار الصورة
//إنشاء كائن المخزن المؤقت مع تمرير حجم الصورة كمعلمة و تحديد نوعية TYPE_INT_ARGB وهو يعنى الالوان الاساسية للصورة أخضر و الأحمر والأخضر والأزرق
image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
// بدء عملية القراءة
image = ImageIO.read(input_file);
System.out.println("Reading complete.");
}
catch(IOException e)
{
System.out.println("Error: "+e);
}
// كتابة الصورة
try
{
// تحديد مسار الاخراج مع وضع اسم للصورة
File output_file = new File("G:\\Out.jpg");
// الكتابة إلى ملف أخذ النوع والمسار
ImageIO.write(image, "jpg", output_file);
System.out.println("Writing complete.");
}
catch(IOException e)
{
System.out.println("Error: "+e);
}
}//main() ends here
}//class ends here
- في الجمعة سبتمبر 13, 2019 9:04 pm
- ابحث في: التعامل مع الرسومات Java 2D/3D Graphics
- موضوع: [Java]معالجة الصور فى الجافا ...1_قراءة و كتابة الصور فى الذاكرة
- المساهمات: 0
- مشاهدة: 1577
[Java] الطرق المختلفة لانشاء الكائنات فى الجافا create objects in Java
اهلا بكمكوننا مطورين جافا ، فإننا عادةً ما نتعامل بكثرة مع الكائنات #objects ، لكننا دائمًا ما نستخدم طريقة واحدة لإنشاء هذه الكائنات. ومع ذلك ، هناك المزيد من الطرق لإنشاء الكائنات فى الجافا ، والتي سنحاول دراستها في هذه المقالة.
1_ الطريقة الاولى إستخدام الكلمة new
إنها الطريقة الأكثر شيوعًا فى إنشاء الكائنات وذلك لانها تعتبر اسهل طريقة على الاطلاق لذلك فإن 98% من مطوري الجافا يستخدون هذا الطريقة . حيث من خلال استخدام هذه الطريقة ، يمكننا استدعاء أي دوال الفئة المنشء منها هذا الكائن حتى منشىء تلك الفئة #constructor ...ويتم استخدامها على النحو التالى :
- الكود:
MyObject object = new MyObject();
ايضا يمكنك تمرير معلمات الى منشىء الفئة على النحو التالى :
- الكود:
MyObject object = new MyObject(2,4);
2_الطريقة الثانية باستخدام الدالة Class.forName
إذا كنا نعرف اسم الفئة أو الكلاس التى نريد إنشاء كائن منها وما إذا كان لديها مُنشئ افتراضي عام ، فيمكننا إنشاء كائن جديد باستخدام الاسلوب #newInstance التابع للطريقة #Class.forName ...فمثلا اذا كانت الفئة #MyObject تنتمى الى الحزمة #test فاننا يمكننا انشاء كائن جديد منها على النحو التالى :
- الكود:
MyObject object = (MyObject) Class.forName("test.MyObject").newInstance();
لكن تلك الطريقة فى إنشاء الكائنات ترمى الاستثنائات التالية :
ClassNotFoundException و InstantiationException , IllegalAccessException
لذلك يجب معالجتها على النحو التالى :
- الكود:
try {
MyObject object = (MyObject) Class.forName("test.MyObject").newInstance();
} catch (ClassNotFoundException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
3_الطريقة الثالثة باستخدام الدالة clone()
فى الحقيقة أن هذه الطريقة لا تقوم بانشاء كائن جديد إنما تقوم بإنشاء نسخة من كائن موجود بالفعل و بالتالى فانت مجبر على إنشاء كائن بعد ذلك يمكن باستخدام الدالة #clone نسخ هذا الكائن الى كائن اخر على النحو التالى :
- الكود:
MyObject anotherObject = new MyObject();
MyObject object = anotherObject.clone();
باستخدام أسلوب النسخ أعلاه لا يمكن استدعاء أي مُنشئ للفئة
4_ الطريقة الرابعة باستخدام مرجع الكائن object reference
على الرغم من أن تلك الطريقة لا تقوم بانشاء كائن فى حد ذاته وانما تقوم بانشاء مرجع #reference هو عنوان يشير إلى مكان تخزين متغيرات وأساليب هذا الكائن...وبالتالى تصبح المراجع في #Java مهمة بشكل خاص عند تمرير الوسيطات إلى الأساليب ويتم ذلك على النحو التالى :
- الكود:
MyObject object ;
5_باستخدام إلغاء التسلسل deserialization
- الكود:
ObjectInputStream inStream = new ObjectInputStream(new FileInputStream("data.obj"));
MyObject object = (MyObject) inStream.readObject();
- في السبت فبراير 16, 2019 6:01 pm
- ابحث في: أساسيات اللغة Java Basics
- موضوع: [Java] الطرق المختلفة لانشاء الكائنات فى الجافا create objects in Java
- المساهمات: 0
- مشاهدة: 1313
[Java] الطرق المختلفة لتوليد ارقام عشوائية فى الجافا random number by java
أهلا بكمالرقم العشوائي يعني رقمًا مختلفًا في كل مرة يتم فيها تنفيذ التطبيق وتوفر [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] العديد من الطرق لإنشاء أرقام عشوائية ضمن نطاق معين لذلك فى هذا المقال سوف نتعرف سويا على تلك الطرق و كيفية استخدامها :
الطريقة الاولى : توليد ارقام عشوائية باستخدام الفئة Random
توفر الفئة java.util.Random الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] التي يمكن أن تولد أرقام عشوائية فى نطاق رقم معين. حيث تأخذ هذه الطريقة عددًا صحيحًا كوسيطة. تمثل هذه القيمة الصحيحة الحد الأعلى للرقم العشوائي الذي سيتم إنشاؤه بواسطة هذه الطريقة ,تبدأ تلك الطريقة بتوليد رقم عشوائي من الرقم 0 حتى الحد الاعلى للرقم العشوائي الذى تم تمريرة اليها .
مثال : أكتب برنامج بلغة الجافا لتوليد ارقام عشوائية فى نطاق الرقم 50
الحل : لإنشاء رقم عشوائي بين 1 و 50 ، نقوم بإنشاء كائن من فئة java.util.Random واستدعاء طريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الخاصة به مع 50 كوسيطة. سيؤدي هذا إلى إنشاء رقم بين 0 و 49 لذلك سنقوم باضافة الرقم 1 إلى النتيجة مما سيجعل نطاق القيمة التي تم إنشاؤها من 1 إلى 50...على النحو التالى :
- الكود:
import java.util.Random;
public class test {
public static void main(String[] args) {
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(50) + 1;
System.out.println("Random number generated is : " + randomInt);
}
}
المخرجات :
Random number generated is : 29
مثال : أكتب برنامج بلغة الجافا لتوليد عدد 5 أارقام عشوائية فى نطاق الرقم 50
الحل : فى هذا المثال طلب عدد 5 ارقام عشوائية و ليس رقم واحد كما فى المثال السابق لذلك سوف نستخدم حلقة تكرارية لتنفيذ المطلوب على النحو التالى :
- الكود:
import java.util.Random;
public class test {
public static void main(String[] args) {
Random randomGenerator = new Random();
for(int i = 0; i < 5; i++) {
int randomInt = randomGenerator.nextInt(50) + 1;
System.out.println("Random number generated is : " + randomInt);
}
}
}
المخرجات :
Random number generated is : 20
Random number generated is : 26
Random number generated is : 44
Random number generated is : 7
Random number generated is : 3
الطريقة الثانية : توليد ارقام عشوائية باستخدام الفئة Math
يحتوي الفئة java.lang.Math على الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الذي يولد قيمة عشرية من النوع [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] أكبر من 0.0 وأقل من 1.0 (0.9999) ، اذن النطاق الافتراضي لهذه الطريقة 0.0 حتى 1.0
مثال : أكتب برنامج بلغة الجافا لتوليد عدد 5 أارقام عشوائية
الحل :
- الكود:
public class test {
public static void main(String[] args) {
for(int i = 0; i < 5; i++) {
double randomDouble = Math.random();
System.out.println("Random number generated is : " + randomDouble);
}
}
}
المخرجات :
Random number generated is : 0.5399298565634371
Random number generated is : 0.3914851406177742
Random number generated is : 0.6582928867493553
Random number generated is : 0.02994586334518179
Random number generated is : 0.13342139597089198
وعلى الرغم من ان الطريقة اعلاه لها نطاق محدد لتوليد ارقام عشوائية باستخدامها الا انه يمكنك ضرب القيمة التي يتم إرجاعها بطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] بمقدار الذى تريدة وهذا يجعل نطاقها من 0.0 حتى الرقم الذى وضعته
مثال :أكتب برنامج بلغة الجافا لتوليد عدد 5 أارقام عشوائية فى نطاق الرقم 50 باستخدام Math.random
الحل :من أجل توليد رقم يتراوح بين 1 إلى 50 ، نضرب القيمة التي يتم إرجاعها بطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] بمقدار 50. وهذا يجعل نطاقها من 0.0 إلى 49.995 على النحو التالى :
- الكود:
public class test {
public static void main(String[] args) {
for(int i = 0; i < 5; i++) {
double randomDouble = Math.random()*50;
System.out.println("Random number generated is : " + randomDouble);
}
}
}
المخرجات :
Random number generated is : 36.098268352442915
Random number generated is : 37.77195830913475
Random number generated is : 46.46593180334226
Random number generated is : 3.1068847461841855
Random number generated is : 49.468128176594774
ولكن النتيجة السابقة ليست صحيحة 100% لانه عند ضرب القيمة التي يتم إرجاعها بطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] بمقدار 50. هذا يجعل نطاقها من 0.0 إلى 49.995 و ليس من 0.0 الى 50
و لحل هذه المشكلة نقوم باضافة الرقم 1. هذا يزيد من نطاقه من 1.0 إلى 50.995. إذا تم إرسال هذه النتيجة إلى متغير من نوع [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ، فسيكون النطاق من 1 إلى 50 كما هو ظاهر على النحو التالى :
- الكود:
public class test {
public static void main(String[] args) {
for(int i = 0; i < 5; i++) {
double randomDouble = Math.random()*50+1;
int no =( int )randomDouble;
System.out.println("Random number generated is : " + no);
}
}
}
و المخرجات على النحو التالى :
Random number generated is : 27
Random number generated is : 31
Random number generated is : 49
Random number generated is : 20
Random number generated is : 1
الطريقة الثالثة : توليد ارقام عشوائية باستخدام الفئة ThreadLocalRandom
قامت Java 7 بتوفير فئة جديدة تسمى java.util.concurrent.ThreadLocalRandom . يحتوي هذا الفصل على طرق لإنشاء أرقام عشوائية. هذه الفئة مناسبة لتوليد أرقام عشوائية في بيئات متعددة .
ThreadLocalRandom فئة ThreadLocalRandom على أسلوب [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الذي يأخذ [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] يمثلان قيم الحدود الدنيا والعليا ويقوم بإرجاع عدد صحيح بين هذه القيم. ستكون النتيجة بين الحد الأدنى والحد الأعلى .
مثال : لتوليد رقم بين 1 و 50 ، تكون الحدود الدنيا والعليا التي تم تمريرها إلى هذه الطريقة هي 1 و 51 على التوالي.
- الكود:
import java.util.concurrent.ThreadLocalRandom;
public class test {
public static void main(String[] args) {
for(int i = 0; i < 5; i++) {
int randomInt = ThreadLocalRandom.current().nextInt(1, 51);
System.out.println("Random number generated is : " + randomInt);
}
}
}
المخرجات :
Random number generated is : 20
Random number generated is : 5
Random number generated is : 3
Random number generated is : 26
Random number generated is : 48
- في الإثنين فبراير 04, 2019 2:30 pm
- ابحث في: التعامل مع حزم الجافا java package
- موضوع: [Java] الطرق المختلفة لتوليد ارقام عشوائية فى الجافا random number by java
- المساهمات: 1
- مشاهدة: 3992
حل اسئلة وتمارين بلغة جافا الجزء الثالث
الاخت و الاستاذة الكريمة @زهراء اشكرك والله على مجهودك و نشاطك بالمنتدى فاسمحى لى ان يتم وضعك فى رتبة العضو الشرفى بالمنتدى طالما انك ترفضي الانضمام للادارة.........الاخ الكريم @abushuber اهلا بيك و معذرة فلم استطيع الدخول بالامسالسؤال الثالث : يطلب انشاء برنامج يقوم بتخصيص نقطة ثنائية الأبعاد مع إحداثيات x و y وحساب المسافة من هذه النقطة إلى نقطة أخرى عند الإحداثيات المعينة (x، y)
قبل ان نبدء برمجيا تعال نفهم السؤال رياضيا
يعتبر قانون البعد بين نقطتين أحد قوانين الرياضيات لاحتساب المسافة بين أيّ نقطتين على المستوى الديكارتي، ويُمكن حساب المسافة بين النقطة (س1, ص1) والنقطة (س2, ص2) من خلال الصيغة التالية: المسافة ^2 = (س2 – س1)2 + (ص2 – ص1)2،
وبالتالي فإنّ المسافة تُساوي الجذر التربيعي ل((س2 – س1)2 + (ص2 – ص1))2
source
ويتم حسابها برمجيا باستخدام المعادلة التالية
- الكود:
dis=Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))
- إنشاء فئة باسم Point وانشاء طريقة بها لاحساب المسافة بين نقطتين على النحو التالى مع شرح كل سطر بالكود :
- الكود:
class Point {
//الاعلان عن المتغيرات التى تمثل الاحداثيات س و ص
private int x , y;
//مشيد الفئة من إحداثياتها.
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
// عند تحديدها يدويا(x,y)حساب المسافة من هذه النقطة إلى النقطة المحددة في
public double distance(int x, int y) {
int xDiff = this.x - x;
int yDiff = this.y - y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
// (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
public double distance(Point another) {
int xDiff = this.x - another.x;
int yDiff = this.y - another.y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
}
و لتنفيذة الفئة اعلاه فى الدالة الرئيسية على النحو التالى :
- الكود:
public class Test {
public static void main(String[] args) {
Point p1 = new Point(1, 2);
System.out.printf("Distance is: %.2f%n", p1.distance(10, 11));
}
المخرجات :
Distance is: 12.73
لكن السؤال لم يكتفى بذلك بل طلب فئة باسم #Circle وإنشاء دائرتين و حساب المسافة بينهما....أذن سنحاول فعل ذلك
_ حتى استطيع انشاء دائرة لابد من توافر المعلومات التالية :
1_مركز الدائرة على المستوي الاحداثى (x,y) لذلك سوف نستخدم الفئة اعلاه #point التى تقوم بتعين نقطة على المستوى الاحداثى (x ,y)
2_ نصف قطر الدائرة #Radius لذلك سيتم الاعلان عنه كمتغير
و ذلك على النحو التالى :
_ إنشاء الفئة باسم Circle
- الكود:
class Circle
{
// تعريف متغيرين واحد لتمثيل مركز الدائرة و الاخر لنصف القطر
private Point center;
private int radius;
//منشىء الفئة لانشاء دائرة مع نقطة مركزية معينة ونصف قطرها.
Circle(Point center, int radius) {
this.center = center;
this.radius = radius;
}
// طريقة لحساب المسافة بين مزكر الدائرة مع مركز دائرة اخرى
public double distance(Circle another) {
return center.distance(another.center);
}
}
و يتم استخدام الفئتين السابقتين على النحو التالى :
- الكود:
public class Test {
public static void main(String[] args) {
// تعين مركز الدائرة الاولى بالقيم التى وردت فى السؤال
Point p1 = new Point(2, 4);
// تعين مركز الدائرة الثانية بالقيم بقيم افتراضية غير التى وردت فى السؤال حتى لا تتقاطع الدائرتين
Point p2 = new Point(5, 7);
// إنشاء الدائرة الاولى باستخدام نقطة المركز الاولى و نصف قطر اثنين
Circle c1 = new Circle(p1, 2);
//إنشاء الدائرة الثانية باستخدام نقطة المركز الثانية و نصف قطر اثنين
Circle c2 = new Circle(p2, 2);
//طباعة المسافة بين الدائرتين
System.out.printf("The distance between the two circles is: %.2f%n", c1.distance(c2));
}
}
و المثال بالكامل على النحو التالى :
- الكود:
class Point {
//الاعلان عن المتغيرات التى تمثل الاحداثيات س و ص
private int x , y;
//مشيد الفئة من إحداثياتها.
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
// عند تحديدها يدويا(x,y)حساب المسافة من هذه النقطة إلى النقطة المحددة في
public double distance(int x, int y) {
int xDiff = this.x - x;
int yDiff = this.y - y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
// (another)حساب المسافة من هذه النقطة إلى النقطة المحددة في الكائن .
public double distance(Point another) {
int xDiff = this.x - another.x;
int yDiff = this.y - another.y;
return Math.sqrt(xDiff*xDiff + yDiff*yDiff);
}
}
class Circle
{
// تعريف متغيرين واحد لتمثيل مركز الدائرة و الاخر لنصف القطر
private Point center;
private int radius;
//منشىء الفئة لانشاء دائرة مع نقطة مركزية معينة ونصف قطرها.
Circle(Point center, int radius) {
this.center = center;
this.radius = radius;
}
// طريقة لحساب المسافة بين مزكر الدائرة مع مركز دائرة اخرى
public double distance(Circle another) {
return center.distance(another.center);
}
}
public class Test {
public static void main(String[] args) {
// تعين مركز الدائرة الاولى بالقيم التى وردت فى السؤال
Point p1 = new Point(2, 4);
// تعين مركز الدائرة الثانية بالقيم بقيم افتراضية غير التى وردت فى السؤال حتى لا تتقاطع الدائرتين
Point p2 = new Point(5, 7);
// إنشاء الدائرة الاولى باستخدام نقطة المركز الاولى و نصف قطر اثنين
Circle c1 = new Circle(p1, 2);
//إنشاء الدائرة الثانية باستخدام نقطة المركز الثانية و نصف قطر اثنين
Circle c2 = new Circle(p2, 2);
//طباعة المسافة بين الدائرتين
System.out.printf("The distance between the two circles is: %.2f%n", c1.distance(c2));
}
}
المخرجات :
The distance between the two circles is: 4.24
السؤال الرابع : يطلب انشاء عدد 2 طريقة لطباعة ارقام عشوائية ضمن نطاق الرقم n ثم ايجاد اكبر قيمة بينهما ...اذن سنفعل الاتى :
1_ طريقة باسم #RandomNum لتوليد ارقام عشوائية فى نطاق الرقم n
2_طريقة اخرى باسم #Stornumbers لتخزين الارقام العشوائية التى تم توليدها فى مصفوفة
3_ طباعة قيم المصفوفة
4_ ايجاد اكبر رقم فى المصفوفة
الحل :
توفر لغة #Java العديد من الطرق لإنشاء أرقام عشوائية ضمن نطاق معين لذلك سوف نستخدم طريقة واحدة وهى باستخدام الطريقة #nextInt التابعة للفئة #Random لتي يمكن أن تولد أرقام عشوائية بين 0 وحدود النطاق المحدد n ....وسيكون الرقم العشوائي الذي يتم إنشاؤه بين 0 وقيمة الحد الأعلى n.
حيث تأخذ هذه الطريقة عددًا صحيحًا كوسيطة. تمثل هذه القيمة الصحيحة الحد الأعلى للرقم العشوائي الذي سيتم إنشاؤه بواسطة هذه الطريقة.....و بالتالى لإنشاء رقم عشوائي بين 1 و 50 ، نقوم بإنشاء كائن من فئة #java#.util#.Random واستدعاء طريقة #nextInt الخاصة به مع تمرير الرقم 50 كوسيطة. سيؤدي هذا إلى إنشاء رقم بين 0 و 49 لذلك سنقوم بإضافة 1 إلى النتيجة مما سيجعل نطاق القيمة التي تم إنشاؤها من 1 إلى 50
تعال نترجم ذلك برمجيا
1_إنشاء طريقة لتوليد الارقام العشوائية فى نطاق الرقم n
- الكود:
static int RandomNum1(int n) {
Random rand = new Random();// انشاء كائن جديد
int randomInt;// انشاء متغير لتخزين الرقم العشوائى
randomInt = rand.nextInt(n) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
return randomInt;// ارجاع الارقام العشوائية
}
2_إنشاء مصفوفة و تخزين الارقام العشوائية بها ....لم يحدد السؤال عدد الارقام العشوائية المطلوبة لذلك سنفترض انها 5 ارقام لذلك سوف ننشىء مصفوفة بحجم 5 ارقام
- الكود:
static int[] Stornumbers(){
int[] numbers = new int[5]; // تعين حجم المصفوفة
for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
numbers[i] = (int)(RandomNum1(50));// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
}
// ارجاع قيمة المصفوفة
return numbers;
}
3_ استخدام و تنفيذ الطريقة Stornumbers فى الدالة الرئيسة
- الكود:
public static void main(String[] args) {
int[] printNo = Stornumbers();//انشاء مصفوفة لطباعة محتويات الطريقة
System.out.println("Random number generated is : " + Arrays.toString(printNo));
int max = Arrays.stream(printNo).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
System.out.println("max number is : " + max);
}
و المثال بالكامل على النحو التالى :
- الكود:
import java.util.Arrays;
import java.util.Random;
public class test {
public static void main(String[] args) {
int[] printNo = Stornumbers();//انشاء مصفوفة لطباعة محتويات الطريقة
System.out.println("Random number generated is : " + Arrays.toString(printNo));
int max = Arrays.stream(printNo).max().getAsInt();// الحصول على اكبر قيمة فى المصوفة لطباعتها
System.out.println("max number is : " + max);
}
static int RandomNum1(int n) {
Random rand = new Random();// انشاء كائن جديد
int randomInt;// انشاء متغير لتخزين الرقم العشوائى
randomInt = rand.nextInt(n) + 1;// استخدام الدالة nextint لتوليد رقم عشوانى فى نطاق الرقم n +1
return randomInt;// ارجاع الارقام العشوائية
}
static int[] Stornumbers(){
int[] numbers = new int[5]; // تعين حجم المصفوفة
for(int i = 0; i < numbers.length; i++) {// حلقة تكرارية للحصول على خمسة ارقام تم توليدها عشوائية
numbers[i] = (int)(RandomNum1(50));// استخدام الطريقة RandomNum1 لتوليد الارقام العشوائية
}
// ارجاع قيمة المصفوفة
return numbers;
}
}
المخرجات :
Random number generated is : [19, 37, 50, 26, 25]
max number is : 50
max number is : 50
- في الخميس يناير 31, 2019 1:15 pm
- ابحث في: نقاش و أستفسارات الاعضاء
- موضوع: حل اسئلة وتمارين بلغة جافا الجزء الثالث
- المساهمات: 28
- مشاهدة: 16136
[JavaFx] تعلم JavaFx باستخدام Scene Builder ..مقال 1 _ إعداد بيئة العمل
اهلا بكممن بداية هذا المقال و لعدة مقالات أخرى سنتحدث كيفية إنشاء تطبيقات باستخدام Scene Builder وقبل أن ابدء أحب اشكر العضوة النشطة بالمنتدى الاستاذة لما تقدمة من مقالات تقنية ,فقد قدمت العديد من مقالات [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] التى لا غنى عنها لكل من يريد تعلم تطبيقات تلك المكتبة تلك المقالات كانت تتحدث عن كيفية انشاء عناصر و تطبيقات الجافا إف إكس من كتابة الشفرة و الكود ,لذلك قررت أن أكتب بعض المقالات لانشاء تطبيقات [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] لكن بطريقة رسومية توفير الوقت المستهلك فى كتابة الكود و ذلك من خلال Scene Builder
ما هو Scene Builder
يعتبر Scene Builder أداة تمكنك من تصميم واجهات مستخدم رسومية لتطبيقات#JavaFX بدون بدون أى شفرة أو كود من جانبك .حيث يمكن للمستخدمين سحب وإفلات مكونات واجهة المستخدم إلى منطقة العمل ، وتعديل خصائصها ، وتطبيق الأنماط ، ويتم تلقائيًا إنشاء ملف FXML يمكن دمجه مع مشروع [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] من خلال ربط واجهة المستخدم بالتطبيق.
لذلك يتضمن Scene Builder الميزات الرئيسية التالية:
تسمح لك واجهة السحب والإفلات بإنشاء تخطيط واجهة مستخدم بسرعة دون الحاجة إلى كتابة شفرة المصدر.
يمكنك إضافة عناصر تحكم JavaFX UI ودمجها وتحريرها إلى تخطيطك باستخدام مكتبة عناصر واجهة المستخدم ولوحة المحتوى.
التكامل مع أي بيئة تطوير متكاملة جافا أمر سهل لأنه أداة تطوير مستقلة.
يحدث إنشاء كود FXML التلقائي أثناء إنشاء تخطيط واجهة المستخدم وتعديله.
يتم تخزين كود FXML الذي تم إنشاؤه في ملف منفصل
تتيح لك ميزات التعديل المباشر والمعاينة إمكانية تصور تغييرات تخطيط واجهة المستخدم التي تجريها دون الحاجة إلى الترجمة.
يتيح دعم CSS إدارة مرنة لمظهر وأسلوب واجهة مستخدم التطبيق.
تجهيز بيئة العمل :
لكى تتمكن من إنشاء تطبيقات [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] فى بيئة رسومية يجب عليك تحميل Scene Builder ثم بعد التحميل وفك الضغط يكفيك لتنصيبة اتباع معالج الثبيت بالنقر على زر Next
بعد إنتهاء عملية التثبيت بنجاح يمكن البدء فى استخدام Scene Builder و ذلك من خلال أما النقر نقرًا مزدوجًا فوق ايقونة Scene Builder الموجودة فى سطح المكتب أو من خلال أن تحدد Start ، ثم All Program ، ثم JavaFX Scene Builder ، وأخيرًا ، JavaFX Scene Builder 1.1...ليظهر لك الشاشة الافتتاحية للبرنامج كما فى الشكل التالى :
بشكل افتراضي ، تتضمن النافذة الرئيسية لـ Scene Builder الأقسام الظاهرة فى الصورة اعلاه أهمها :
شريط القوائم Menu Bar : الذى يوفر الوصول إلى قائمة الأوامر المتوفرة في JavaFX Scene Builder....
لوحة المحتوى Content Panel : حاوية المشهد لعناصر واجهة المستخدم التي تشكل مخطط FXML الخاص بك. بشكل افتراضي ، يشتمل ملف FXML جديد يتم فتحه في [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]# Scene# Builder على حاوية AnchorPane (أعلى).
لوحة المكتبة Library Panel : تعرض عناصر أو عناصر التحكم للمكتبة JavaFX UI المتاحة و التى قد شرحتها الاخت زهراء فى مقالات سابقة عن كيفية إنشائها بالشفرة . يمكنك تحديد عناصر واجهة المستخدم من هذه اللوحة وإضافتها إلى لوحة المحتوى عن طريق السحب و الافلات
تحياتى لكم
- في الأربعاء يناير 30, 2019 9:10 am
- ابحث في: تقنية JavaFx
- موضوع: [JavaFx] تعلم JavaFx باستخدام Scene Builder ..مقال 1 _ إعداد بيئة العمل
- المساهمات: 2
- مشاهدة: 2326
حل اسئلة وتمارين بلغة جافا الجزء الثالث
أهلا بيك الاخ الكريم @abushuberعلى عجالة ساحاول أجب على السؤال الاول ولى معك لقاء اخر ان تيسر لى الامر:
a _مطلوب تعريف الاتى :
block of code : أو كتل التعليمات البرمجية بالعربية هو كل تجمع لمجموعة بيانات أو أكثر بين الأقواس المتعرجة {} في لغة الجافا و يمكن أن تكون الكتل متداخلة ويمكن تضمينها داخل كتل أخرى.و يتم استخدام كتلة التعليمات البرمجية في #Java بشكل شائع في عبارات #if و #for و #while.وجميع محتويات الفئات والطبقات هي أيضًا كتل ، على سبيل المثال ، محتوى الفئة أو الطريقة الرئيسية في الأمثلة هي كتل block of code
مثال: يوضح كتلة برمجية فى جملة if
- الكود:
if( x < y ){
x = y;
y = 0;
}
method-signature : بالعربية طريقة التوقع وهى طرق داخل الفئة تحمل نفس الاسم لكن ب حجج أو باراميترات مختلفة parameter مثلها فى ذلك مثل التحميل الزائد للدوال overloading لكن الاختلاف يظهر فى أن method-signature لا تحتوي على محدد وصول و لا هي من الدوال التى تقوم بارجاع قيمة بReturn و بالتالى فتعتبر توقيع الطريقة جزء من الطريقة التي تقوم على اساس التحميل الزائد
object:الكائنات فى الجافا هى مجموعة البيانات والإجراءات التى تم تعريفها و تخزينها بالفئة وكل كائن له حالة أو صفات وسلوك. يتم تخزين حالة الكائن في الحقول (المتغيرات) ، بينما تعرض الأساليب (الدالات) سلوك الكائن.و يتم إنشاء الكائن باستخدام الكلمة الأساسية "new".
b_توضيح بامثلة الفرق بين الاجراء و الطريقة Procedure and method
الإجراء #Procedure والطريقة #method متشابهان للغاية ، لكن الاختلاف الأساسي بينهما هو أن الطريقة تأخذ مجموعة من المدخلات وتقوم بإرجاع قيمة واحدة أو أكثر فى حين أن الإجراء لا يقوم بذلك .....كما أن الطريقة تعتبر جزء أصغر من الإجراء
المثال التوضيحيى :
- الكود:
public class Test {
public static void main(String[] args) {
Test print = new Test();
System.out.println( print.name("ahmed"));
print.displayname();
}
// method
String name( String n ) {
return n ;
}
// Procedure
void displayname( ) {
System.out.println("Man'Na");
}
}
فى المثال اعلاه قمنا بانشاء طريقة باسم name لارجاع قيمة الاسم ومن ثم طباعتها فى الدالة الرئيسة .....و قمنا بانشاء اجراء باسم displayname لاطباعة الاسم الثاني دون ارجاع اى قيمة
- في الأربعاء يناير 30, 2019 7:54 am
- ابحث في: نقاش و أستفسارات الاعضاء
- موضوع: حل اسئلة وتمارين بلغة جافا الجزء الثالث
- المساهمات: 28
- مشاهدة: 16136
[Java] التعامل مع الفئة Java StringBuilder
أهلا بكم_الفئة Java StringBuilder
هى إحدى الفئات التى توفرها لغة الجافا منذ الاصدار JDK 1.5 للتعامل مع مع سلسلة نصية قابلة للتغيير و التعديل بطريقة حيوية من (إلحاق، وإدراج، وحذف وتعديل وغيرها) فهى تشبة الى حد كبير الفئة StringBuffer التى تحدثنا عليها فى مقال سابق وربما يكون الفرق الوحيد بينهما أن الفئة #StringBuilder متزامنة synchronized فى حين أن الفئة #StringBuffer غير متزامنة non-synchronized
_مشيدات الفئة StringBuilder
اهم ثلاث مشيدات الفئة #StringBuilder التى يمكن استخدامها لانشاء و التعامل مع النصوص من خلال تلك الفئة على النحو التالى :
1_المشيد الاول :
- الكود:
StringBuilder()
ينشىء مخزن مؤقت فارغ لسلسلة نصية مع السعة الأولية لـ 16حرف
2_ المشيد الثاني :
- الكود:
StringBuilder(String str)
ينشىء مخزن مؤقت لسلسلة نصية بقيمة السلسة المحددة
3_المشيد الثالث :
- الكود:
StringBuilder(int length)
ينشىء مخزن فارع مؤقت لسلسلة نصية مع السعة المحددة كطول
طرق و دوال الفئة StringBuilder
تحتوي الفئة #StringBuilder على العديد من الطرق و الدوال التى تساعدنا فى التعامل مع سلاسل البيانات من تعديل و تغير و الحاق و خلافة و ذلك على النحو التالى :
1_الطريقة #append
تقوم تلك الطريقة بإلحاق قيمة نصية الى المخزن الموقت #StringBuilder ....مثال : الحاق كلمة #java الى الكلمة #Hello على النحو التالى :
- الكود:
class StringBuilderExample{
public static void main(String args[]){
StringBuilder sb=new StringBuilder("Hello ");
sb.append("Java");
System.out.println(sb);
}
}
المخرجات :
Hello Java
2_ الطريقة #insert
تقوم تلك الطريقة بادراج قيمة نصية للمخزن الموقت StringBuilder#r مع تحديد موضع الادراج ... المثال التالى يوضح كيفية ادراج الكلمة #Java بعد الحرف الاول للقيمة المخزنة فى #StringBuilder :
- الكود:
class StringBuilderExample2{
public static void main(String args[]){
StringBuilder sb=new StringBuilder("Hello ");
sb.insert(1,"Java");
System.out.println(sb);
}
}
المخرجات :
HJavaello
3_الطريقة #replace
تقوم تلك الطريقة باستبدال القيمة النصية بالمخزن #StringBuilder بالقيمة الحالية او المعطاة اليها و يتم ذلك من ذلك تحديد موضع الاستبدال و عدد الاحرف التى سيتم اسبدالها من القيمة #StringBuilder ....المثال التالى يوضح الفكرة :
- الكود:
class StringBuilderExample3{
public static void main(String args[]){
StringBuilder sb=new StringBuilder("Hello");
sb.replace(1,3,"Java");
System.out.println(sb);
}
}
المخرجات :يمكنك ملاحظة أن عملية الاستبدال تمت بعد الحرف الاول وتم استبدال عدد 3 احرف من الكلمة الاصلية #Hello بالكلمة Java
HJavalo
4_الطريقة #delete
تقوم تلك الطريقة بحذف القيمة النصية بالمخزن #StringBuilder و يمكن تحديد موضع عملية الحذف وايضا عدد ما يتم حذفة ...المثال التالى يوضح الفكرة :
- الكود:
class StringBuilderExample4{
public static void main(String args[]){
StringBuilder sb=new StringBuilder("Hello");
sb.delete(1,3);
System.out.println(sb);
}
}
المخرجات :
Ho
5_ الطريقة #reverse
تقوم تلك الطريقة بعكس السلسة النصية الحالية المخزنة فى #StringBuilder ....مثال يوضح الفكرة
- الكود:
class StringBuilderExample5{
public static void main(String args[]){
StringBuilder sb=new StringBuilder("Hello");
sb.reverse();
System.out.println(sb);//prints olleH
}
}
المخرجات :
olleH
6_ الطريقة #capacity
تقوم تلك الطريقة بارجاع سعة المخزن #StringBuilder ...مثال توضيحيى :
- الكود:
class StringBuilderExample6{
public static void main(String args[]){
StringBuilder sb=new StringBuilder();
System.out.println(sb.capacity());//default 16
sb.append("Hello");
System.out.println(sb.capacity());//now 16
sb.append("java is my favourite language");
System.out.println(sb.capacity());//now (16*2)+2=34 i.e (oldcapacity*2)+2
}
}
المخرجات :
16
16
34
7_ الطريقة #ensureCapacity
تضمن طريقة #ensureCapacity أن السعة المحددة هي الحد الأدنى للسعة الحالية. أما إذا كان أكبر من السعة الحالية ، فإنه يزيد السعة بواسطة (oldcapacity * 2) +2. على سبيل المثال ، إذا كانت سعتك الحالية 16 ، فسوف تكون (16 * 2) + 2 = 34.
- الكود:
class StringBuilderExample7{
public static void main(String args[]){
StringBuilder sb=new StringBuilder();
System.out.println(sb.capacity());//default 16
sb.append("Hello");
System.out.println(sb.capacity());//now 16
sb.append("java is my favourite language");
System.out.println(sb.capacity());//now (16*2)+2=34 i.e (oldcapacity*2)+2
sb.ensureCapacity(10);//now no change
System.out.println(sb.capacity());//now 34
sb.ensureCapacity(50);//now (34*2)+2
System.out.println(sb.capacity());//now 70
}
}
تحياتى لك
- في الخميس يناير 24, 2019 8:21 am
- ابحث في: أساسيات اللغة Java Basics
- موضوع: [Java] التعامل مع الفئة Java StringBuilder
- المساهمات: 1
- مشاهدة: 1106
[Java] التعامل مع الفئة Java StringBuffer
أهلا بكم_الفئة Java StringBuffer
هى إحدى الفئات التى توفرها لغة الجافا للتعامل مع النصوص تشبة الى حد كبير الفئة #string إلا أن الفئة #StringBuffer تسخدم لإنشاء و التعامل مع سلسلة نصية قابلة للتغيير و التعديل بطريقة حيوية من (إلحاق، وإدراج، وحذف وتعديل وغيرها)
_مشيدات الفئة StringBuffer
اهم ثلاث مشيدات الفئة #StringBuffer التى يمكن استخدامها لانشاء و التعامل مع النصوص من خلال تلك الفئة على النحو التالى :
1_المشيد الاول :
- الكود:
StringBuffer()
ينشىء مخزن مؤقت فارغ لسلسلة نصية مع السعة الأولية لـ 16حرف
2_ المشيد الثاني :
- الكود:
StringBuffer(String str)
ينشىء مخزن مؤقت لسلسلة نصية بقيمة السلسة المحددة
3_المشيد الثالث :
- الكود:
StringBuffer(int capacity)
ينشىء مخزن فارع مؤقت لسلسلة نصية مع السعة المحددة كطول
طرق و دوال الفئة StringBuffer
تحتوي الفئة #StringBuffer على العديد من الطرق و الدوال التى تساعدنا فى التعامل مع سلاسل البيانات من تعديل و تغير و الحاق و خلافة و ذلك على النحو التالى :
1_الطريقة #append
تقوم تلك الطريقة بإلحاق قيمة نصية الى المخزن الموقت #StringBuffer ....مثال : الحاق كلمة #java الى الكلمة #Hello على النحو التالى :
- الكود:
class StringBufferExample{
public static void main(String args[]){
StringBuffer sb=new StringBuffer("Hello ");
sb.append("Java");
System.out.println(sb);
}
}
المخرجات :
Hello Java
2_ الطريقة #insert
تقوم تلك الطريقة بادراج قيمة نصية للمخزن الموقت StringBuffe#r مع تحديد موضع الادراج ... المثال التالى يوضح كيفية ادراج الكلمة #Java بعد الحرف الاول للقيمة المخزنة فى #StringBuffer :
- الكود:
class StringBufferExample2{
public static void main(String args[]){
StringBuffer sb=new StringBuffer("Hello ");
sb.insert(1,"Java");
System.out.println(sb);
}
}
المخرجات :
HJavaello
3_الطريقة #replace
تقوم تلك الطريقة باستبدال القيمة النصية بالمخزن #StringBuffer بالقيمة الحالية او المعطاة اليها و يتم ذلك من ذلك تحديد موضع الاستبدال و عدد الاحرف التى سيتم اسبدالها من القيمة #StringBuffer ....المثال التالى يوضح الفكرة :
- الكود:
class StringBufferExample3{
public static void main(String args[]){
StringBuffer sb=new StringBuffer("Hello");
sb.replace(1,3,"Java");
System.out.println(sb);HJavalo
}
}
المخرجات :يمكنك ملاحظة أن عملية الاستبدال تمت بعد الحرف الاول وتم استبدال عدد 3 احرف من الكلمة الاصلية #Hello بالكلمة Java
HJavalo
4_الطريقة #delete
تقوم تلك الطريقة بحذف القيمة النصية بالمخزن #StringBuffer و يمكن تحديد موضع عملية الحذف وايضا عدد ما يتم حذفة ...المثال التالى يوضح الفكرة :
- الكود:
class StringBufferExample4{
public static void main(String args[]){
StringBuffer sb=new StringBuffer("Hello");
sb.delete(1,3);
System.out.println(sb);
}
}
المخرجات :
Ho
5_ الطريقة #reverse
تقوم تلك الطريقة بعكس السلسة النصية الحالية المخزنة فى #StringBuffer ....مثال يوضح الفكرة
- الكود:
class StringBufferExample5{
public static void main(String args[]){
StringBuffer sb=new StringBuffer("Hello");
sb.reverse();
System.out.println(sb);
}
}
المخرجات :
olleH
6_ الطريقة #capacity
تقوم تلك الطريقة بارجاع سعة المخزن #StringBuffer ...مثال توضيحيى :
- الكود:
class StringBufferExample6{
public static void main(String args[]){
StringBuffer sb=new StringBuffer();
System.out.println(sb.capacity());//default 16
sb.append("Hello");
System.out.println(sb.capacity());//now 16
sb.append("java is my favourite language");
System.out.println(sb.capacity());
}
}
المخرجات :
16
16
34
7_ الطريقة #ensureCapacity
تضمن طريقة #ensureCapacity أن السعة المحددة هي الحد الأدنى للسعة الحالية. أما إذا كان أكبر من السعة الحالية ، فإنه يزيد السعة بواسطة (oldcapacity * 2) +2. على سبيل المثال ، إذا كانت سعتك الحالية 16 ، فسوف تكون (16 * 2) + 2 = 34.
- الكود:
class StringBufferExample7{
public static void main(String args[]){
StringBuffer sb=new StringBuffer();
System.out.println(sb.capacity());//default 16
sb.append("Hello");
System.out.println(sb.capacity());//now 16
sb.append("java is my favourite language");
System.out.println(sb.capacity());//now (16*2)+2=34 i.e (oldcapacity*2)+2
sb.ensureCapacity(10);//now no change
System.out.println(sb.capacity());//now 34
sb.ensureCapacity(50);//now (34*2)+2
System.out.println(sb.capacity());//now 70
}
}
تحياتى لك
- في الخميس يناير 24, 2019 7:00 am
- ابحث في: أساسيات اللغة Java Basics
- موضوع: [Java] التعامل مع الفئة Java StringBuffer
- المساهمات: 1
- مشاهدة: 1501
المصفوفات فى الجافا Java Arrays
أهلا بكممن خلال هذا المقال سنتناول بالشرح مفهوم المصفوفات فى الجافا #Java Array، المقال سوف يغطي المواضيع التالية:
- ما هي المصفوفات Arrays؟
- طرق إنشاء مصفوفة
- الوصول إلى عنصر محدد في المصفوفات
- المصفوفات متعددة الأبعاد
- تمرير بيانات مصفوفة إلى طريقة Method
ما هي المصفوفات Arrays؟
المصفوفات في #Java هي هياكل بيانات متجانسة يتم تنفيذها في #Java ككائنات.حيث تقوم #Arrays بتخزين قيمة واحدة أو أكثر من نوع بيانات محدد بطريقة مفهرسة و يتم الوصول إلى عنصر محدد في المصفوفة بواسطة الفهرس الخاص به.
طرق إنشاء المصفوفات :
الصيغة العامة للإعلان عن المصفوفة على النحو التالى :
المصفوفة ذات البعد الواحد....والصيغة العامة للإعلان عن المصفوفة ذات البعد الواحد كالتالي:
أو يمكن الإعلان عنها بنفس الصيغة السابقة مع وضع الأقواس بعد اسم المصفوفة كالتالي:
أو يمكن الإعلان عنها بنفس الصيغة السابقة مع وضع الأقواس بعد اسم المصفوفة كالتالي:
اذن لكي يتم إنشاء مصفوفة يجب عليك الاتى :
- تحديد نوع البيانات المراد تخزينها فى المصفوفة data type
- قوس مربع []
- وضع اسم للمصفوفة
مثال : انشاء مصفوفة باسم A تحتوي على بيانات من نوع int
- الكود:
int [] A;
أو يمكنك تبديل موضع [] مع اسم المصفوفة على النحو التالى :
- الكود:
int A [] ;
بهذا كما موضح هو إعلاه قنما بإنشاء المصفوفة A ولكن لا يمكن تخزين بيانات بها بعد، بمعنى أنه تم إنشاء اسم متغير يشير إلى #null (لا شيء) في الذاكرة لذلك يجب علينا تهئية تلك المصفوفة وذلك بتحديد حجمها ويتم ذلك بعده طرق :
باستخدام الكلمة الاساسية #new ، وتعيينه إلى نوع بيانات المصفوفة على النحو التالى :
- الكود:
int [] A;
A[] = new int[5];
أو يمكن تهئية المصفوفة و تحديد حجمها في سطر واحد كالتالي:
الوصول إلى عنصر محدد في المصفوفات :
وكما هو ظاهر اعلاه كل المصفوفات عناصرها مرقمة من 0 إلى (حجم المصفوفة -1) ويسمى هذا الترقيم بال #index فهو بمثابة عنوان للعنصر وبه نستطيع الوصول إليه.
مثلا المصفوفة A التى تم إنشائها وتحديد حجمها 5 لتخزين خمس أرقام فسيكون ال #index لها من 0 إلى 4، إذ أن العنصر الأول سيكون متواجد عند ال#index رقم 0 والعنصر الثاني عند ال#index رقم 1، وهكذا إلى نهاية المصفوفة....فمثلا لو أردنا وضع القيمة 10 في المخزن الاول للمصفوفة سنقوم بكتابة الشفرة على النحو التالى :
- الكود:
;A[0]=10
مثال اكثر توضيحا :
إنشاء مصفوفة باسم #month_days حجمها يتسع لعدد 12 مخزن ليتم تخزين عدد الايام لكل شهر ميلادى ..ثم طباعة عدد ايام شهر ابريل على النحو التالى :
- الكود:
public static void main(String args[]) {
int month_days[];
month_days = new int[12];
month_days[0] = 31;
month_days[1] = 28;
month_days[2] = 31;
month_days[3] = 30;
month_days[4] = 31;
month_days[5] = 30;
month_days[6] = 31;
month_days[8] = 30;
month_days[9] = 31;
month_days[10] = 30;
month_days[11] = 31;
System.out.println("April has " + month_days[3] + " days.");
}
}
المخرجات :
April has 30 days
و على الرغم من ذلك يمكنك يمكن تهيئة المصفوفة و تحديد حجمها عندما يتم الإعلان عنها مباشرة بتمرير القيم او العناصر المراد تخزينها بها في مُهيئ المصفوفة .حيث سيتم إنشاء المصفوفة تلقائيًا بشكل يكفي لاحتواء عدد العناصر التي تحددها في مُهيئ الصفيف. على النحو التالى :
مثال :
- الكود:
class MyArray{
public static voide main(String args[]){
int month_days[ ] = {31,28,31,30,31,30,31,30,31,30,31};
System.out.println("April has " + month+days[3] + "days.");
}
}
المخرجات :
April has 30 days
المصفوفة متعددة الأبعاد (ذات البعدين) Multidimensional array
ويمكن القول بأن المصفوفة ذات البعدين هي عبارة عن جدول يحتوي على صفوف وأعمدة .والصيغة العامة لهذه المصفوفة كالتالي :
ويتعب نفس طريقة انشاء و تهيئة المصفوفة أحادية البعد
تمرير مصفوفة إلى طريقة
يمكننا أيضًا تمرير المصفوفات إلى الطرق كما يمكننا تمرير قيم النوع البدائي إلى الأساليب...على النحو التالى :
- الكود:
public class PMethods{
public static void display(int y[])
{
System.out.println(y[0]);
System.out.println(y[1]);
System.out.println(y[2]);
}
public static void main(String args[])
{
int x[] = { 1, 2, 3 };
display(x);
}
}
- في الإثنين يناير 21, 2019 8:47 pm
- ابحث في: أساسيات اللغة Java Basics
- موضوع: المصفوفات فى الجافا Java Arrays
- المساهمات: 0
- مشاهدة: 1545
الجمعة أكتوبر 04, 2024 9:17 pm من طرف moslema_r
» شركة تنظيف مطابخ بالرياض بخصم 30% | كلين فايندر الرياض
الجمعة أكتوبر 04, 2024 9:09 pm من طرف moslema_r
» شركة تنظيف منازل بالرياض الحلول المثالية لتجنب عناء التنظيف
الجمعة أكتوبر 04, 2024 9:04 pm من طرف moslema_r
» افضل شركة تنظيف شقق بالرياض معتمدة | كلين فايندر
الجمعة أكتوبر 04, 2024 8:58 pm من طرف moslema_r
» استمتع بتجربة مميزة مع - شركة تنظيف اثاث بالرياض 20% خصم
الجمعة أكتوبر 04, 2024 8:52 pm من طرف moslema_r
» افضل شركة تنظيف احواش بالرياض | كلين فايندر
الجمعة أكتوبر 04, 2024 8:46 pm من طرف moslema_r
» افضل موقع بيع وشراء اثاث مستعمل واجهزة كهربائية بالكويت بأعلى سعر
الجمعة أكتوبر 04, 2024 8:40 pm من طرف moslema_r
» موقع مظلات وسواتر بالرياض معتمد - ضمان على االجودة | مؤسسة الظلال الشاملة
الجمعة أكتوبر 04, 2024 8:33 pm من طرف moslema_r
» خدمات فني حداد الرياض - بادر بطلب خدماتك بخصم حتى 15%
الجمعة أكتوبر 04, 2024 8:29 pm من طرف moslema_r
» مميزات عبايات سوداء فخمة:
الجمعة أكتوبر 04, 2024 8:24 pm من طرف moslema_r