The assignment is to take a "Magic Square" .txt file (where the horizontal lines, vertical lines and diagonal line all add up to the same number), read it and prove that they are in fact magic squares.
Is anything in this answer bad practice or just bad? I'm using a lot of List
s and for
loops.
package magicSquares;
public MagicSquaresCormac() {
return;
}
private List<List<Integer>> getNumberList(String file) throws IOException {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = null;
Integer num = null;
List<String> lineList = new ArrayList<>();
List<String> charList;
List<List<String>> listOfNums = new ArrayList<>();
List<Integer> numlist;
List<List<Integer>> numListList = new ArrayList<>();
while ((line = br.readLine()) != null) {
line.split("\t");
if (!line.equals("")) {
lineList.add(line);
}
}
for (String lineFromList : lineList) {
// lineFromList.split(" ");
numlist = new ArrayList<>();
charList = Arrays.asList(lineFromList.split("\\s"));
listOfNums.add(charList);
for (String character : charList) {
num = Integer.valueOf(character);
numlist.add(num);
}
numListList.add(numlist);
}
br.close();
return numListList;
}
private boolean horizontalLine(String file) throws IOException {
List<List<Integer>> numListList = getNumberList(file);
boolean isMagic = true;
Integer lastSum = -1;
Integer sum;
for (List<Integer> listNum : numListList) {
sum = 0;
for (Integer i : listNum) {
sum = sum + i;
}
if (lastSum == -1)
lastSum = sum;
else if (!lastSum.equals(sum)) {
isMagic = false;
}
}
return isMagic;
}
private boolean diagonalLine(String file) throws IOException {
List<List<Integer>> numListList = getNumberList(file);
boolean isMagic = true;
Integer sum;
Integer sumDiagonal = 0;
for (int j = 0; j < numListList.size(); j++) {
sumDiagonal = sumDiagonal + numListList.get(j).get(j);
}
sum = sumDiagonal;
if (!sum.equals(260)) {
isMagic = false;
}
return isMagic;
}
private boolean verticalLine(String file) throws IOException {
List<List<Integer>> numListList = getNumberList(file);
boolean isMagic = true;
Integer lastSum = -1;
Integer sum;
List<Integer> tempList;
List<List<Integer>> verticalLists = new ArrayList<>();
for (int k = 0; k < numListList.size(); k++) {
tempList = new ArrayList<>();
for (int i = 0; i < numListList.size(); i++) {
tempList.add(numListList.get(i).get(k));
}
verticalLists.add(tempList);
}
for (List<Integer> listNum : verticalLists) {
sum = 0;
for (Integer i : listNum) {
sum = sum + i;
}
if (lastSum == -1)
lastSum = sum;
else if (!lastSum.equals(sum)) {
System.out.println((lastSum != sum) + "really?");
isMagic = false;
}
}
return isMagic;
}
public static void main(String[] args) throws IOException {
MagicSquaresCormac magicSquaresCormac = new MagicSquaresCormac();
String[] files = {"Mercury.txt", "Luna.txt"};
for (String file : files) {
System.out.println(file + " (horizontal lines) is magic? " + magicSquaresCormac.horizontalLine(file));
System.out.println(file + " (vertical lines) is magic? " + magicSquaresCormac.verticalLine(file));
System.out.println(file + " (diagonal line) is magic? " + magicSquaresCormac.horizontalLine(file));
}
}
}