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