gpt4 book ai didi

java - 如果...则加载 .sav 文件后比较器失败

转载 作者:行者123 更新时间:2023-12-02 08:00:37 24 4
gpt4 key购买 nike

我最近重新开始编程,并决定学习 Java 作为我的第一门主要语言。在我开始深入研究文件保存之前,我已经取得了很大的进展,没有遇到任何重大问题。我几乎采用了我遇到的第一种方法;输入和输出流。我遇到的问题是在“analyzeIncidents”方法中。如果不存在用户数据,则该方法正常运行并且我得到预期的输出。如果用户数据确实存在,那么“analyzeIncidents”中的第一个 if...then 语句将运行,但它永远不会发现条件语句为真。但是,一旦删除 UserData.sav 文件,一切都会恢复正常。我花了几个小时检查程序各个阶段的输出,但到目前为止还找不到 if...then 语句在使用加载的数据时失败但在其他情况下成功的原因。我还尝试在数据被扔到“analyzeIncidents”之前保存然后加载数据,并且它在第一次运行时有效,但之后的任何尝试都会失败。希望你们能够指出我确定的一个明显的错误。

主要:

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;
}

}

最佳答案

您通过引用来比较字符串,而不是为了语义相等。这:

if (userData[x][50]=="incident")

应该是:

if (userData[x][50].equals("incident"))

或者,如果您想继续,即使 userData[x][50] 为 null:

if ("incident".equals(userData[x][50]))

您在其他地方也做同样的事情:

if (userData[365][z]!=userData[x][y]) {
...
} else if (userData[365][z]==userData[x][y]) {
}

这应该是:

if (!userData[365][z].equals(userData[x][y])) {
...
} else {
}

(您不需要第二个条件,因为它与第一个条件完全相反。)

关于java - 如果...则加载 .sav 文件后比较器失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8967831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com