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