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

Rispondi quotando
