نصائح مفيدة

عناصر صفيف الطباعة

في Java ، لا تتجاوز المصفوفات toString () ، لذا إذا حاولت prhashCode مباشرة ، فستحصل على className + @ + hexCode للصفيف كما هو محدد int intArray = new int <1 ، 2 ، 3 ، 4 ، 5> ، System.out. println (intArray) ، // يطبع شيئًا مثل 'I @ 3343c8b3':

لكن عادةً ما نود حقًا الحصول على شيء أكثر // مجموعة من البدائيات: int intArray = new <1 ، 2 ، 3 ، 4 ، 5> ، // output: 1 ، 2 ، 3 ، 4 ، 5 // array of مراجع الكائن: String strArray = new String <"John"، "Mary"، "Bob">، // output: John، Mary، Bob. ما هي أسهل طريقة للقيام بذلك؟ فيما يلي بعض أمثلة المدخلات والمخرجات:

انعكاس API

09 مايو 2010 00:39
10 مايو 2010 10:01

مجرد تمرير مجموعة في المعلمة الأسلوب ، شيء من هذا القبيل:

اعتمادًا بالفعل على نوع العناصر في الصفيف ، قد تتغير محتويات الحلقة.

10 مايو 2010 10:34
10 مايو 2010 11:36

أنا آسف ، أنا جديد على الكثيرين لدرجة أنني لا أعرف ما هو ما. أعدك لإصلاحها.

10 مايو 2010 11:49

مجرد تمرير مجموعة في المعلمة الأسلوب ، شيء من هذا القبيل:

اعتمادًا بالفعل على نوع العناصر في الصفيف ، قد تتغير محتويات الحلقة.

لذلك يمكنني ذلك. لكنني بحاجة إلى استدعاء طريقة لفئة أخرى ، وليس بطريقة ثابتة من ولاية ماين.
وهذا هو ، والسؤال هو بالضبط كيفية الاتصال بشكل صحيح فيما يتعلق مجموعة؟
Integer.printArray ()؟
printArray (intArray)؟
intArray.printArray ()؟
Sobsno لا يعمل على أي خيار (

10 مايو 2010 14:55

يجب ألا ينجح الخياران الأول والأخير :) ولماذا لا يعمل الخيار الثاني على هذا النحو ، فأنت بحاجة إلى الاطلاع على الكود ..

فرع فلسطين. إلى الإدارة: يجب نقل الموضوع: roll:

10 مايو 2010 15:27

يجب ألا ينجح الخياران الأول والأخير :) ولماذا لا يعمل الخيار الثاني على هذا النحو ، فأنت بحاجة إلى الاطلاع على الكود ..

فرع فلسطين. إلى الإدارة: يجب نقل الموضوع: roll:

تمت إزالة المنشئات غير الضرورية لتقليل النص

إعلان صف وتهيئة

بيان بيان الصفيف في Java يشبه أي متغير آخر. يحتوي على نوع بيانات متبوعًا باسم المصفوفة. الاختلاف الوحيد هو استخدام الأقواس المربعة بجوار نوع البيانات:

تخبر عوامل التعريف أعلاه المترجم أن intArrayvariable عبارة عن صفيف من الأعداد الصحيحة ، و floatArrayis عبارة عن صفيف من أرقام الفاصلة العائمة ، و charArrayis عبارة عن صفيف من الأحرف.

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

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

يمكن الإعلان وتحديد حجم الصفيف في تعبير واحد:

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

باستخدام المصفوفات

بمجرد تهيئة الصفيف ، يمكنك تعيين قيم العناصر باستخدام الفهرس. وهي تحدد موضع كل عنصر داخل الصفيف. العنصر الأول هو في الموضع 0 ، والثاني في الموضع 1 ، وهلم جرا.

من المهم ملاحظة أن فهرس العنصر الأول هو 0. عادةً ما يحدث التشويش عندما تبدأ في التفكير أنه نظرًا لوجود 10 عناصر في صفيف ، سيتم سرد مؤشراتها من 1 إلى 10. ولكن في الواقع ، النتيجة يذهب 0 حتي 9. على سبيل المثال ، بالعودة إلى المثال مع اليانصيب ، يمكنك إنشاء مجموعة مكونة من 6 عناصر ، وتعيين أرقام لها من اليانصيب:

