تصف هذه المقالة تنفيذ Java لإخراج وظيفة المصفوفة الرقمية في اتجاه عقارب الساعة أو عكس اتجاه عقارب الساعة. شاركه للرجوع إليه ، على النحو التالي:
الموضوع: اطبع مصفوفة رقمية تبدأ من 1 من الخارج إلى الزاوية اليسرى العلوية وفقًا للطول المحدد والعرض والإخراج. الرقم التالي
الرمز والتعليقات على النحو التالي:
NumberMatrix {public static void main (string [] args) {int width = 25 ؛ ارتفاع int = 12 ؛ منطقية في اتجاه عقارب الساعة = خطأ ؛ System.out.println ("نتائج اختبار wulin.com:") ؛ الإخراج Matrix (العرض ، الارتفاع ، في اتجاه عقارب الساعة) ؛ } /*** اطبع مصفوفة أرقام تبدأ من 1 من الخارج إلى الداخل وفقًا للطول المحدد وعرض الاتجاه والإخراج ، ويكون موضع بداية المصفوفة في الزاوية اليسرى العليا. * * عرض مصفوفة عرض param * param ارتفاع مصفوفة * param في اتجاه عقارب الساعة سواء كان عقارب الساعة */ private static void OutputMatrix (عرض int ، ارتفاع int ، منطقية في اتجاه عقارب الساعة) {// أولاً ، تحكم على عدد الأرقام من أكبر رقم لتحديد كيفية محاذاة الإخراج // تحديد تنسيق الإخراج (الحد الأقصى لعدد الأرقام + 1 مساحة) تنسيق السلسلة = "٪" + (NumLength + 1) + "D" ؛ // تحديد المصفوفة ثنائية الأبعاد المراد إخراجها ، لاحظ أن الأبعاد من عالية إلى منخفضة // في هذا الوقت ، مصفوفة قيم جميع العناصر الموجودة فيه هي 0 int [] [] matrix = new int [الارتفاع] [العرض] ؛ // تحديد مؤشر الموضع وعداد ، يتم نقل مؤشر الموضع ، والعداد مسؤول عن زيادة. يتم ملء الرقم المتزايد // في المصفوفة. عند ملء أرقام الارتفاع * العرض ، يتم الانتهاء من هذه المصفوفة. // لاحظ أن العنصر الأول من مؤشر الموضع هنا يتوافق مع البعد الأول Y للمصفوفة ، والعنصر الثاني يتوافق مع البعد الثاني X. int [] pointer = {0 ، 0} ؛ العداد int = 1 ؛ // تحديد الاتجاه الحالي للحركة: 1 و 2 و 3 و 4 تمثل الجزء العلوي واليمين والأسفل واليسرى على التوالي. // اتجاه البدء في اتجاه عقارب الساعة صحيح ، واتجاه البدء في اتجاه عقارب الساعة هو أسفل. الاتجاه int = عقارب الساعة؟ 2: 3 ؛ // ابدأ ملء حلقة ، كل حشوة هي ثلاث خطوات لـ (int i = 1 ، max = width * height ؛ i <= max ؛ i ++) {// 1. fill content int y = pointer [0] ؛ int x = pointer [1] ؛ المصفوفة [y] [x] = counter ؛ // 2. يتم زيادة العداد بواسطة العداد += 1 ؛ // 3. انتقل إلى الموضع التالي ، لأن هذا المكان أكثر تعقيدًا ، وفتح طريقة لتنفيذ الاتجاه = التحرك (المصفوفة ، العرض ، الطول ، المؤشر ، الاتجاه ، في اتجاه عقارب الساعة) ؛ } // بعد ملء المصفوفة ، يمكنك حلقة الإخراج بالطريقة العادية لـ (int y = 0 ؛ y <height ؛ y ++) {for (int x = 0 ؛ x <width ؛ x ++) {system.out.printf (format ، matrix [y] [x]) ؛ } system.out.println () ؛ // كسر خط الإخراج بعد اكتمال سطر واحد}} /** * نقل * * param matrix matrix في المصفوفة ، المستخدم لتحديد ما إذا كان الموضع التالي في الاتجاه الأمامي قد تم ملء بالأرقام. If so, turn to * @param width Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix, if so, turn to * @param width Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix Matrix مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة مصفوفة المصفوفة المصفوفة @مصفوفة سوف تتغير في الداخل ، أو يختلف عن الاتجاه الأصلي). إذا لم تتمكن من الاستمرار في التحرك ، فأرجع 0 */ private static int move (int [] [] matrix ، عرض int ، ارتفاع int ، int [] int ، الاتجاه int ، في اتجاه عقارب الساعة) {// حاول الانتقال إلى newPointer int [] // تحقق مما إذا كان NewPointer قانونيًا. إذا كان قانونيًا ، قم بتعيينه للمؤشر والحفاظ على الاتجاه الأصلي. يتم الانتهاء من الطريقة إذا (isValid (newPointer ، Matrix ، العرض ، الارتفاع)) {system.arraycopy (newPointer ، 0 ، pointer ، 0 ، 2) ؛ اتجاه العودة } // انعطف وانتقل مرة أخرى من المؤشر في اتجاه اتجاه جديد = بدوره (الاتجاه ، في اتجاه عقارب الساعة) ؛ newPointer = تم نقله بشكل مباشر (مؤشر ، اتجاه) ؛ // تحقق مما إذا كان NewPointer قانونيًا (كما كان من قبل) إذا (isValid (newPointer ، matrix ، العرض ، الارتفاع)) {system.arraycopy (newPointer ، 0 ، pointer ، 0 ، 2) ؛ اتجاه العودة } // لا يمكنك المضي قدمًا أو الدوران ، لذلك لا يمكنك الاستمرار في التحرك. العودة 0 ؛ } // حدد ما إذا كان يمكن ملء الموضع المحدد في المصفوفة مع isValid boolean الثابتة الخاصة (int [] NewPointer ، int [] [] matrix ، عرض int ، ارتفاع int) {// لا يمكن أن يتجاوز الموضع newPointer [1] = 0] العودة كاذبة } // يجب أن يكون محتوى الموضع فارغًا إذا (matrix [newPointer [0]] [newPointer [1]]! = 0) {return false ؛ } إعادة صواب ؛ } // توجيه. وفقًا لتعريفنا للاتجاه ، فإن اتجاه عقارب الساعة هو +1 ، وعكس اتجاه عقارب الساعة هو -1 بدوره الثابتة الثابتة (الاتجاه الداخلي ، في اتجاه عقارب الساعة) {int newDirection = عقارب الساعة؟ الاتجاه + 1: الاتجاه - 1 ؛ if (newDirection> 4) {newDirection = 1 ؛ } آخر إذا (newDirection <1) {newDirection = 4 ؛ } إرجاع الاتجاه الجديد ؛ } / *** تحرك في الاتجاه المحدد والعودة إلى الموضع الجديد** param pointer الموضع الحالي* param اتجاه الاتجاه** return الموضع الجديد* / private static int [] extrectly (int [] مؤشر ، int direction) {int y = pointer [0] ؛ int x = pointer [1] ؛ Switch (Direction) {case 1: return new int [] {y - 1 ، x} ؛ الحالة 2: إرجاع int [] {y ، x + 1} ؛ الحالة 3: إرجاع int [] {y + 1 ، x} ؛ الحالة 4: إرجاع int new [] {y ، x - 1} ؛ } رمي غير alfictalargumentException ("الاتجاه غير الصحيح:" + الاتجاه) ؛ }}نتائج التشغيل:
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.