Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Modificare array all'interno di una classe

    Salve a tutti,
    ho creato una classe dove però un array non viene assolutamente alterato.

    La classe principale è:


    codice:
    import tools.exception.Exception;
    import java.io.File;
    
    public class SintheticBinarySpectrum {
    
    	public static void main(String[] args) throws Exception {
    	    
    	    
    	    File file = new File("/gaia/lte100-3.5-0.0.spec");
    	    ReadNextGenFile results = new ReadNextGenFile(file);
    	    StarMain.Spectrum.lambda = results.getLambda();
    	    StarMain.Spectrum.flux = results.getFlux();
    		
    	    File file2 = new File("/gaia/lte100-2.0-0.0.spec");
    	    ReadNextGenFile results2 = new ReadNextGenFile(file2);
    	    StarSecondary.Spectrum.lambda = results2.getLambda();
    	    StarSecondary.Spectrum.flux = results2.getFlux();
    		
    	    SpectrumInterpolation Interpolation = new SpectrumInterpolation(StarMain.Spectrum.lambda,StarSecondary.Spectrum.flux,StarMain.Spectrum.flux,5.5);
    		
    	    for( int i=0; i<=StarMain.Spectrum.lambda.length -1; i++) 
        	    {
    	      System.out.println ("Total flux ("+i+")= "  + Interpolation.getSum()[i]);
    	     }
    	}
    }
    dove readnextGen è una classe di lettura.

    Invece la classe da me creata è:

    codice:
    import tools.exception.Exception;
    import tools.numeric.interpolation.*;
    
    public class SpectrumInterpolation 
    {
    	private double [] totalflux;
    	
    	public SpectrumInterpolation (double[]l, double []f1, double []f2, double s) throws Exception
        {
        	double [] lambda;
        	double [] flux1 ;
        	double [] flux2 ;
        	
        	double shift;
        	double step;
        	double points;
            	 	
        	lambda=l;
        	flux1=f1;
        	flux2=f2;
        	shift=s;
        	
        	totalflux = new double[lambda.length];
        	 	   	
        	double [] newlambda = new double[lambda.length];
        	double [] newflux2  = new double[lambda.length];
        	
        	    	
        	for( int i=0; i<lambda.length ; i++) 
        	{
        		newlambda[i] = lambda[i] + shift; 
        	}
        
        	step=lambda[2]-lambda[1];
        	points=shift/step;
        	           	       
        	//Interpolazione
        	Interpolator f = new LinearInterpolator();
        	f.setSample(lambda,flux2);
           
        	for (int i=0; i<lambda.length-shift-1; i++) 
        	{
                  newflux2[i] = f.getValue(newlambda[i]); 
            }
        	
        	if (shift>0) 
        	{
                    int j=0;
        		do
        		   {
                          newflux2[j] = 0 ;
    		      flux1[j]=0;
    			j++;
    			} while(j<points);
    	     }       
        	else if (shift<0)
        	{ 
        		int j=lambda.length;
        	    do
        		  {
        		  newflux2[j] = 0;
        		  flux1[j]=0;
        		  j--;
        		 	}while(j>lpoints);
        	}
         
        	 for (int i=0 ; i<lambda.length; i++)
             {
    	    	totalflux[i]= flux1[i] + newflux2[i];
    	  }
      
         }
    	    
    	    public double[] getSum()
        	{
    		 return totalflux;
        	}
    
    }
    Non ho inserito le altre classi implicate perchè solo quest'ultima dà problemi. L'array flux1 infatti nn viene assolutamente modificato. Qualcuno magari sa dirmi quale potrebbe essere il problema e come eventualmente risolverlo? Potrebbe essere legato al fatto che java passa gli oggetti per valore? E in tal caso che si fa?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    leggendo il codice così non si capisce molto quello che fa però sembrerebbe giusto. prova a fare un debug

    codice:
    else if (shift<0)
        	{ 
        		int j=lambda.length;
        	    do
        		  {
        		  newflux2[j] = 0;
        		  flux1[j]=0;
        		  j--;
        		 	}while(j>lpoints);
        	}
    qui nn ti serve metter if (shift<0) metti solo il resto

  3. #3
    La cosa strana che non mi riesco a spiegare è come mai newflux2 venga modificato mentre flux1 no. In pratica la classe dovrebbe cambiare alcuni elementi dei due array e attribuirgli uno zero, per poi sommarli in seguito e darmi il vettore totalflux in uscita. Solo che flux1 rimane immutato e di conseguenza totalflux non è quello che voglio io! Ho giustificato questo fatto considerando che flux1 prende i valori forniti dalla classe col main, mentre newflux2 è un array che viene creato apposta nella mia classe e che quindi può essere modificato. Se davvero così fosse come potrei aggirare l'ostacolo?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    al posto di flux1 modifica direttamente f1

  5. #5
    Intendi dire dal main? Se così fosse non posso, perchè cmq mi serve modificare l'array solo nella classe che ho creato. Oppure non ho capito bene cosa fare...

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    in SpectrumInterpolation metti f1 al posto di flux1.
    penso che il problema sia questa op
    codice:
    flux1=f1;

  7. #7
    Non posso farlo perchè mi dà subito errore, visto che avrebbe lo stesso nome del paramentro in ingresso.

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.