طريقة مختصرة لملء صفيف:

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

للحصول على قيمة العنصر ، يتم استخدام الفهرس الخاص به:

لمعرفة طول الصفيف في Java ، استخدم حقل الطول:

ملاحظة: الخطأ الشائع هو عند استخدام طريقة الطول عند استخدام قيمة الطول كموضع فهرس. سيؤدي ذلك دائمًا إلى حدوث خطأ ، نظرًا لأن مواضع فهرس الصفيف هي 0 ، في حين أن موضع الطول هو 1.

صفائف متعددة الأبعاد

حتى الآن ، تحدثنا فقط عن المصفوفات أحادية البعد. ولكن يمكن أن تحتوي المصفوفات على أكثر من بُعد. المصفوفات متعددة الأبعاد عبارة عن حاويات تحتوي على عدة صفائف مرة واحدة:

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

في نفس الوقت ، يجب ألا يكون طول المصفوفات داخل صفيف Java متعدد الأبعاد كما هو:

نسخ مجموعة

لنسخ صفيف ، أسهل طريقة هي استخدام arraycopymethod من فئة النظام. تأخذ الطريقة خمس معلمات: المصفوفة الأصلية والموضع في الفهرس (الذي تريد بدء نسخ العناصر منه) والمصفوفة الجديدة والموضع في الفهرس المراد بدء اللصق وعدد العناصر المراد نسخها:

في المثال ، نقوم بإنشاء صفيف جديد يحتوي على العناصر الأربعة الأخيرة من الصفيف int:

نظرًا لأن للصفائف طولًا ثابتًا ، يسمح لك arraycopymethod بتغيير طول المصفوفة بسهولة.

للحصول على فهم أفضل للصفائف ، يمكنك أن تقرأ عن كيفية إدارة المصفوفات باستخدام فئة المصفوفات. وأيضًا حول إنشاء صفائف ديناميكية في Java (أي ، صفائف مع عدد غير محدود من العناصر) باستخدام فئة ArrayList.

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

مشاركات: 30

بدءًا من Java 5 ، يمكنك استخدام Arrays.deepToString (arr) أو كائن للصفائف داخل المصفوفات. لاحظ أن الإصدار .toString () يستدعي سلسلة الصفيف = سلسلة جديدة <"جون" ، "ماري" ، "بوب"> ، System.out.println (Arrays.toString (صفيف)) ، كل كائن في الصفيف. الاستنتاج هو مؤطر تماما كما تسأل.

صفيف int:

تحقق دائمًا من المكتبات القياسية. محاولة:

أو إذا كانت الصفيف الخاص بك يحتوي على صفائف أخرى كعناصر:

ومع ذلك ، من الجيد أن أعرف أنه من أجل "التحقق دائمًا من المكتبات القياسية أولاً" ، لم أكن لأجد مطلقًا خدعة Arrays.toString (myarray)

- لأنني ركزت على نوع myarray لمعرفة كيفية القيام بذلك. لم أكن أريد أن أكرر هذا: أحتاج إلى مكالمة بسيطة حتى تبدو كما هي الحال في مصحح أخطاء Eclipse ، ولا myarray.toString () فقط.

في JDK1.8 ، يمكنك استخدام عمليات التجميع وتعبير لامدا:

مجموعة مزدوجة:

تحقق دائمًا من المكتبات القياسية أولاً. محاولة:

أو إذا كانت الصفيف الخاص بك يحتوي على صفائف أخرى كعناصر:

ومع ذلك ، من الجيد أن أعرف أنه "تحقق دائمًا من المكتبات القياسية" ، ما كنت لأصادف حيلة Arrays.toString (myarray)

- منذ أن ركزت على نوع myarray لمعرفة كيفية القيام بذلك. لم أكن أريد التكرار بشأن هذا الشيء: أردت مكالمة بسيطة لجعلها تبدو كما أرى في مصحح أخطاء Eclipse ، و myarray.toString () فقط لم أفعل ذلك.

في JDK1.8 ، يمكنك استخدام عمليات التجميع وتعبير لامدا:

إذا كنت تستخدم Java 1.4 ، يمكنك القيام بذلك بدلاً من ذلك:

(هذا يعمل في 1.5+ ، بالطبع.)

