الوقت/التاريخ الآن هو الأحد أكتوبر 06, 2024 2:08 am

10 نتيجة بحث عن java

الرسم ثانئى الابعاد فى الجافا باستخدام Graphics2D...مقال 1_مقدمة تمهيدية

أهلا وسهلا بكم اخوانى الكرام 

من بداية هذا المقال سبأبدء معكم سلسلة مقالات عن الرسم أو الجرافيك فى الجافا وذلك من خلال الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] التى توفرها الحزمة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط].awt , تلك الفئة المجردة التى تحتوى على كافة الاساليب و الطرق التى يحتاجها المطورين فى رسم الأشكال الهندسية البسيطة والنصوص وحتى الصور فى تطبيقات الجافا.

_اساليب فئة الرسومات Graphics 

يوفر الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]  عدة أساليب لرسم ثلاثة أنواع من الكائنات الرسومية:


  1. الاسلوب drawString :لرسم النصوص
  2. الاسلوب drawXxx :لرسم الاشكال الهندسية حيث يمكن أن تكون Xxx خط  Line أو Rect أو Oval أو Arc أو 3DRect أو 3DRect ..الخ
  3. الاسلوب drawImage لرسم الصور النقطية.


كما توفر عدة طرق لملء الأشكال الهندسية :


  1. الاسلوب fillxxx :لملىء الاشكال الهندسية باللون حيث أن Xxx خط  Line أو Rect أو Oval أو Arc أو 3DRect أو 3DRect ..الخ
  2. الاسلوب 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)




و سيتم شرحها فى المقالات القادمة بشىء من التفصيل


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


الوسم java على المنتدى منتدى مصر التقني AWT_GraphicsClassDiagram

وهذه الفئة تحتوي على الطرق الاكثر فاعلية فى للرسم وهي :


  1. fill3DRect()
  2. draw3DRect()
  3. rotate()
  4. scale()
  5. shear()
  6. transform()
  7. setRenderingHints()


وسيتم تناول كل تلك الطرق فى مقالا لاحقة باذن الله تعالى :

_كيف تتم عملية الرسم 

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

 
الكود:

public void paint(Graphics g) {


 }


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

الكود:
public void paint(Graphics g) {
    g.drawLine(25, 25, 120, 120);
  
  }



الاخراج :
الوسم java على المنتدى منتدى مصر التقني 116108576

كما تلاحظ قد قمنا بكتابة الشفرات داخل الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] لرسم خط مستقيم.... حيث يستدعي النظام الفرعي للرسم الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] التى تقوم بدروها باستدعاء الطرق الثلاثة التالية:


  1. paintComponent ()
  2. paintBorder ()
  3. paintChildren ()


وذلك ومن أجل تحسين الاداء يجب تجاهل الطريقة paint فى عملية الرسم خصوصا اذا كان الرسم خاص بتطبيقات الجافا سوينج Swing components و نستبدل عوضا عنها الطريقة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] وذلك على النحو التالى :



الكود:
public void paintComponent(Graphics g) {
    
    g.drawLine(25, 25, 120, 120);
  
  }


 الاخراج :


الوسم java على المنتدى منتدى مصر التقني 116108576

المثال بالكامل :

الكود:

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);
  }
}



كما تلاحظ اننا قمنا برسم خط مستقيم بسيط لكن لا تستطيع تغير حجم الخط أو نوعه كما فى الصورة التالية وذلك لكوننا لم نستخدم حتى الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] التى تتيح رسمًا أكثر تعقيدًا من الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

الوسم java على المنتدى منتدى مصر التقني Dashed_lines_demo

لذلك فى المقالات القادمة سيتم التركيز على الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] فى عملية الرسم
من طرف أحمد مناع
في الإثنين ديسمبر 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


الوسم java على المنتدى منتدى مصر التقني Distance-between-points
الوسم java على المنتدى منتدى مصر التقني Java-program-distance-between-two-points
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
من طرف أحمد مناع
في الخميس يناير 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

الوسم java على المنتدى منتدى مصر التقني JavaFxSceneBuilderInstallation4

بعد إنتهاء عملية التثبيت بنجاح يمكن البدء فى استخدام Scene Builder و ذلك من خلال أما النقر نقرًا مزدوجًا فوق ايقونة Scene Builder الموجودة فى سطح المكتب أو من خلال أن تحدد Start ، ثم All Program ، ثم JavaFX Scene Builder ، وأخيرًا ، JavaFX Scene Builder 1.1...ليظهر لك الشاشة الافتتاحية للبرنامج كما فى الشكل التالى :

الوسم java على المنتدى منتدى مصر التقني Main-window

بشكل افتراضي ، تتضمن النافذة الرئيسية لـ 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، المقال سوف يغطي المواضيع التالية:



  1. ما هي المصفوفات  Arrays؟

  2. طرق إنشاء مصفوفة 

  3. الوصول إلى عنصر محدد في المصفوفات

  4. المصفوفات متعددة الأبعاد 

  5. تمرير بيانات مصفوفة إلى طريقة Method




ما هي المصفوفات  Arrays؟

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

طرق إنشاء المصفوفات :

الصيغة العامة للإعلان عن المصفوفة على النحو التالى :

المصفوفة ذات البعد الواحد....والصيغة العامة للإعلان عن المصفوفة ذات البعد الواحد كالتالي:

الوسم java على المنتدى منتدى مصر التقني 781125485


أو يمكن الإعلان عنها بنفس الصيغة السابقة مع وضع الأقواس بعد اسم المصفوفة كالتالي:

الوسم java على المنتدى منتدى مصر التقني 756900150


اذن لكي يتم إنشاء مصفوفة يجب عليك الاتى :


  • تحديد نوع البيانات المراد تخزينها فى المصفوفة data type
  • قوس مربع []
  • وضع اسم للمصفوفة 


مثال : انشاء مصفوفة باسم A تحتوي على بيانات من نوع int 

الكود:
int [] A;


أو يمكنك تبديل موضع [] مع اسم المصفوفة على النحو التالى :

الكود:
int A [] ;


بهذا كما موضح هو إعلاه قنما بإنشاء المصفوفة A ولكن لا يمكن تخزين بيانات بها بعد، بمعنى أنه تم إنشاء اسم متغير يشير إلى #null (لا شيء) في الذاكرة لذلك يجب علينا تهئية تلك المصفوفة وذلك بتحديد حجمها ويتم ذلك بعده طرق :

باستخدام الكلمة الاساسية #new ، وتعيينه إلى نوع بيانات المصفوفة على النحو التالى :

الكود:

int [] A;
A[] = new int[5];


أو يمكن تهئية المصفوفة و تحديد حجمها في سطر واحد كالتالي:

الوسم java على المنتدى منتدى مصر التقني 129786133

الوصول إلى عنصر محدد في المصفوفات :


وكما هو ظاهر اعلاه كل المصفوفات عناصرها مرقمة من 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

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

الوسم java على المنتدى منتدى مصر التقني 151613972

مثال :
الكود:
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

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


الوسم java على المنتدى منتدى مصر التقني 145876847

ويتعب نفس طريقة انشاء و تهيئة المصفوفة أحادية البعد

الوسم java على المنتدى منتدى مصر التقني 422583293

تمرير مصفوفة إلى طريقة

يمكننا أيضًا تمرير المصفوفات إلى الطرق كما يمكننا تمرير قيم النوع البدائي إلى الأساليب...على النحو التالى :

الكود:
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

الرجوع الى أعلى الصفحة

انتقل الى: