Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1

    problema vettore

    Ciao a tutti, stavo estraendo degli interi da un database access, ho inserito i risultati in un vettore poi li volevo ricopiare in un array.
    Non potevo inserire i record trovati direttamente in un array poiché non ne conosco a priori le dimensioni.
    Il problema ce l'ho proprio quando vado a ricopiare i dati del vettore nell'array..
    vi posto il pezzo di codice:

    ResultSet res = stat.executeQuery("SELECT DIMENSIONE FROM PRODOTTO");
    Vector voci= new Vector();


    String dimensione;

    while (res.next()) {

    dimensione=res.getString("DIMENSIONE");


    voci.addElement(dimensione);
    }
    int[] risultato=new int[voci.size()];
    for (int z=0; z<risultato.length; z++) {
    risultato[z]=voci.get(z); //qui mi da errore e mi dice
    //found : java.lang.Object
    //required: int
    //tipo incompatibile
    }
    non riesco a capire come si copiano i dati di un vettore in un array..
    grazie a tutti in anticipo
    ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Get() restituisce un object, tu hai fatto un array di interi. In ogni caso gli elementi del tuo vettore sono Stringhe. Puoi fare un array di Stringhe invece che di int o usare il metodo toArray del vettore o, se sei sicuro che le stringhe siano numeri, puoi usare Integer.parseInt() per convertire la stringa in un int.

  3. #3
    simo ti ringrazio per la risposta tempestiva, ma non ci riesco, devo vedere in pratica come si fa..
    ti dico che la colonna contiene interi.
    ciao grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Ad esempio
    codice:
    ResultSet res = stat.executeQuery("SELECT DIMENSIONE FROM PRODOTTO");
    Vector voci= new Vector();
    String dimensione;
    while (res.next()) {
       dimensione=res.getString("DIMENSIONE");
       voci.addElement(dimensione);
    }
    int[] risultato=new int[voci.size()];
    for (int z=0; z<risultato.length; z++) {
       risultato[z]=Integer.parseInt((String)voci.get(z));
    }
    Oppure senza utilizzare il vector
    codice:
    ResultSet res = stat.executeQuery("SELECT DIMENSIONE FROM PRODOTTO");
    res.last();
    int numeroRighe= res.getRow();
    res.first();
    int[] risultato=new int[numeroRighe];
    for (int i=0; i<risultato.length && res.next(); i++) {
       risultato[i]=res.getInt("DIMENSIONE");
    }

  5. #5
    grazie simo, pensa che ci sono rimasto malissimo quando mi hai postato questa parte di codice "risultato[z]=Integer.parseInt((String)voci.get(z));" perchè io continuavo a scrivere
    questo "risultato[z]=Integer.parseInt(voci.get(z));" eh eh
    cmq grazie anche per la seconda versione che non conoscevo.
    volevo fare però un'altra aggiunta a questo codice e cioè che insieme alla dimensione deve comparire anche il titolo(di tipo string) che ho nel database, se mi dai qualche dritta inizio a lavorarci su..
    quindi nella base di dati ho il "titolo"(testo) e "dimensione"(numerico) e alla fine io volevo stampare oltre la dimensione anche il titolo..
    ti posto tutto il codice tanto non è molto..

    import java.lang.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;
    import java.sql.*;

    public class GestioneCd {

    static Vector cd = new Vector();
    static final int DIM_MAX = 700;
    private TextArea outputTextArea;
    private static final String ls = System.getProperty("line.separator");

    //grafica

    public void menu1() {
    //inizio costruzione finestra

    JFrame f = new JFrame("Risultati"); // titolo
    f.setSize(320,200);// dimensione
    f.setLocation(200,200);// posizione
    f.setResizable(false);

    Container c=f.getContentPane();

    outputTextArea = new TextArea(10, 80);
    outputTextArea.setEditable(false);

    c.add(outputTextArea,"Center");//aggiungo l'area al centro
    Interroga();

    f.setVisible(true);//rendo la finestra visibile

    }

    //fine grafica

    public void Interroga(){//interrogo lo base dati

    try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection con = DriverManager.getConnection("jdbcdbc:db");
    Statement stat = con.createStatement();
    ResultSet res = stat.executeQuery("SELECT DIMENSIONE FROM PRODOTTO");
    Vector voci= new Vector();
    String dimensione,titolo;
    while (res.next()) {
    titolo=res.getString("TITOLO");
    dimensione=res.getString("DIMENSIONE");

    voci.addElement(dimensione,titolo);
    }
    int[] dimensioni=new int[voci.size()];
    for (int z=0; z<dimensioni.length; z++) {
    dimensioni[z]=Integer.parseInt((String)voci.get(z));
    }

    for (int i=0;i<dimensioni.length{
    int dimensioneTotale = 0;
    Vector array_cd = new Vector();

    Integer[] ogg = new Integer[dimensioni.length];

    for (int k=0;k<dimensioni.length;k++){
    ogg[k] = new Integer(dimensioni[k]);
    }

    while(dimensioneTotale+dimensioni[i]<=DIM_MAX){
    array_cd.add(ogg[i]);
    dimensioneTotale+=dimensioni[i];
    i++;
    if(i==dimensioni.length){
    break;
    }

    }
    cd.add(array_cd);
    }

    for(int i=0;i<cd.size();i++){
    Vector cdTemp = (Vector)cd.get(i);
    for(int j=0;j<cdTemp.size();j++){
    outputTextArea.append("cd:"+i+" "+cdTemp.get(j)+" ");

    }
    outputTextArea.append(System.getProperty("line.sep arator"));

    }

    res.close();
    stat.close();
    con.close();
    }
    catch (Exception e) {
    outputTextArea.append("Problema: " + e.toString());
    outputTextArea.append(System.getProperty("line.sep arator"));
    }

    }

    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    codice:
    voci.addElement(dimensione,titolo);
    Non lo puoi fare. addElement() vuole un solo Object come parametro.
    Io farei una classe cd che memorizza le info tipo
    codice:
    public class Cd {
       private int dimensione;
       private String titolo;
       public Cd(int dimensione, String titolo) {
          this.dimensione=dimensione;
          this.titolo=titolo;
       }
       public int getDimensione() {return dimensione;}
       public String getTitolo() {return titolo;}
       public String toString() {
          //quello che ti stampa se fai System.out.println(cd);
          return titolo+" "+dimensione;
       }
    }
    Quando fai la query, dentro il while del ResultSet istanzi un nuovo Cd e lo aggiungi al Vector. Poi ci fai quel che vuoi.
    Il codice non l'ho letto attentamente, la prossima volta mettilo tra tag [*code] e [*/code] (senza * naturalmente) che cosi' si capisce meglio.
    Puoi anche lavorare direttamente sui vector, senza usare array tanto il funzionamento e' analogo. L'importante e' che ti ricordi, se non usi i generics, di castare il risultato della get al tipo giusto (in questo caso Cd).

  7. #7
    we simo grazie infinite, provo a fare qualche tentativo, se ho problemi ti faccio sapere
    ciao e ancora grazie

  8. #8
    allora io mi sono creato una classe che si chiama VociCd per le info delle voci che mi servono
    codice:
    public class VociCd {
    	private String titolo;
    	private int dimensione;
    	
    	
    	public VociCd(String titolo,int dimensione) {
    		this.titolo=titolo;
    		this.dimensione=dimensione;
    		
    	}
    	
    	public String getTitolo() {
    		return titolo;
    	}
    
    	public int getDimensione() {
    		return dimensione;
    	}
    	
    	
    	public String toString() {
    		return "TIT: "+titolo+" DIM: "+dimensione;
    	}
    }
    poi ho questa classe GestioneCd che funziona da principale che mi da 4 errori

    codice:
    import java.lang.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;
    import java.sql.*;
    
    
    public class GestioneCd{
    
    
    	static Vector cd = new Vector();
        static final int DIM_MAX = 700;
    	private TextArea outputTextArea;
    	private static final String ls = System.getProperty("line.separator");
    
    
    	//grafica
    
    	public void finestraCd() {
                          	//inizio costruzione finestra
    		JFrame  f = new JFrame("Risultati"); // titolo
    		f.setSize(320,200);// dimensione
    		f.setLocation(200,200);// posizione
    		f.setResizable(false);
    
    
    		Container c=f.getContentPane();
    
    
    		outputTextArea = new TextArea(10, 80);
    		outputTextArea.setEditable(false);
    
    	    c.add(outputTextArea,"Center");
    	    trovavoci();
    
    	   f.setVisible(true);//rendo la finestra visibile
    
    
    
        }
    
        //fine grafica
    
    
    
    		public void trovavoci(){
    
    		try {
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
          Connection con = DriverManager.getConnection("jdbc:odbc:db");
          Statement stat = con.createStatement();
          ResultSet res = stat.executeQuery("SELECT DIMENSIONE,TITOLO FROM PRODOTTO");
          Vector voci= new Vector();
    		VociCd vcd;
    
                            String dimensione,titolo;
    
                            while (res.next()) {
    								
    								titolo=res.getString("TITOLO");
                                    dimensione=res.getString("DIMENSIONE");
                                    vcd=new VociCd(titolo,dimensione); // qui mi dice cannot resolve symbol
                                    /*symbol  : constructor VociCd (java.lang.String,java.lang.String)
    								 *location: class VociCd
    								 */
                                    voci.addElement(vcd);
                            }
                            //begin trasformazione vettore in un array
                            VociCd[] dimensioni=new VociCd[voci.size()];
                            for (int z=0; z<dimensioni.length; z++) {
                            dimensioni[z]=(VociCd)voci.get(z);
                            } 
                  			//end trasformazione
                  			
                  			//begin creazione del vettore cd che contiene al suo interno altri vettori che contengono(titolo e dimensione)
                            for (int i=0;i<dimensioni.length;){
               				int dimensioneTotale = 0;
               				Vector array_cd = new Vector();
    
               				Integer[] ogg = new Integer[dimensioni.length];
    
    						for (int k=0;k<dimensioni.length;k++){
    						ogg[k] = new Integer(dimensioni[k]);//qui mi dice cannot resolve symbol
    						/*symbol  : constructor Integer (VociCd)
    						 *location: class java.lang.Integer
    						 */
    						}
    
               				while(dimensioneTotale+dimensioni[i]<=DIM_MAX){// qui mi dice operator + cannot be applied to int,VociCd
                		   array_cd.add(ogg[i]);
                  			 dimensioneTotale+=dimensioni[i];// qui mi dice operator + cannot be applied to int,VociCd
                   			i++;
                  			 if(i==dimensioni.length){
                     		  break;
                   			}
    
              			 }
              				 cd.add(array_cd);
            			}
    					//end creazione
    					
    					//stampo a video i risultati
            			for(int i=0;i<cd.size();i++){
               			 Vector cdTemp = (Vector)cd.get(i);
               			 for(int j=0;j<cdTemp.size();j++){
                    	outputTextArea.append("cd:"+i+" "+cdTemp.get(j)+" ");
    
         		       }
               			 outputTextArea.append(System.getProperty("line.separator"));
    
           			 }
        
          res.close();
          stat.close();
          con.close();
        }
        catch (Exception e) {
          outputTextArea.append("Problema: " + e.toString());
          outputTextArea.append(System.getProperty("line.separator"));
        }
    
      }
    
    }
    questo è il mio problema..e poi non ho capito ancora una cosa, ma il campo dimensione che ho nel database e che raccoglie interi,deve essere numerico oppure testo che poi trasformo in intero quando faccio le operazioni?
    ciao e grazie

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    1 Errore
    codice:
    titolo=res.getString("TITOLO");
    dimensione=res.getString("DIMENSIONE");
    vcd=new VociCd(titolo,dimensione); // qui mi dice cannot resolve symbol
    /*symbol  : constructor VociCd (java.lang.String,java.lang.String)
    *location: class VociCd
    */
    L'errore significa non trovo il costruttore che prende come parametri due stringhe.
    Vai a vedere nella classe che hai scritto e vedi che in effetti il costruttore prende una stringa e un intero. Ora il campo Dimensione nel db e' numerico no?
    quindi
    codice:
    int dimensione;
    String titolo;
    while (res.next()) {
       titolo=res.getString("TITOLO");
       dimensione=res.getInt("DIMENSIONE");
       vcd=new VociCd(titolo,dimensione);
       voci.addElement(vcd);
    }
    2 Errore
    codice:
    ogg[k] = new Integer(dimensioni[k]);//qui mi dice cannot resolve symbol
    /*symbol  : constructor Integer (VociCd)
     *location: class java.lang.Integer
     */
    Il costruttore di Integer vuole un intero, non un VociCd.
    Se gli devi passare la dimensione usa il metodo getDimensione() di VociCd.

    Errore 3 e 4. Stesso motivo di errore 2.

  10. #10
    ciao simo, grazie ancora dell'aiuto, la prim parte che mi hai detto di correggere io l'ho corretta ed
    in effetti ho fatto un errore sul tipo..
    ora però l'errore
    codice:
    Integer[] ogg = new Integer[dimensioni.length];
    for (int k=0;k<dimensioni.length;k++){
    ogg[k] = new Integer(dimensioni[k]);//qui mi dice cannot resolve symbol
    /*symbol  : constructor Integer (VociCd)
     *location: class java.lang.Integer
    */
    che mi hai detto che il costruttore di Integer vuole un intero, non un VociCd.
    che per passargli la dimensione devo usare il metodo getDimensione() di VociCd,
    quindi mi stai dicendo che Integer[] ogg = new Integer[dimensioni.length]; non è indicato per il mio caso..perchè Integer sta rappresentando un oggetto di interi, quindi come devo fare simo?
    tanto i restanti errori saranno uguali penso.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.