بدءًا من Java 8 ، يمكنك أيضًا استخدام طريقة الصلة () التي توفرها الفئة String لطباعة عناصر المصفوفة بدون الأقواس مفصولة بفاصل فاصل محدد (والذي يمثل مساحة للمثال الموضح أدناه):

الخلاصة ستكون "مرحبا ، أميغو!"

Java 8 - Stream.collect (joining ())، Stream.forEach

أدناه ، سأحاول سرد بعض الطرق الأخرى المقترحة ، ومحاولة تحسينها قليلاً ، مع الإضافة الأكثر بروزًا هي استخدام عامل التشغيل Stream.collect باستخدام Collector Joinor لمحاكاة ما يفعله String.join.

يطبع Arrays.deepToString (arr) على سطر واحد فقط.

للحصول على جدول للطباعة كجدول ثنائي الأبعاد ، كنت بحاجة للقيام بذلك:

يبدو أن طريقة Arrays.deepToString (arr) يجب أن تقبل سلسلة محددة ، لكن للأسف لم تكن هذه هي الحالة.

يمكننا استخدام Arrays.toString (صفيف) لطباعة صفيف أحادي الأبعاد و Arrays.deepToString (صفيف) للصفائف متعددة الأبعاد.

الآن لدينا خيارات Stream و lambda لطباعة المصفوفة.

طباعة صفيف أحادي البعد:

طباعة صفيف متعدد الأبعاد فقط في حالة ، إذا أردنا طباعة صفيف متعدد الأبعاد ، فيمكننا استخدام Arrays.deepToString (array) على النحو التالي:

الآن تجدر الإشارة إلى أن طريقة Arrays.stream (T) ، والتي في حالة int تقوم بإرجاع Stream إلينا ثم تعرض طريقة flatMapToInt () كل عنصر من عناصر الدفق مع محتويات الدفق المعروض ، عن طريق تطبيق وظيفة العرض المقدمة على كل عنصر.

11, 12, 21, 22, 31, 32, 33
جون ، برافو ، ماري ، لي ، بوب ، جونسون
11
12
21
22
31
32
33
جون
مرحى
مريم العذراء
لي
تمايل
جونسون

طرق مختلفة لطباعة المصفوفات في Java:

استخدام toString ()

طباعة مجموعة من المصفوفات

الإخراج: Ljava.lang.String ، @ 1ad086a Ljava.lang.String ، @ 10385c1 ، Ljava.lang.String ، @ 42719c الخامس ، السادس ، السابع ، الثامن

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

هذا يعطي إخراج مثل 1 ، 2 ، 3 ، 4 ، 5

جئت مؤخرا عبر هذا المنصب في الفانيليا # جافا. أنها ليست مريحة للغاية لكتابة Arrays.toString (arr) ، ثم نقوم باستيراد java.util.Arrays ، في كل وقت.

يرجى ملاحظة أن هذا ليس حل دائم بأي شكل من الأشكال.مجرد اختراق يمكن أن يجعل تصحيح الأخطاء أسهل.

طباعة الصفيف مباشرة يعطي تمثيل داخلي ورمز التجزئة. الآن جميع الفئات لديها كائن كنوع الأصل. فلماذا لا الاختراق Object.toString ()؟ بدون تعديل ، تبدو فئة الكائن كما يلي:

ماذا لو تغيرت إلى:

يمكن ببساطة إضافة هذه الفئة المعدلة إلى مسار الفئة عن طريق إضافة ما يلي إلى سطر الأوامر: -Xbootclasspath / p: target / classes.

الآن ، مع توفر deepToString (..) منذ Java 5 ، يمكن بسهولة تغيير toString (..) إلى deepToString (..) لإضافة دعم للصفائف التي تحتوي على صفائف أخرى.

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

يجب أن يعمل دائمًا بغض النظر عن إصدار JDK الذي تستخدمه:

سيعمل هذا إذا كانت المصفوفة تحتوي على كائنات. إذا كان Array يحتوي على أنواع بدائية ، فيمكنك استخدام فئات مجمّع ، بدلاً من ذلك ، يمكنك تخزين بدائية بشكل مباشر

استبدلها بـ:

تحديث:

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

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

شاهد الفيديو: حاسب2الوحدة2التدريب4و5-إنشاء الصيغ والطباعة (ديسمبر 2019).