“晕头”数组

2020-04-12  本文已影响0人  你大爷的5678

不知道该如何叫此类的数组,只是看起来像个催眠的符号.so....

题目:输入一个数组的长度,要求按照如下图的方式输出数组:

环形的方式 环形的方式

网上有很多实现,初学java,作为练习,我也写了一个。

首先可以确定是数组内的元素总数,如果用户输入6,则总的元素则为6*6=36个元素。如题,数组的元素主要有4个方向,右,下,左,上。那么什么时候元素需要转向?下一个坑位有人占了,到达数组的边界。

是否需要转向

完整代码:

package com.kun;

import java.util.Arrays;

import java.util.Scanner;

public class ArrayTest {

    public static void main(String[] args) throws InterruptedException {

        var sc= new Scanner(System.in);

        var value= 1;

        while (value!= 0) {

            System.out.println("请输入数组长度(0退出)");

            value= sc.nextInt();

            if (value<= 0) {

                break;

            } else {

                var x= 0;

                var y= 0;

                var turn= new String[]{"RIGHT", "DOWN", "LEFT", "UP"};

                var turnIndex= 0;

                var arr= new int[value][value];

                var totalLen= value* value;//总的数组元素

                for (int i= 0; i< totalLen; i++) {

                    var shouldNeedTurn= needTurn(x, y, arr, turn[turnIndex]);

                    arr[x][y] = i+ 1;

                    if (shouldNeedTurn) {

                        if (turnIndex== 0) {

                            x++;

                        } else if (turnIndex== 1) {

                            y--;

                        } else if (turnIndex== 2) {

                            x--;

                        } else {

                            y++;

}

                        turnIndex= (turnIndex+ 1) % turn.length;

                    } else {

                        if (turnIndex== 0) {

                            y++;

                        } else if (turnIndex== 1) {

                            x++;

                        } else if (turnIndex== 2) {

                            y--;

                        } else {

                            x--;

}

}

}

                for (int i= 0; i< value; i++) {

                    System.out.println(Arrays.toString(arr[i]));

}

}

}

}

    ///是否需要改变方向

    ///1、下一个元素已经有值

    ///2、到达边界

    public static boolean needTurn(int currentX, int currentY, int[][] arr, String turn) {

        var len= arr.length;

        switch (turn) {

            case "RIGHT":

                var nextY= currentY + 1;

                if (nextY< len) {

                    return arr[currentX][nextY] != 0;

                } else {

                    return true;

}

            case "DOWN":

                var nextX= currentX + 1;

                if (nextX< len) {

                    return arr[nextX][currentY] != 0;

                } else

                    return true;

            case "LEFT":

                var nextLeft= currentY - 1;

                if (nextLeft< len&& nextLeft>= 0) {

                    return arr[currentX][nextLeft] != 0;

                } else {

                    return true;

}

            case "UP":

                var nextUp= currentX - 1;

                if (nextUp< len&& nextUp>= 0) {

                    return arr[nextUp][currentY] != 0;

                } else

                    return true;

}

        return false;

}

}

上一篇 下一篇

猜你喜欢

热点阅读