Memorizzare e stampare a video valori double

di il
6 risposte

Memorizzare e stampare a video valori double

Salve a tutti,
ho una funzione che mi restituisce dei dati double, che poi vado ad inserire nella cella di una tabella; questo lo faccio chiamando il metodo pubblico insert_data() dell' oggetto tab dal programma principale:

...
tab.insert_data(i, j, result.getSolution());
...
Tale metodo pubblico insert_data() ha questa istruzione:

...
this.tabella[riga][colonna] = dato;
...
Successivamente, con il metodo printTable() vado a stampare il contenuto della tabella, con la seguente istruzione:

System.out.println(this.tabella[j][i]);
Però, non mi escono i numeri che sono stati messi nella tabella; ad esempio, al posto di 0.667 mi visualizza 0.0, al posto di -1 mi visualizza 0.0; solo il valore 1.0 viene visualizzato correttamente. Sapreste dirmi dove sbaglio? Sbaglio nel memorizzare il dato double, oppure nello stamparlo a video, o altrove?

6 Risposte

  • Re: Memorizzare e stampare a video valori double

    Difficile da dire senza vedere altre parti del codice dei metodi ...

    Non è che inverti le coordinate nell'inserimento o nella stampa?
  • Re: Memorizzare e stampare a video valori double

    Nel file principale, Cerca.java, ho il seguente codice che crea una tabella, visualizza i valori di default inizialmente presenti in tale tabella, aggiunge dati double a tale tabella, e poi visualizza tale tabella:
    
    ...
    Table tab = new Table(number_of_NFR, number_of_pattern, nomi_NFR, nomi_pattern);
    tab.printTable();//visualizzo i valori di default contenuti nella tabella
    ...
    tab.insert_data(i, j, result.getSolution());//il metodo getSolution() mi restituisce un double
    ...
    tab.printTable();//stampo la tabella con i valori
    ...
    
    La classe Table che utilizzo per creare la tabella e manipolarla attraverso gli appositi metodi è la seguente:
    
    public class Table
    {
    	private int rows = 0;
    	private int cols = 0;
    	private String rows_titles[] = new String[20];// = new String[rows];
    	private String cols_titles[] = new String[20];// = new String [cols];
    	private double tabella[][] = new double[20][20];// = new double[rows][cols];
    	
    	private void tableSize(int rows, int cols)
    	{
    		this.rows = rows;
    		this.cols = cols;
    	}
    	
    	private void insertTitles(String[] titoli_righe, String[] titoli_colonne)
    	{
    		int i = 0;
    		for(i=0; i<rows; i++)
    			rows_titles[i] = titoli_righe[i];
    		
    		for(i=0; i<cols; i++)
    			cols_titles[i] = titoli_colonne[i];
    	}
    	
    	Table(int rows, int cols, String[] titoli_righe, String[] titoli_colonne)
    	{
    		this.tableSize(rows, cols);
    		this.insertTitles(titoli_righe, titoli_colonne);
    		int i = 0;
    		int j = 0;
    		//double init = 1.1F;
    		//inizializzo la tabella con (rows x cols) valori -1
    		for(i=0; i<rows; i++)
    		{
    			for(j=0; j<cols; j++)
    				this.tabella[rows][cols] = -1;//Double.NaN;
    		}
    	}
    	
    	public void insert_data(int riga, int colonna, double dato)
    	{
    		this.tabella[riga][colonna] = dato;
    	}
    	public double[][] getTable()
    	{
    		return this.tabella;
    	}
    	public void printTable()
    	{
    		int i = 0;
    		int j = 0;
    		System.out.print("\t\t\t");
    		for(i=0; i<cols; i++)
    		{
    			System.out.print(this.cols_titles[i]);
    			System.out.print("\t");
    		}
    		System.out.println();
    		
    		for(j=0; j<rows; j++)//per ogni riga
    		{
    			for(i=-1; i<cols; i++)//per ogni colonna; parto da -1 per stampare a video anche il titolo della riga
    			{
    				if(i==-1)
    				{
    					System.out.print(this.rows_titles[j]);
    					System.out.print("\t\t\t\t");
    				}
    				else
    				{
    					//System.out.printf("%f", this.tabella[j][i]);
    					System.out.println(this.tabella[j][i]);
    					System.out.print("\t\t\t\t");
    				}
    			}
    			System.out.println();
    		}
    		System.out.println();
    	}
    }
    
  • Re: Memorizzare e stampare a video valori double

    La classe Table ha svariati problemi, sia a livello di denominazioni sia proprio concettuali.
    Il problema maggiore e principale è che i parametri rows/cols che passi al costruttore NON vengono usati per dimensionare i tre array che Table contiene.

    Tra l'altro c'è comunque ridondanza, ci si potrebbe basare anche solo sul numero di titoli di righe/colonne.
  • Re: Memorizzare e stampare a video valori double

    Per quanto riguarda l' inizializzazione dei 3 array (rows_titles, cols_titles e tabella) per ora li ho dimensionati in maniera fissa. rows_titles e cols_titles contengono ciò che voglio, non mi danno problemi quando vado a stampare il contenuto, mentre il contenuto del vettore tabella non è quello corretto. Mi potresti dare anche una piccola indicazione più precisa su cosa è sbagliato?
  • Re: Memorizzare e stampare a video valori double

    Salva ha scritto:


    Per quanto riguarda l' inizializzazione dei 3 array (rows_titles, cols_titles e tabella) per ora li ho dimensionati in maniera fissa. rows_titles e cols_titles contengono ciò che voglio, non mi danno problemi quando vado a stampare il contenuto, mentre il contenuto del vettore tabella non è quello corretto. Mi potresti dare anche una piccola indicazione più precisa su cosa è sbagliato?
    Ho rivisto meglio il codice della tua Table ... c'è un bel errore:

    this.tabella[rows][cols] = -1;

    Non devi chiaramente usare rows/cols ma gli indici dei for.
  • Re: Memorizzare e stampare a video valori double

    Mi sono accorto dello stupido errore che ho fatto quando andavo ad inserire in tutte le celle della tabella il valore di default -1:
    
    this.insert_data(rows, cols, -1);//sbagliato!!!!
    this.insert_data(i, j, -1);//corretto!!!!
    
Devi accedere o registrarti per scrivere nel forum
6 risposte