Salve a tutti,
il mio professore mi ha assegnato questa tesina...ma ogni volta che vado a ricevimento non riesco a capire perchè a lui non va bene eppure se lo eseguo funziona.Dunque devo calcolare n punti in d dimensioni nell'intervallo [0,1)^d studiare al variare di d ed n:
-distanza massima tra due punti grandi
-distanza minima
-mediare su più esperimenti con stessi d ed n
Input: variabili d,n
Output:su un file visualizzare n d max min

Io l'ho scrittto in questo modo:
codice:
import javax.swing.*; //PER I VARI JOPTIONPANE
import java.util.*; //PER ORDINARE L'ARRAY (sort)
import java.io.*; //PER I FILESTREAM
public class programma{
	/**
	 * @param args
	 */
// CREAZIONE METODO PER IL CALCOLO DEL FATTORIALE
	static long fattoriale(long x){
		long f=x;
		for (long i=x; i>1; i--){
			f*=(i-1);
		}
		return f;
	}
// CREAZIONE METODO PER SCRIVERE SUL FILE
	public static void salva(String cosa, String cosa_b){
		try{
			FileOutputStream file = new FileOutputStream("file.txt");
			PrintStream Output = new PrintStream(file);
			Output.println(cosa);
			Output.println(cosa_b);
			System.out.println("Scrittura su file eseguita correttamente");
		} catch (IOException e){
			System.out.println("Errore: "+ e);
			System.exit(1);
		}
	}
	public static void main(String[] args) {
		int d, n;
// CREO CICLO PER VERIFICARE CHE I NUMERI IMMESSI SIANO ENTRAMBI MAGGIORI DI 0 E N<20 
		do{
			n=Integer.parseInt(JOptionPane.showInputDialog("Inserisci il numero di punti (massimo 20):"));
			d=Integer.parseInt(JOptionPane.showInputDialog("Inserisci il numero della dimensione:"));
		}while (n<0 || d<0 || n>20);
		long combinazioni_l = fattoriale(n)/(fattoriale(n-2)*fattoriale(2)); //CALCOLO COMBINATORIO
		int combinazioni = new Long(combinazioni_l).intValue(); //PER INDICE ARRAY
			double [][] punti_b = new double[n][d]; // CREO L'ARRAY MULTIDIMENSIONALE CONTENTE I PUNTI
// RIEMPIO L'ARRAY DEI PUNTI
			for (int i=0; i<n; i++){
				for (int j=0; j<d; j++){
				punti_b[i][j]=Math.pow(Math.random(), d); // PUNTI NELL'INTERVALLO [O,1)^d
				}
			}
			double [] sottrazione = new double[combinazioni]; //CREO L'ARRAY PER SALVARE LA DISTANZA
			int puntatore_b = 0; // CREO VARIABILE PER INCREMENTO INDICI ARRAY SOTTRAZIONE
			double valore=0; //VAR PER LA SOMMATORIA DELLA DIFFERENZA DELLE COORDINATE
//CALCOLO E SALVO LA DIFFERENZA DI TUTTI I PUNTI
			for (int i=0; i<n-1; i++){ //N-1 DATO CHE NON DEVO SOTTRARRE L'ULTIMO ELEMENTO
				for (int x=i+1; x<n; x++){
					for (int f=0; f<d; f++){//PER FARE LA DIFFERENZA DI OGNI COORDINATA
					valore += Math.pow(Math.abs(punti_b[i][f]-punti_b[x][f]), 2); //DIFFERENZA COORDINATE
					}
					double diff = Math.sqrt(valore);
					valore=0; //PER AZZERRARE LA SOMMATORIA PRECEDENTE
					sottrazione[puntatore_b]=diff; //SALVO NELL'ARRAY LA DIFFERENZA
					puntatore_b++;
				}
			}
			Arrays.sort(sottrazione); //ORDINO L'ARRAY IN MANIERA CRESCENTE
			System.out.println("La distanza massima tra i punti random scelti a caso è: " +sottrazione[sottrazione.length-1]);
			System.out.println("La distanza minima tra i punti random scelti a caso è: " +sottrazione[0]);		
			String massimo, minimo;
			massimo = "La distanza massima tra i punti random scelti a caso è: " +String.valueOf(sottrazione[sottrazione.length-1]);
			minimo = "La distanza minima tra i punti random scelti a caso è: "+ String.valueOf(sottrazione[0]);
			salva(massimo, minimo);
		System.exit(0);		
	}
}