ciao a tutti! ho un problema e spero che qualcuno possa aiutarmi!!
ho una tabella di un database strutturata come segue:
user id(int) articolo(int) prezzo(double) quantita(int) reparto(int)
dove le colonne acquisto e reparto sono identificate da interi piuttosto che da stringhe. Dovrei costruire una matrice diagonale (o più semplicemente triangolare) come segue:
articolo1 articolo 2 articolo3
articolo1
articolo2
articolo3
e riempire ogni cella della matrice facendo il confronto tra i due articoli in questione secondo la regola del coseno.....ovvero, la coppia art1-art2 secondo la regola del coseno, quella art1-art3 secondo la regola del coseno ecc.ecc. Il ragionamento fatto consiste nel salvare in un array (mediante una query) gli id degli articoli venduti e mediante la sua lunghezza costruire la matrice triangolare.Non sono esperto di java, qualcuno può darmi una mano? il codice che finora ho usato è il seguente:
codice:package evolution; import java.util.List; public class Matrice { int[][]matrice; int i,j; //creo una matrice triangolare inferiore in cui inserire i valori matrice = new int [job.length][]; //job è un array di interi che identificano gli id degli articoli acquistati...vedi sotto for(i=0; i<matrice.length;i++) { matrice[i] =new int[i+1]; } /*confronto le stringhe due per volta*/ for(i=0;i<job.length;i++) for(j=i+1;<job.length;j++) { //asesso vorrei inserire nella matrice triangolare 0 sulla diagonale e per ogni riga i rispettivi //valori for(i=0; i<matrice[i].length;i++) { for(j=0;<matrice[i].length;j++){ if(i==j){ matrice[i][j]=0; System.out.println(matrice[i][j]+""); }else matrice[i][j]=coseno; //inserisco nelle celle diverse dalla diagonale il confronto effettuato tramite la regola del //coseno..vedi sotto System.out.println(matrice[i][j]+""); } } } } return matrice; } }
codice:import java.sql.*; import java.util.Vector; public class prova { private String driver = "com.mysql.jdbc.Driver"; private Connection connessione; public Statement state; private ResultSet result; public Connection connessione(){ try{ Class.forName(driver); }catch(ClassNotFoundException e){ System.out.println("Driver non caricato in memoria!!"); System.exit(1); } try{ connessione = DriverManager.getConnection("jdbc:mysql://localhost/schedule"+"?user=root&password=pass"); }catch(SQLException e){System.out.println("Errore accesso"); System.exit(2);} return connessione; } public static void main(String args[]) { Object job[] = new Object []; StringBuffer qry = new StringBuffer(); qry.append("SELECT distinct articolo FROM tabella order by articolo"); String query = new String(qry.toString()); Statement stmt = null; ResultSet rs = null; ResultSetMetaData md =null; int columns = new Integer(0); Vector row=new Vector(columns); Vector data = new Vector(); Connection c = null; try { prova cal = new prova(); c=cal.connessione(); stmt = c.createStatement(); rs = stmt.executeQuery(query); md = rs.getMetaData(); columns = md.getColumnCount(); while(rs.next()) { for (j = 0; j <= columns; j++) { System.out.println("sono nel for: ["+i+"] ["+j+"]"); // stampa di prova tabella[i][j] = rs.getObject(j+1); } i++; } for(i=0; i<=3; i++) { for(j=0; j<=5; j++) { System.out.println("prova->"+tabella[i][j]); //stampa di prova array pieno } } } catch(SQLException e) { System.out.println("errore table "+e); } } }codice://regola del coseno private double matchingUser1VsUser2(int[] vet1,int[] vet2) { double modVet1=0,modVet2=0; double result=0; for(int index=0;index<vet1.length;index++){ if( vet1[index]!=0 && vet2[index]!=0 ) modVet1 += (double) (Math.pow(vet1[index], 2)); } modVet1 = (double) Math.sqrt(modVet1); for(int index=0;index<vet2.length;index++){ if( vet1[index]!=0 && vet2[index]!=0 ) modVet2 += (double) (Math.pow(vet2[index], 2)); } modVet2 = (double) Math.sqrt(modVet2); for(int index=0;index<vet2.length;index++){ result += vet1[index]*vet2[index]; } result = result / ( modVet1*modVet2 ); if( Double.isNaN(result)==true ) result=0; return result; }

Rispondi quotando