Newsgroup: it.comp.java
Titolo: problemi vector.add

ho un problema con vector. ogni volta che inserisco un oggetto mi
sostituisce tutti gli oggetti precedenti con quello nuovo.
ho una classe persona:
import java.io.Serializable;
class Persona implements Serializable
{
 
    public static String name;
	public static String address;
	public static String number;
	public static String email;
 
}
poi ho una classe rubrica:
import java.io.*;
import java.util.*;
public class Rubrica
{
	public static Persona temp=new Persona();
	public static Persona persona;
	public static Vector vecpers;
	public static BufferedReader buffer = null;
	public static int indice=0;
	private static boolean a=false;
 
        public static void add(nome, indirizzo, telefono, email)
        {               
temp.name
=nome;
			temp.address=indirizzo;
			temp.number=numero;
			temp.email=posta_ele;
 
			vecpers.add(temp);
        }
}
ho provato anche le seguenti istruzioni:
vecpers.addElement(temp);
vecpers.add(indice, temp); chiaramente facendo buon uso di indice
la storia è sempre la stessa.
quando vado a fare la ricerca se immetto il nome dell'ultimo membro
inserito
me lo trova un numero di volte pari a quanti elementi ho inserito in
totale.
è strano ma è così.
potete aiutarmi?
grazie in anticipo

 ha scritto nel messaggio news:3dd81943.04021...@posting.google.com...
Scusa se sono diretto:
dovresti apprendere il linguaggio Java, o meglio l'OOP.
Qualche spunto di studio:
1. Concetto di classe e di istanze (ragionando in termini
    di spazio allocato in memoria)
2. Attributi statici e di istanza (in termini di spazio
    allocato in memoria)
3. Metodi statici e di istanza.
Il tuo problema è che hai allocato solo attributi statici:
credi di lavorare con oggetti diversi, ma stai lavorando
con spazio di memoria comune a tutti: ogni volta che
fai un add, in realtà stai modificando sempre gli stessi
attributi (statici) della classe Persona. Non solo: tutti gli
elementi dell'array si riferiscono sempre alla stessa istanza
di persona (perchè l'attributo temp è static). Scopri prima
che cosa significa static.
Ciao,
GianpieroP

 GianpieroP
Ciao a te,
GianpieroP

grazie mille, sono un principiante. è solo che quando ho visto che non
potevo passare da un contesto statico ad uno non statico ho messo
tutto Static pensando di risolvere i problemi, che sciocco!
ma esiste un modo per chiamare un metodo non static da uno static?
altrimenti come faccio ad utilizzare una variabile non static se il
mio contesto è static?
speriamo essere stato chiaro.
grazie ancora.

 mio contesto è static?
Ripeto: è un problema di allocazione di memoria:
Una classe è un modello per gli oggetti che creerai.
Definisci una classe:
public class Persona {
    public String nome;
    public String cognome;
}
Nel tuo main crei ad esempio una coppia di oggetti:
static public void main(String[] args){
    //Allochi un nuovo oggetto in memoria:
    Persona p1 = new Persona();
    //Allochi un secondo oggetto in memoria (distinto dal primo):
    Persona p2 = new Persona();
    //riempi i campi del primo oggetto:
    p1.nome = "Giovanni";
    p1.cognome = "Rossi";
    //riempi i campi del secondo oggetto:
    p2.nome = "Mario";
    p2.cognome = "Bianchi";
    //ora puoi aggiungere questi due distinti oggetti
    //con i propri spazi di memoria al vettore:
    Vector v = new Vector();
    v.add(p1);
    v.add(p2);
    //v[0] != v[1]
}
NOTA: ho semplificato al massimo:
è bene nell'OOP definire attributi privati
e accedervi mediante "accessor methods".
Rispondero' al tuo primo messaggio modificando
opportunamente il tuo codice.
Ciao,
GianpieroP

 ha scritto nel messaggio news:3dd81943.04021...@posting.google.com...
 import java.io.Serializable;
class Persona implements Serializable
{
    public String name;
    public String address;
    public String number;
    public String email;
}
import java.io.*;
import java.util.*;
public class Rubrica
{
    public Vector vecpers;
    /*public static BufferedReader buffer = null;
    public static int indice=0;
    private static boolean a=false;*/
    public void add(nome, indirizzo, telefono, email)
    {
        //Qui c'è una nuova allocazione:
        Persona temp = new Persona();
 
temp.name
=nome;
        temp.address=indirizzo;
        temp.number=numero;
        temp.email=posta_ele;
        vecpers.add(temp);
    }
}
Ovviamente il main sarà:
static public void main(String[] args){
    //Nuova rubrica:
    Rubrica miaRub = new Rubrica();
    miaRub.add("Mario","via ...","081...",mro...@invalid.invalid);
    miaRub.add...
}
Ciao,
GianpieroP

...
