Visualizzazione dei risultati da 1 a 2 su 2

Discussione: funzione ricorsiva

  1. #1

    funzione ricorsiva

    salve, ho un problema con la seguente funzione ricorsiva, non so il perchè (il bello che non sempre da problemi) arrivato all'istruzione in cui la funziona richiama se stessa viene eseguita l'istruzione che è presente nella catch...sicuraramente l'errore sarà stupido ma non riesco a trovarlo....
    codice:
    public static void mergeSort(int tot,DataInputStream fin[],int t,int f){ 		 		try{ 			 		FileOutputStream f1=new FileOutputStream ("ordinato.txt",true); 		BufferedOutputStream b1=new BufferedOutputStream (f1); 		DataOutputStream fOUT =new DataOutputStream (b1); 		 		 		if (t==1){ 			fOUT.writeUTF(c[f]);//se è rimasto un solo file da scrivere scrivo tutti i suoi record rimanenti 			fOUT.writeUTF(nome[f]); 			 			fOUT.writeInt(eta[f]); 			fOUT.writeInt(u[f]); 			while (true){ 				try{ 					fOUT.writeUTF(fin[f].readUTF()); 					fOUT.writeUTF(fin[f].readUTF()); 					fOUT.writeInt(fin[f].readInt()); 					fOUT.writeInt(fin[f].readInt()); 					fOUT.flush(); 				}catch (EOFException e){ 					fOUT.close(); 					fin[f].close(); 					break; 				} 			} 		}else{//altrimenti eseguo la funzione ricorsiva 			int temp=0;String temps; 			DataInputStream tempf; 		for (int i=f;i<tot;i++){ 			c[i]=fin[i].readUTF(); 			nome[i]=fin[i].readUTF(); 			eta[i]=fin[i].readInt(); 			u[i]=fin[i].readInt(); 		} 		 		try { 			while (true){ 				for (int i=f;i<tot-1;i++){ 					for (int j=i+1;j<tot;j++){ 						if (u[i]>u[j]){ 							temp=u[i]; 							u[i]=u[j]; 							u[j]=temp; 							 							temp=eta[i]; 							eta[i]=eta[j]; 							eta[j]=temp; 							 							temps=c[i]; 							c[i]=c[j]; 							c[j]=temps; 							 							temps=nome[i]; 							nome[i]=nome[j]; 							nome[j]=temps; 							 							tempf=fin[i]; 							fin[i]=fin[j]; 							fin[j]=tempf; 							 						} 					} 				} 				 				fOUT.writeUTF(c[f]); 				fOUT.writeUTF(nome[f]); 				fOUT.writeInt(eta[f]); 				fOUT.writeInt(u[f]); 				 				fOUT.flush();  				 				c[f]=fin[f].readUTF(); 				nome[f]=fin[f].readUTF(); 				eta[f]=fin[f].readInt(); 				u[f]=fin[f].readInt(); 				 			} 			}catch (EOFException e){ 				fin[f].close(); 				fOUT.close(); 				mergeSort(tot,fin,t-1,f+1); 			} 		} 		 		}catch(Exception e){ 		System.out.println("Errore nel sorteMerge"); 		} 	}

  2. #2
    Allora...i TAG code da soli non formattano il codice ,quindi mettici dentro del codice formattato perché così non si capisce nulla.
    Ho dato comunque uno sguardo rapido alla funzione e perdonami se te lo dico è un po un casino...dal codice deduco che l'obiettivo è leggere un file con dentro un array non ordinato, eseguire un algoritmo merge sort ricorsivo sull'array , e infine salvare il file con l'array ordinato. Ebbene il primo consiglio è fare esattamente queste 3 cose utllizzando 3 metodi distinti, l'unico dei quali ricorsivo deve essere quello che esegue il merge sort, tu hai messo tutto assieme in un guazzabuglio notevole (con la ciliegina del while(true)..). Proviamo a ripartire dall'inizio strutturando la cosa come ti ho scritto (sempre se ho capito bene l'obiettivo) e posta il codice se eventualmente non va.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.