java - 我的 squaretest 也没有分析其他大小和 ArrayIndexOutofBoundsException

标签 java indexoutofboundsexception

我在尝试运行我的程序时遇到此错误。我仍然想知道为什么它不会不读 magicData.txt 中正方形的其他大小,我得到一个 ArrayIndexOutOfBoundsException 错误,这个错误是由于 boolean 魔法类没有返回是否为真。

run:

******** Square 1 ********
8 1 6 3 5 7 4 9 2 the sum of row 0  is...: 15
the sum of row 1  is...: 15
the sum of row 2  is...: 15
the sum of columns 0 is....: 15
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
The sum of the main diagonal is......: 15
The sum of the other diagonal is.....: 15
Is it a magic square: true
the sum of columns 1 is....: 15
The sum of the main diagonal is......: 15
The sum of the other diagonal is.....: 15
Is it a magic square: true
the sum of columns 2 is....: 15
The sum of the main diagonal is......: 15
The sum of the other diagonal is.....: 15
Is it a magic square: true
    at assignment6.Square.sumCol(Square.java:42)
    at assignment6.SquareTest.main(SquareTest.java:36)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

SquareTest.java

import java.util.Scanner;
import java.io.*;
public class SquareTest {

public static void main(String[] args) throws IOException
{
Scanner scan = new Scanner(new File("magicData.txt"));
int count = 1; //count which square we're on
int size = scan.nextInt(); //size of next square
//Expecting -1 at bottom of input file
while (size != -1)
{
//create a new Square of the given size
    Square Size = new Square(size);
//call its read method to read the values of the square
    Size.readSquare(scan);

System.out.println("\n******** Square " + count + " ********");
//print the square
Size.printSquare();
//print the sums of its rows
for (int row = 0; row < size; row++) {
       System.out.println("the sum of row " + row + "  is...: " + Size.sumRow(row));}
//print the sums of its columns
for (int col = 0; col < size; col++) {
 System.out.println("the sum of columns " + col + " is....: "+ Size.sumCol(col));
//print the sum of the main diagonal
 System.out.println("The sum of the main diagonal is......: "+ Size.sumMainDiag());
//print the sum of the other diagonal
  System.out.println("The sum of the other diagonal is.....: "+ Size.sumOtherDiag());
//determine and print whether it is a magic square
 System.out.println("Is it a magic square: " + Size.magic());
//get size of next square
size = scan.nextInt();
count++;
}

}

}
}

方形.java

import java.util.Scanner;
public class Square {
int[][] square;

//--------------------------------------
//create new square of given size
//--------------------------------------
public Square(int size)
{
 square = new int [size][size];

}
//--------------------------------------
//return the sum of the values in the given row
//--------------------------------------
public int sumRow(int row)
{
int sum = 0;
for(int i=0; i < square.length; i++){
sum+=square[row][i];
}
 return sum;


}
//--------------------------------------
//return the sum of the values in the given column
//--------------------------------------
public int sumCol(int col)
{int sum = 0;
for (int i = 0; i < square.length; i++){
    sum = sum + square[i][col]; }
return sum;
}
 //--------------------------------------
 //return the sum of the values in the main diagonal
  //--------------------------------------
 public int sumMainDiag()
{int sum = 0;
 for (int i = 0; i < square.length; i++) {
  sum = sum + square[i][i];
}
   return sum;
 }
//--------------------------------------
//return the sum of the values in the other ("reverse") diagonal
//--------------------------------------
public int sumOtherDiag()
{int sum = 0;
 for (int i = 0; i < square.length; i++) {
 sum = sum + square[i][square.length - 1 - i];
 }
 return sum;

}
//--------------------------------------
//return true if the square is magic (all rows, cols, and diags have
//same sum), false otherwise
//--------------------------------------
public boolean magic()
{boolean magic = true;
int sum = sumMainDiag();
if (sumOtherDiag() != sum) {
            magic = false;}
else {
       for (int row = 0; row < square.length; row++) {
           if (sum != sumRow(row)) {
           magic = false;}

       for (int col = 0; col < square.length; col++) {
            if (sum != sumCol(col)) {
             magic = false;}



}
       }
}
return magic;
}
//--------------------------------------
//read info into the square from the input stream associated with the
//Scanner parameter
//--------------------------------------
public void readSquare(Scanner scan)
{
for (int row = 0; row < square.length; row++)
for (int col = 0; col < square.length; col ++)
square[row][col] = scan.nextInt();
}
//--------------------------------------
//print the contents of the square, neatly formatted
//--------------------------------------
public void printSquare()
{
     for (int row = 0; row < square.length; row++)
        for (int col = 0; col < square.length; col++) {
         System.out.print(square[row][col] + " ");

}
}
}

魔法数据.txt

3
8 1 6
3 5 7
4 9 2
7
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20
4
48 9 6 39
27 18 21 36
15 30 33 24
12 45 42 3
3
6 2 7
1 5 3
2 9 4
4
3 16 2 13
6 9 7 12
10 5 11 8
15 4 14 1
5
17 24 15 8 1
23 5 16 14 7
4 6 22 13 20
10 12 3 21 19
11 18 9 2 25
7
30 39 48 1 10 28 19
38 47 7 9 18 29 27
46 6 8 17 26 37 35
5 14 16 25 34 45 36
13 15 24 33 42 4 44
21 23 32 41 43 12 3
22 31 40 49 2 20 11
-1

最佳答案

问题是您在遍历所有列的循环中更改 size 的值:

for (int col = 0; col < size; col++) {
   // etc...

   size = scan.nextInt();
}

你可能是这个意思:

for (int col = 0; col < size; col++) {
   System.out.println("the sum of columns " + col + " is....: "+ Size.sumCol(col));
}

//etc...

size = scan.nextInt();

关于java - 我的 squaretest 也没有分析其他大小和 ArrayIndexOutofBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8262033/

相关文章:

java - 新创建的图形对象仅在调整框架大小后显示

java - 如何使用 StickerView 撤消和重做功能?

C 编程数组索引越界

Java 截断 punct {.} 之前的字符串

java - 奇怪的未定义方法错误

java - JIT 能否从泛型中获益?

android.database.cursor 索引越界异常?

java.lang.ArrayIndexOutOfBoundsException : -1 future. get() 多线程

java - 密码程序的字符串索引越界异常错误 - 不允许使用数组

java - 是JDK的bug吗?