拉丁方阵、打印菱形(实心or空心)

LatinMatrix

package ccnu;

public class Demo07 {

    public static void main(String[] args) {
        /*Node head = create(4); Node p = head; do{ System.out.print(p.data); p = p.next; }while(p != head);*/
        int[][] latin = latinMatrix(4);
        for(int[] i : latin){
            for(int ii:i){
                System.out.print(ii);
            }
            System.out.println();
        }
    }

    public static int[][] latinMatrix(int n) {
        if (n <= 0) {
            return null;
        }
        int[][] latin = new int[n][n];
        Node head = create(n);
        if (head == null) {
            return null;
        }
        Node p = head;
        for (int i = 0; i < n * n; i++) {
            latin[i / n][i % n] = p.data;
            if ((i + 1) % n == 0) { // 当前行已完毕
                head = head.next; // 下一行的开始节点为上一行的开始节点的后继节点
                p = head;
            } else {
                p = p.next;
            }
        }
        return latin;
    }

    public static Node create(int n){
        if(n <= 0){
            return null;
        }
        int i = 1;
        Node head = new Node(i);
        Node rear = head;
        i++;
        while(i <= n){
            Node tmp = new Node(i);
            rear.next = tmp;
            rear = tmp;
            i++;
        }
        rear.next = head;
        return head;
    }

    private static class Node{
        private int data;
        private Node next = null;

        public Node(int data){
            this.data = data;
        }
    }
}

菱形打印

package ccnu.allTest;

import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int level;
        boolean tag;
        do {
            System.out.print("请输入层数:");
            level = sc.nextInt();
        } while (level <= 0 || level % 2 == 0);
        System.out.print("实心或空心(false:实心,true:空心):");
        tag = sc.nextBoolean();
        print(level, tag); // false表示实心菱形
        sc.close();
    }

    public static void print(int level, boolean tag){ // 打印菱形,tag为false表示实心,否则表示空心
        int n = (level + 1) / 2;
        int space = n, nonSpace = -1;
        for(int i = 1; i <= level; i++){
            if(i <= n){ // 上半层
                space -= 1;
                nonSpace += 2;
            }else{ // 下半层
                space += 1;
                nonSpace -= 2;
            }
            printCharacter(space, ' ', tag);
            printCharacter(nonSpace, '*', tag);
            System.out.println();
        }
    }

    public static void printCharacter(int n, char ch, boolean tag){
        for(int i = 1; i <= n; i++){
            if(tag && i > 1 && i < n){
                System.out.print(' ');
                continue;
            }
            System.out.print(ch);
        }
    }
}
    原文作者:拉丁方阵问题
    原文地址: https://blog.csdn.net/Recall_Tomorrow/article/details/69398023
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