Oppure

Loading
17/06/16 18:49
lumo
Postato originariamente da MirkoArca:

Grazie per la risposta!
Ci sono altri metodi che posso garantire che le combinazioni siano tutte diverse tra loro?

Grazie!


Ad esempio se togli la chiamata a resetScelti. Peró così esaurisci molto più in fretta i numeri.
Un modo migliore che fa ripetere i numeri ma non le sestine è quello di usare una hashtable che abbia come chiave l'hash della sestina.

In questo caso se hai sei valori l'hash è
x1 + (pBase.length)^1 * x2 + (pBase.length)^2 * x3 + ... + (pBase.length)^5 * x6

Che è il classico modo di fare hashing di una sequenza numerica. Se vuoi che le sestine siano uguali anche quando i numeri sono diversi devi ordinare la sestina prima di hasharla.

Dopodiché usi quel valore per vedere se la sestina era gia apparsa. Un array di valori true/false non è una buona idea perché l'hash può diventare molto grande, o giochi di culo sulle collisioni e vai in modulo oppure usi una hashtable appunto.
aaa
21/06/16 14:10
MirkoArca
Per quanto riguarda l'ordinamento l'avevo già inserito e scrivo le sestine risultanti in file di testo (lo step successivo sarà in una tabella su DB), ma per l'hashtable me lo dovrò studiare, non sono così bravo ed è un argomento che non ho mai affrontato :rofl:

Un'ultima domanda (spero!), se la sestina è uguale l'hash sarà uguale, giusto? a quel punto dovrò rientrare nel ciclo per avere un'altra sestina e non considerare quella uguale, giusto?

Grazie 1000
aaa
21/06/16 18:10
TheDarkJuster
Esattamente. Però puoi anche non escludere il risultato dalla seconda ricerca, difficilmente avrai due volte di fila lo stesso risultato se la estrazione è veramente casuale.
aaa
27/07/16 14:41
MirkoArca
Ciao a tutti,
ho provato ad aggiungere al codice già postato da voi l'inserimento degli elementi dell'array creati random su db Sql, ma ovviamente non funziona :(

Purtroppo mi restituisce degli errori in esecuzione che non capisco, riporto di seguito la classe estrattore e insertsql che contiene il main

Grazie 1000!


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Arrays;

public class InsertSql extends Estrattore
{
	   private String db_connect_string;
	   private String db_userid;
	   private String db_password;
	   
	   
	public InsertSql()
	{ 
		super(base);
			
	}
	
	public void dbConnect() throws Exception
	{
		   
		   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		   
		   db_connect_string = "jdbc:sqlserver://mio_server\mia_istanza";
		   db_userid = "sa"; 
		   db_password = "mia_password";
		   
		 Connection conn = DriverManager.getConnection(db_connect_string,
		          db_userid, db_password);
		 System.out.println("connected");

		
		for (int i = 0; i <= 90; i++) 
		{
		    base[i] = i + 1;
		}
		Estrattore estrai = new Estrattore(base);
		int[] ret= new int[6];
		
		for (int i = 0; i < 10; i++) 
		{ 
						
		    ret=estrai.estrai(ret.length);
			Arrays.sort(ret);
		    
		    String string =("('" + ret[0] + "', " 
					+ "'" + ret[1] + "', "
					+ "'" + ret[2] + "', "
					+ "'" + ret[3] + "', "
					+ "'" + ret[4] + "', "
					+ "'" + ret[5] + "')");
		    
		     Statement stmt = conn.createStatement();
		     String insert = "use super " + string;
		     stmt.executeUpdate(insert);
		}
	   }
	   
  	   public static void main (String[] args) throws Exception
  	   {
  		 InsertSql connServer = new InsertSql();
  		connServer.dbConnect();
  	   }
}





import java.util.Random;

public class Estrattore 
{
 
    public static int[] base;
    public boolean[] scelti;
 
    public Estrattore(int[] pBase)

    {
        Estrattore.base = new int[pBase.length];
        this.scelti = new boolean[pBase.length];
        System.arraycopy(pBase, 0, Estrattore.base, 0, pBase.length);
    }
 
    public int[] estrai(int pNum) 
    {

        int[] retval = new int[pNum];
        Random rand = new Random();
        int random = 0;
        for (int i = 0; i < pNum; i++) 
        {
            do 
            {
                random = rand.nextInt(Estrattore.base.length);
            } while (this.scelti[random]);
            retval[i] = Estrattore.base[random];
            this.scelti[random] = true;
        }
        return retval;
    }
 
    public void resetScelti(){
        this.scelti=new boolean[Estrattore.base.length];
    }
 

}
aaa
27/07/16 15:05
lumo
Dovresti riportare gli errori nel post, tieni conto che
1) chi ti aiuta potrebbe non avere java
2) chi ti aiuta potrebbe non avere sql server
3) chi ti aiuta, anche se avesse java e sql server, non ha voglia di compilare ed eseguire il tuo programma
aaa
27/07/16 15:24
MirkoArca
Si giustissimo, non ci avevo pensato, chiedo scusa!

Questi gli errori, di più non viene riportato (uso eclipse).

Exception in thread "main" java.lang.NullPointerException
    at Estrattore.<init>(Estrattore.java:13)
    at InsertSql.<init>(InsertSql.java:16)
    at InsertSql.main(InsertSql.java:63)


Grazie!
aaa