2012-01-23 13 views
0

最近私はプログラミングに飛び乗って、最初の主要な言語としてJavaを学ぶことにしました。私はファイルの保存を掘り下げ始めるまで、大きな問題がなくてもかなり遠くになった。私は、私が出会った最初の方法でかなり行きました。入力と出力のストリーミング。私が遭遇している問題は、メソッド "analyzeIncidents"です。ユーザーデータが存在しない場合、メソッドは正しく実行され、期待される出力が得られます。ユーザーデータが存在する場合は、 "analyzeIncidents"の最初のif ... then文が実行されますが、条件文がtrueになることはありません。しかし、UserData.savファイルを削除すると、すべてが再び機能します。私はプログラムのすべての段階で出力をチェックするのに何時間も費やしましたが、これまでにif ... thenステートメントがロードされたデータを使用すると失敗し、それ以外は成功する理由は見つかりませんでした。私はまた、 "analyzeIncidents"に投げられる前にデータをロードして保存してみました。最初の実行では動作しましたが、それ以降の試みでは失敗します。うまくいけば、皆さんは、私が確信していることが私の一番の間違いであると指摘することができます。もし... .savファイルをロードした後にコンパレータが失敗する

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

} 

答えて

2

は、あなたの代わりにセマンティック平等のために、彼らの参照によって文字列を比較しています。この:

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

(それが最初の正反対だとしてあなたは、第二の条件を必要としません。)

+0

あなたは、ジョンのおかげで、それを釘付け! – sixbux

関連する問題