我一直在第21行得到错误ArrayIndexOutOfBounds:4。该行是Spiral [VIndx] [HIndx] =数字。当给定一定维度时,该程序应该创建数字螺旋。例如,如果给定尺寸3,则使用螺旋数字的3x3 2d数组。这是螺旋应该是什么:
7 8 9
6 1 2
5 4 3
为什么我的循环不起作用?
import java.util.*;import java.io.*;
public class Spiral{
public static void Spiral(int dimensions, int [][] Spiral)
{
int endNumber = (int)Math.pow(dimensions, 2);
int number = 1;
int rightmovement = 1;
int downmovement = 1;
int leftmovement = 2;
int upmovement = 2;
int HIndx = (dimensions-1)/2;
int VIndx = (dimensions-1)/2;
while(number<=endNumber)
{
for(int i = 0;i<=rightmovement;i++)
{
Spiral[VIndx][HIndx]=number;
number++;
HIndx++;
if(number==endNumber)break;
}
rightmovement++;
for(int i = 0;i<=downmovement;i++)
{
Spiral[VIndx][HIndx]=number;
number++;
VIndx++;
if(number==endNumber)break;
}
downmovement++;
for(int i = 1;i<=leftmovement;i++)
{
Spiral[VIndx][HIndx]=number;
number++;
HIndx--;
if(number==endNumber)break;
}
leftmovement++;
for(int i = 1;i<=upmovement;i++)
{
Spiral[VIndx][HIndx]=number;
number++;
VIndx--;
if(number==endNumber)break;
}
upmovement++;
}
}
public static void main(String[]args)throws IOException
{
File file = new File("spiral.txt");
Scanner input = new Scanner(file);
String [] numbers = new String [2];
int i =0;
while (input.hasNextLine())
{
String line = input.nextLine();
numbers[i]=line;
i++;
}
int dimensions = 0;
input.close();
int [][] Spiral = new int [dimensions][dimensions];
dimensions = Integer.parseInt(numbers[0]);
int range = Integer.parseInt(numbers[1]);
if(dimensions%2==0)
{
dimensions+=1;
}
Spiral(dimensions, Spiral);
for(i = 0; i<dimensions;i++){
for(int j = 0; j<dimensions;j++){
System.out.println(Spiral[i][j]);
}
}
}
}
答案 0 :(得分:0)
首先,您的循环条件应使用<
而不是<=
。
其次,如果你考虑螺旋,你会发现你总是以正确的运动结束。你第一次点击break
if(number==endNumber)break;
但这并没有让你退出while
循环 - 这只会离开for
循环。那么你进入向下移动for
循环并获得索引超出范围的异常。
第三,您需要先在循环前输入中心号码。
此外,rightmovement
,leftmovement
,......每次都应增加2。在更大的网格中更容易看到这个原因。
21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
注意第一个右移动写2
,然后下一个写8 9 10
,最后一个写22 23 24 25
,如果你要继续写26
要解决break
未离开while
循环的问题,只需将其更改为return
语句即可。