Я недавно вернулся к программированию и решил изучать Java как свой первый основной язык.Я получил довольно далеко без каких-либо серьезных проблем, пока я не начал углубляться в сохранение файлов.Я в значительной степени пошел с первым методом, который я встретил;потоковый ввод и вывод.Проблема, с которой я сталкиваюсь, заключается в методе analysisIncidents.Если пользовательских данных не существует, метод работает правильно, и я получаю ожидаемый результат.Если пользовательские данные СУЩЕСТВУЮТ, тогда будет запущен первый оператор if ... then в "analysisIncidents", но он никогда не найдет условный оператор истинным.Однако после удаления файла UserData.sav все снова работает.Я потратил часы на проверку выходных данных на всех этапах программы, но до сих пор не могу найти причину, по которой оператор if ... then завершается неудачно при использовании загруженных данных, но в противном случае выполняется успешно.Я также попытался сохранить, а затем загрузить данные прямо перед тем, как они будут брошены в «analyIncidents», и они будут работать при первом прогоне, но после этого не получатся при любой попытке.Надеюсь, вы, ребята, можете указать на то, что, я уверен, является очевидной ошибкой с моей стороны.
MAIN:
import java.io.*;
import java.util.*;
public class nutralyzeApp {
static Scanner userInput = new Scanner(System.in);
public static void main(String[] args) {
int elements = 0;
int selectedElement = 0;
int[][] incidentAnalysis = new int[2][50];
String newElement = "999";
String[][] data2012 = new String[366][51];
//Checks to see if previous save file exists. If not, creates new save file.
File f = new File("C:/Users/Liam/Dropbox/Workspace/Nutralyze/UserData.sav");
if(f.exists()) {
System.out.println("Previous work session loaded.");
data2012 = loadData();
} else {
data2012[0][0] = "granola";
data2012[0][1] = "gluten";
data2012[0][2] = "sugar";
data2012[0][3] = "beef";
data2012[1][0] = "dairy";
data2012[8][0] = "cheese";
data2012[59][0] = "pizza";
data2012[59][1] = "chips";
data2012[206][0] = "beer";
data2012[206][1] = "cheese";
data2012[8][50] = "incident";
data2012[59][50] = "incident";
data2012[85][50] = "incident";
data2012[190][50] = "incident";
data2012[206][50] = "incident";
saveData(data2012);
}
System.out.println("What day is it? ");
int currentDay = userInput.nextInt();
elements = numberOfElements(currentDay,data2012);
System.out.println("Elements consumed that day: " + elements);
System.out.println("What element would you like to add?");
newElement = userInput.next();
while (!newElement.equals("49")) {
data2012 = addElement(currentDay,elements,newElement,data2012);
elements = numberOfElements(currentDay,data2012);
System.out.println("What element would you like to add?");
newElement = userInput.next();
}
System.out.print("Which element would you like to see? ");
selectedElement = userInput.nextInt();
while (selectedElement != 49) {
System.out.println("The element you selected is: " + data2012[currentDay][selectedElement]);
System.out.println("You typed: " + selectedElement);
System.out.print("Which element would you like to see? ");
selectedElement = userInput.nextInt();
}
data2012 = gatherElements(data2012);
incidentAnalysis = analyzeIncidents(data2012);
for (int x=0;x<10;x++) {
System.out.print(data2012[365][x] + " --> " + incidentAnalysis[0][x] + "/" + incidentAnalysis[1][x]+ "\n");
}
//Resets data and saves to file.
for (int x=0;x<50;x++) {
data2012[365][x] = null;
}
saveData(data2012);
}
МЕТОДЫ:
private static int[][] analyzeIncidents(String[][] userData) {
boolean found = false;
int elements1 = 0;
int elements2 = 0;
int incidentCounter = 0;
int currentIncident = 0;
int[] incidentDates = new int[365];
int[][] incidentReport = new int[2][50];
for (int x=0;x<365;x++) {
if (userData[x][50]=="incident") {
incidentDates[incidentCounter]=x;
incidentCounter++;
System.out.println(userData[x][50]);
}
}
System.out.println(incidentCounter + " " + userData[8][50]);
elements1 = numberOfElements(365,userData);
for (int x=0;x<elements1;x++) {
for (int y=0;y<incidentCounter;y++) {
currentIncident = incidentDates[y];
elements2 = numberOfElements(currentIncident,userData);
for (int z=0;z<elements2;z++) {
if ((userData[365][x]==userData[currentIncident][z]) && (found==false)) {
incidentReport[0][x]++;
incidentReport[1][x]++;
} else if ((userData[365][x]==userData[currentIncident][z]) && (found==true)) {
incidentReport[1][x]++;
}
}
}
}
return incidentReport;
}
private static String[][] gatherElements(String[][] userData) {
int z = 0;
int elements = 0;
int uniqueElements = 0;
boolean found = false;
for (int x=0;x<50;x++) {
userData[365][x] = null;
}
//userData[365][0] = userData[0][0];
for (int x=0;x<365;x++) {
elements = numberOfElements(x,userData);
for (int y=0;y<elements;y++) {
while (z<50) {
if (userData[365][z]!=userData[x][y]) {
z++;
found=false;
} else if (userData[365][z]==userData[x][y]) {
z=50;
found=true;
break;
}
}
z=0;
if (found==false) {
userData[365][uniqueElements] = userData[x][y];
uniqueElements++;
}
}
}
return userData;
}
private static String[][] addElement(int day,int position,String newElement,String[][] userData) {
userData[day][position] = newElement;
return userData;
}
private static int numberOfElements(int day, String[][] userData) {
int x = 0;
while (userData[day][x] != null && x < 365) {
x++;
}
return x;
}
private static void saveData(String[][] data2012) {
try{
// Open a file to write to, named UserData.sav
FileOutputStream saveFile = new FileOutputStream("UserData.sav");
// Create an ObjectOutputStream to put objects into save file
ObjectOutputStream save = new ObjectOutputStream(saveFile);
// Now we do the save
save.writeObject(data2012);
// Close the file
save.close(); // This also closes saveFile
}
catch(Exception exc){
exc.printStackTrace(); // If there was an error, print the info
}
}
private static String[][] loadData() {
String[][] userData = new String[366][51];
try{
// Open file to read from, named UserData.sav
FileInputStream saveFile = new FileInputStream("UserData.sav");
// Create an ObjectInputStream to get objects from save file
ObjectInputStream save = new ObjectInputStream(saveFile);
// Now we do the restore
// readObject() returns a generic Object, we cast those back
// into their original class type
// For primitive types, use the corresponding reference class
userData = (String[][]) save.readObject();
// Close the file
save.close(); // This also closes saveFile
}
catch(Exception exc){
exc.printStackTrace(); // If there was an error, print the info
}
return userData;
}
}