บทความนี้อธิบายการใช้งาน Java ของการส่งออกฟังก์ชั่นเมทริกซ์ดิจิตอลตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
หัวข้อ: พิมพ์เมทริกซ์ตัวเลขเริ่มต้นจาก 1 จากด้านนอกไปยังมุมซ้ายบนตามความยาวและความกว้างที่กำหนดและทิศทางเอาต์พุต รูปต่อไปนี้
รหัสและความคิดเห็นมีดังนี้:
NumberMatrix คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {int width = 25; ความสูง int = 12; บูลีนตามเข็มนาฬิกา = false; System.out.println ("ผลการทดสอบ wulin.com:"); OutputMatrix (ความกว้างความสูงตามเข็มนาฬิกา); } /*** พิมพ์เมทริกซ์ตัวเลขเริ่มต้นจาก 1 จากด้านนอกถึงด้านในตามความยาวและความกว้างที่กำหนดและทิศทางเอาต์พุตและตำแหน่งเริ่มต้นของเมทริกซ์อยู่ที่มุมซ้ายบน * * @param ความกว้างเมทริกซ์ความกว้าง * @param ความสูงเมทริกซ์ความสูง * @param ตามเข็มนาฬิกาไม่ว่าจะเป็นตามเข็มนาฬิกา */ โมฆะคงที่ส่วนตัว outputmatrix (ความกว้าง int, ความสูง int, boolean ตามเข็มนาฬิกา) {// แรกตัดสินจำนวนตัวเลขของจำนวนมากที่สุด // กำหนดรูปแบบของเอาต์พุต (จำนวนสูงสุดของตัวเลข + 1 พื้นที่) รูปแบบสตริง = "%" + (numLength + 1) + "d"; // กำหนดอาร์เรย์สองมิติให้เป็นเอาต์พุตโปรดทราบว่าขนาดจากสูงถึงต่ำ // ในเวลานี้เมทริกซ์ค่าขององค์ประกอบทั้งหมดในนั้นคือ 0 int [] [] matrix = new int [ความสูง] [ความกว้าง]; // กำหนดตัวชี้ตำแหน่งและตัวนับตัวชี้ตำแหน่งจะถูกย้ายและตัวนับมีหน้าที่เพิ่มขึ้น จำนวนที่เพิ่มขึ้น // จะถูกกรอกลงในเมทริกซ์ เมื่อกรอกหมายเลขความกว้าง * ความสูงเมทริกซ์นี้จะเสร็จสมบูรณ์ // โปรดทราบว่าองค์ประกอบแรกของตัวชี้ตำแหน่งที่นี่สอดคล้องกับมิติแรก y ของเมทริกซ์และองค์ประกอบที่สองสอดคล้องกับมิติที่สอง x int [] pointer = {0, 0}; int counter = 1; // กำหนดทิศทางปัจจุบันของการเคลื่อนไหว: 1, 2, 3 และ 4 เป็นตัวแทนของบนขวาล่างและซ้ายตามลำดับ // ทิศทางเริ่มต้นตามเข็มนาฬิกานั้นถูกต้องและทิศทางเริ่มต้นทวนเข็มนาฬิกาอยู่ด้านล่าง ทิศทาง int = ตามเข็มนาฬิกา? 2: 3; // เริ่มการเติมลูปการเติมแต่ละครั้งคือสามขั้นตอนสำหรับ (int i = 1, สูงสุด = ความกว้าง * ความสูง; i <= สูงสุด; i ++) {// 1 เติมเนื้อหา int y = ตัวชี้ [0]; int x = ตัวชี้ [1]; เมทริกซ์ [y] [x] = เคาน์เตอร์; // 2. ตัวนับเพิ่มขึ้นโดยตัวนับ += 1; // 3. ย้ายไปยังตำแหน่งถัดไปเนื่องจากสถานที่นี้มีความซับซ้อนมากขึ้นเปิดวิธีการใช้ทิศทาง = ย้าย (เมทริกซ์ความกว้างความสูงตัวชี้ทิศทางตามเข็มนาฬิกา); } // หลังจากเมทริกซ์เต็มแล้วคุณสามารถวนลูปเอาต์พุตในวิธีปกติสำหรับ (int y = 0; y <ความสูง; y ++) {สำหรับ (int x = 0; x <width; x ++) {system.out.printf (รูปแบบเมทริกซ์ [y] [x]); } system.out.println (); // การแบ่งสายเอาต์พุตหลังจากหนึ่งบรรทัดเสร็จสิ้น}} /** * ย้าย * * @param เมทริกซ์เมทริกซ์ในเมทริกซ์ใช้เพื่อตรวจสอบว่าตำแหน่งถัดไปในทิศทางไปข้างหน้านั้นเต็มไปด้วยตัวเลขหรือไม่ 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 เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์เมทริกซ์ * ค่าภายในจะเปลี่ยนวิธีการนี้ เหมือนกันหรือแตกต่างจากทิศทางดั้งเดิม) หากคุณไม่สามารถเคลื่อนที่ต่อไปได้ให้ส่งคืน 0 */ ส่วนตัวคงที่การเคลื่อนย้าย int (int [] [] เมทริกซ์, ความกว้าง int, ความสูง int, int [] ตัวชี้, ทิศทาง int, บูลีนตามเข็มนาฬิกา) {// พยายามย้ายไปที่ newpointer int [] newpointer = ย้ายไป (ตัวชี้ทิศทาง); // ตรวจสอบว่า newpointer นั้นถูกกฎหมายหรือไม่ หากถูกกฎหมายกำหนดให้ตัวชี้และรักษาทิศทางดั้งเดิม วิธีการเสร็จสิ้นถ้า (isvalid (newpointer, เมทริกซ์, ความกว้าง, ความสูง)) {system.arraycopy (newpointer, 0, ตัวชี้, 0, 2); ทิศทางกลับ; } // หมุนและย้ายอีกครั้งจากตัวชี้ในทิศทางใหม่ = เทิร์น (ทิศทางตามเข็มนาฬิกา); newPointer = movieRectly (ตัวชี้ทิศทาง); // ตรวจสอบว่า newpointer นั้นถูกกฎหมาย (เหมือนก่อน) ถ้า (isvalid (newpointer, เมทริกซ์, ความกว้าง, ความสูง)) {system.arraycopy (newpointer, 0, ตัวชี้, 0, 2); ทิศทางกลับ; } // คุณไม่สามารถก้าวไปข้างหน้าหรือเลี้ยวได้ดังนั้นคุณจึงไม่สามารถเคลื่อนย้ายต่อไปได้ กลับ 0; } // พิจารณาว่าตำแหน่งที่ระบุในเมทริกซ์สามารถเติมด้วยบูลีนแบบคงที่ส่วนตัว isvalid (int [] newpointer, int [] [] เมทริกซ์, ความกว้าง int, ความสูง int) {// ตำแหน่งไม่เกินช่วงเมทริกซ์ถ้า newpointer [0]> = ความสูง เท็จ; } // เนื้อหาของตำแหน่งควรว่างเปล่าถ้า (เมทริกซ์ [newpointer [0]] [newpointer [1]]! = 0) {return false; } return true; } // steer ตามคำจำกัดความของทิศทางของเราตามเข็มนาฬิกาคือ +1, ทวนเข็มนาฬิกาคือ -1 เทิร์นอินสแตนต์ส่วนตัว (ทิศทาง int, บูลีนตามเข็มนาฬิกา) {int newDirection = ตามเข็มนาฬิกา? ทิศทาง + 1: ทิศทาง - 1; if (newDirection> 4) {newDirection = 1; } อื่นถ้า (newDirection <1) {newDirection = 4; } ส่งคืน NewDirection; } / *** เลื่อนไปในทิศทางที่ระบุและกลับไปที่ตำแหน่งใหม่** @param ตัวชี้ตำแหน่งปัจจุบัน* @param ทิศทางทิศทาง** @@return ตำแหน่งใหม่* / ส่วนตัวคงที่ int [] movirectly (int [] pointer, ทิศทาง int) {int y = pointer [0]; int x = ตัวชี้ [1]; สวิตช์ (ทิศทาง) {กรณีที่ 1: ส่งคืน int ใหม่ [] {y - 1, x}; กรณีที่ 2: ส่งคืน int ใหม่ [] {y, x + 1}; กรณีที่ 3: ส่งคืน int ใหม่ [] {y + 1, x}; กรณีที่ 4: ส่งคืน int ใหม่ [] {y, x - 1}; } โยน unlegalargumentException ใหม่ ("ทิศทางที่ไม่ถูกต้อง:" + ทิศทาง); -ผลการทำงาน:
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินงาน Java Dom", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน