I'm trying to get the values of outputArray that were initialized in the class LightsOutPuzzle in my class, solve. But after printing the elements of the array
1) before calling the class solve in LightsOutPuzzle 2) after calling solve, the elements are not equal, it's as if it has been initialized again.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.StringTokenizer;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class LightsOutPuzzle extends JFrame implements ActionListener {
public JFrame f;
public JPanel p1;
public JPanel p2;
public JButton[] buttonArray;
public JButton solve;
public int nRows = 5;
public int nColumns = 5;
public int nTotalButtons = nRows * nColumns;
public int[] outputArray = new int[25];
public void create() {
init();
gui();
}
public void gui() {
f = new JFrame("Lights Out Puzzle");
f.setVisible(true);
f.setSize(500,500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p2 = new JPanel();
solve = new JButton("Solve");
p2.add(solve);
f.add(p1);
f.add(p2, BorderLayout.SOUTH);
solve.addActionListener(new Action());
}
public void init() {
p1 = new JPanel();
p1.setLayout(new GridLayout(nRows, nColumns, 0, 0));
int[] inputArray = new int[25];
int i=0;
buttonArray = new JButton[nTotalButtons];
for (int nNum = 0; nNum < nTotalButtons; nNum++)
{
buttonArray[nNum] = new JButton("");
add(buttonArray[nNum]);
//clickability
buttonArray[nNum].addActionListener(this);
buttonArray[nNum].setBackground(Color.yellow);
buttonArray[nNum].setActionCommand("" + nNum);
}
//reading config file
BufferedReader br = null;
try {
String line;
br = new BufferedReader(new FileReader("input.txt"));
while ((line = br.readLine()) != null) {
StringTokenizer stringTokenizer = new StringTokenizer(line, " ");
while (stringTokenizer.hasMoreElements()) {
inputArray[i] = Integer.parseInt(stringTokenizer.nextElement().toString());
i++;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
//drawing text input
for(i=0; i<nTotalButtons; i++){
if(inputArray[i] == 1)
buttonArray[i].setBackground(Color.white);
p1.add(buttonArray[i]);
}
}
public void save() {
int i = 0;
for (i=0; i<25; i++) {
if(buttonArray[i].getBackground() == Color.yellow)
outputArray[i] = 1;
else
outputArray[i] = 0;
}
}
@Override
public void actionPerformed(ActionEvent e)
{
//conditions for the puzzle
}
public class Action implements ActionListener {
public void actionPerformed (ActionEvent e) {
int i;
save();
for(i=0; i<25; i++)
System.out.println(outputArray[i]);
new solve();
}
}
public static void main(String[] args) {
LightsOutPuzzle lop = new LightsOutPuzzle();
lop.create();
}
}
At this point, all the elements of outputArray are equal to 1. However, when I print them using the other class, solve, all the elements of outputArray are now equal to 0.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
public class solve extends LightsOutPuzzle {
private JFrame f;
private JPanel p1;
int[] inputArray = new int[25];
int[] zeroArray = new int[25];
int[] UIState = new int[25];
int[] boardState = new int[25];
Queue<int[]> queue = new LinkedList<int[]>();
public solve() {
gui();
init();
}
public void gui() {
f = new JFrame("Solution");
f.setVisible(true);
f.setSize(500,500);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
p1 = new JPanel();
p1.setLayout(new GridLayout(nRows, nColumns, 0, 0));
buttonArray = new JButton[nTotalButtons];
for (int nNum = 0; nNum < nTotalButtons; nNum++) {
buttonArray[nNum] = new JButton("");
add(buttonArray[nNum]);
//buttonArray[nNum].setBackground(Color.white);
buttonArray[nNum].setActionCommand("" + nNum);
p1.add(buttonArray[nNum]);
}
f.add(p1);
}
public void init() {
//drawing text input
int i;
for(i=0; i<25; i++)
System.out.println(outputArray[i]);
for(i=0; i<nTotalButtons; i++){
if(outputArray[i] == 1)
buttonArray[i].setBackground(Color.yellow);
}
}
public static void main(String[] args) {
}
}
I would also appreciate tips about proper programming practices in Java. It's been a long time since I coded in this language so I just tried to create a program from what I can remember..