美文网首页
“晕头”数组

“晕头”数组

作者: 你大爷的5678 | 来源:发表于2020-04-12 15:29 被阅读0次

    不知道该如何叫此类的数组,只是看起来像个催眠的符号.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;

    }

    }

    相关文章

      网友评论

          本文标题:“晕头”数组

          本文链接:https://www.haomeiwen.com/subject/ouavmhtx.html