2012-03-24 10 views
0

Dies ist die dbConnection.java, die eine 2-D-Float-Matrix zurückgibt.Warum kann ich ein float 2-d Array von einer Funktion zur Hauptklasse nicht zurückgeben?

public float [][] connectToDB() throws Exception { 

    Class.forName("com.mysql.jdbc.Driver").newInstance(); 

    // Load the database details into the variables. 
    String dbUrl = "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dataBase; 
    dbString = dbUrl; 
    try { 
     // Create the database connection, if it is closed. 
     if ((conn == null) || conn.isClosed()){ 
      conn = DriverManager.getConnection(dbString, dbUsername, dbPassword); 
      Statement st = null; 
      ResultSet rs = null; 
      st = conn.createStatement(); 
      String query = "select * from Placement"; 
      rs = st.executeQuery(query); 
      ResultSetMetaData rsmd = rs.getMetaData(); 
      int numCols = rsmd.getColumnCount(); 

      while (rs.next()) { 
       float cg = rs.getFloat(1); 
       float m = rs.getFloat(2); 
       float a = rs.getFloat(3); 

       if ((cg > 7.0 && cg <= 9.0) && (m > 75 && m <= 90) && (a > 75 && a <= 90)){ 
        CGPA.add(cg); 
        Marks.add(m); 
        Attendance.add(a); 
       } 
      } 

      Float[] cgpa  = CGPA.toArray(new Float[0]); 
      Float[] marks  = Marks.toArray(new Float[0]); //After elgibility .... Marks are of highest weight 
      Float[] attendance = Attendance.toArray(new Float[0]); 

      int lengthCgpa  = cgpa.length; 
      int lengthMarks  = marks.length; 
      int lengthAttendance = marks.length; 

      float [][] distMatrixCgpa  = new float [lengthCgpa][lengthCgpa]; 
      float [][] distMatrixMarks  = new float [lengthMarks][lengthMarks]; 
      float [][] distMatrixAttendance = new float [lengthAttendance][lengthAttendance]; 
      float [][] distMatrixAverage = new float [lengthAttendance][lengthAttendance]; 

      for (int r = 0; r < lengthCgpa; ++r) { 
       for (int c = 0; c < lengthCgpa; ++c){ 
        distMatrixCgpa [r][c] = calcDistance(cgpa[r], cgpa[c]); 
       } 
      } 
      for (int r = 0; r < lengthMarks; ++r) { 
       for (int c = 0; c < lengthMarks; ++c){ 
        distMatrixMarks [r][c] = calcDistance(marks[r], marks[c]); 
       } 
      } 
      for (int r = 0; r < lengthAttendance; ++r) { 
       for (int c = 0; c < lengthAttendance; ++c){ 
        distMatrixAttendance [r][c] = calcDistance(attendance[r], attendance[c]); 
       } 
      } 
      for (int r = 0; r < lengthAttendance; ++r) { 
       for (int c = 0; c < lengthAttendance; ++c){ 
        distMatrixAverage [r][c] = (distMatrixCgpa [r][c] 
               + distMatrixMarks [r][c] 
                + distMatrixAttendance [r][c])/3; 
       } 
      } 
      *****//This prints the correct float matrix but finally the function 
      //returns a null matrix! :(
      distMatrixFormatted = new float [lengthCgpa][lengthCgpa]; 
      for (int r = 0; r < lengthCgpa; ++r) { 
       for (int c = 0; c < lengthCgpa; ++c) { 
        DecimalFormat df = new DecimalFormat("#.##"); 
        distMatrixFormatted [r][c] = Float.valueOf(df.format(distMatrixAverage [r][c])); 
        System.out.print(distMatrixFormatted [r][c] + " "); 
       } 
       System.out.print("\n"); 
      }***** 

      rs.close(); 
      st.close(); 
     } 
    } catch (SQLException sqlex) { 
      System.out.println("SQLException while connecting and inserting into " + 
          "the database table: " + sqlex.toString()); 
    } catch (Exception ex) { 
      System.out.println("Exception while connecting and inserting into the" + 
           " database table: " + ex.toString()); 
      ex.printStackTrace(); 
    } finally { 
      // Close the Statement and the connection objects. 
      if (conn != null) 
       conn.close(); 
    } 
    return distMatrixFormatted; 
} 

Wenn ich die obige Funktion in main() aufrufen, gibt es eine Null-Matrix ..... (Agnes.java)

public static void main(String args[]) throws Exception { 
      try{ 
       dbConnection P = new dbConnection(); 
       float ad[][] = P.connectToDB(); 
       int length = ad.length; 
       double [][] Array = new double [ad.length][ad.length]; 

       ReadDistance readdistance = new ReadDistance(); 
       Array = readdistance.read(length, Array); 

       ***** 
       //Converting Float Matrix to Double! 
       //This produces Null matrix !!!! 
       for (int i = 0 ; i < Array.length ; ++i) { 
        for (int j = 0 ; j < Array.length; ++j) { 
         Array[i][j] = (double) Array[i][j]; 
         System.out.print(Array[i][j] + " "); 
        } 
        System.out.print("\n"); 
       }***** 

       Agnes agnes = new Agnes(Array, "single"); 
       agnes.run(); 
      } catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 

Was soll ich die richtige Schwimmer Matrix abzurufen tun in der Hauptfunktion?

Bitte helfen!

PS: Beide sind nur Code-Schnipsel

+0

Ich bekomme keinen weiteren Fehler im ganzen Programm .... nur diese Nullmatrix gibt Problem! – Animesh

Antwort

1

Ich glaube, das ist das Problem:

Array[i][j] = (double) Array[i][j]; 

Was Sie waren erwarten, die zu erreichen? Ich vermute, Sie meinen:

Array[i][j] = ad[i][j]; 

Aber in diesem Fall würden Sie nicht die vorherigen Werte von Array überhaupt verwendet werden ... Sie erscheinen zwei „nützlich“ Arrays von Daten in diesen beiden Linien zu erstellen:

float ad[][] = P.connectToDB(); 
Array = readdistance.read(length, Array); 

... aber dann kopieren Sie eins in das andere. Warum? Warum benutzt du nicht beides?

(Nebenbei bemerkt, würde ich fordere Sie dringend, Ihre Variablennamen zu überdenken, und auch connectToDb in eine eher kürzere Methode Refactoring. Wahrscheinlich haben Sie es wollen auch noch etwas anderes nennen, da es mehr als nur Verbindungs ​​ klar tut die Datenbank ...

Verwandte Themen