|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
[C#]Problema con ArrayList
Ho sto cod:
Codice:
public int rimuovi(int num)
{
object tmp;
object numero = num as object;
bool trova = false;
for(int i=0;i<this.nome.Count;i++)
{
if(nome[i] == numero)
{
trova = true;
tmp = int.Parse(tmp);
return tmp;
}
else
{
trova = false;
System.Console.WriteLine("Cognome non Presente\n\t\tRiprovare...................");
}
}
this.cognome[tmp] = null;
this.nome[tmp] = null;
return 0;
}
Slo che mi da: Quote:
Why? |
|
|
|
|
|
|
#2 | |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
errata corrige
ora mi da:
Quote:
Codice:
public string rimuovi(string num)
{
int tmp;
int numero = int.Parse(num);
bool trova = false;
for(int i=0;i<this.nome.Count;i++)
{
if(nome[i] == numero)
{
trova = true;
tmp = numero;
return tmp;
}
else
{
trova = false;
System.Console.WriteLine("Cognome non Presente\n\t\tRiprovare...................");
}
}
int trov = (int)tmp;
this.cognome[trov] = null;
this.nome[trov] = null;
return "";
}
|
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
ap
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2000
Messaggi: 886
|
Scusa ma gli errori che ti indica il compilatore non ti suggeriscono proprio nulla?
__________________
1986/2008 - 22 anni di rabbia cancellati in un giorno. Adesso passeranno altri 22 anni.. |
|
|
|
|
|
#5 | |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
|
|
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
al momento per gli errori ho corretto.................mo vediamo se fa quello che devo fare:
Codice:
public string rimuovi(string num)
{
int numero = Convert.ToInt32(num);
for(int i=0;i<this.nome.Count;i++)
{
if(id[i].Equals(numero))
{
tmp = numero.ToString();
return tmp;
}
else
{
System.Console.WriteLine("Cognome non Presente\n\t\tRiprovare..");
}
}
int trov = Convert.ToInt32(tmp);
this.id[trov] = null;
this.cognome[trov] = null;
this.nome[trov] = null;
return "";
}
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Mi spighi perchè sei fissato con le stringhe ?!!?!? Fai tutte quelle conversioni string->intero->stringa...
Lavora sugli interi e poi fai le conversioni in stringa solo al momento del passaggio della variabile alla funzione |
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
Come funzione va o è tutto cannato?? Ha una sua logica? |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La funzione va...ma direi che sia meglio lavorare sugli interi
Il prametro che passi alla funzione (num) da dove lo prendi ? Dall'input ? |
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
lo prende da una lettura su console
Davvero la funzione ha una logica? |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Perchè non usi il metodo Remove, per eliminare l'elemento dall'ArrayList?
__________________
Chi non cerca trova. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Riguardandola non mi tornano diverse cose...a parte il fatto che non ti conviene lavorare con le stringhe...
Ad esempio scrivi che il cognome non è presente all'interno del ciclo for...ma ti puoi accorgere che il cognome non è presento solo alla fine del ciclo for... Codice:
public int rimuovi(int num)
{
for(int i=0;i<this.nome.Count;i++)
{
if(id[i].Equals(num))
return i;
}
//se sono fuori dal ciclo allora significa che non è stato trovato
System.Console.WriteLine("Cognome non presente\n\t\tRiprovare..");
//tmp qui non ha un valore valido, poi a cosa servirebbe fare una cosa del genere ?
//int trov = Convert.ToInt32(tmp);
//this.id[trov] = null;
//this.cognome[trov] = null;
//this.nome[trov] = null;
return -1; //oppure lanci una eccezione
}
|
|
|
|
|
|
#13 | |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Aspetta...ora ho cpito il senso della tua funzione...
Se usi il return ti esce dal ciclo appena trova l'indice...ma in questo modo ti esce anche dalla funzione... Se vuoi fare le cose bene allora devi fare così : Codice:
public int rimuovi(int num)
{
for(int i=0;i<this.nome.Count;i++)
{
if(id[i].Equals(num))
{
//attento che in questo modo non deallochi comunque la memoria
this.id[i] = null;
this.cognome[i] = null;
this.nome[i] = null;
return i;
}
}
//se sono fuori dal ciclo allora significa che non è stato trovato
System.Console.WriteLine("Cognome non presente\n\t\tRiprovare..");
return -1; //oppure lanci una eccezione
}
|
|
|
|
|
|
#15 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
ti sembra che sti migliorando?
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Il problema è che la funzione andrà bene la prima volta che la chiami, le chiamate seguenti potrebbero invece generarti una eccezione (NullReferenceException).
Ti spiego meglio: supponi di rimuovere, su un elenco di 10 nomi, il numero 4. In questa parte hai scritto: Codice:
this.id[trov] = null;
this.cognome[trov] = null;
this.nome[trov] = null;
In una successiva chiamata alla funzione, che cerca di eliminare per esempio l'elemento 7, il ciclo For passerà ancora sulla posizione 4: Codice:
if(id[i].Equals(num))
__________________
Chi non cerca trova. |
|
|
|
|
|
#17 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
ottima ossevazione.............e se facessi
Codice:
this.id[trov].Remove();
this.cognome[trov].Remove();
this.nome[trov].Remove();
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Mi sa che hai fatto un po' di confusione: nel titolo della discussione hai detto di usare ArrayList, mentre nel codice dimostri di usare array semplici (me ne sono accorto per la presenza della funzione Equals). Puoi confermare? Puoi postare il codice dove hai dichiarato id, cognome e nome?
__________________
Chi non cerca trova. |
|
|
|
|
|
#19 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Codice:
using System;
using System.Collections;
namespace Gestione_Persone
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Princ
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
string num_id,nome, cognome;
string control = null;
do{
Console.WriteLine("Menu:\nI -> inserire\nC -> cancellare\nX -> Uscire\n");
string cosa = Console.ReadLine();
Console.WriteLine("\n");
switch(cosa)
{
case "I":
case "i":
Util util = new Util();
Console.WriteLine("Inserisci il nome:\n");
nome = Console.ReadLine();
Console.WriteLine("\n");
Console.WriteLine("Inserisci il cognome:\n");
cognome = Console.ReadLine();
util.aggiungi(nome, cognome);
Console.WriteLine("\n");
Console.WriteLine("Che vuoi fare ora?\n");
control = Console.ReadLine();
Console.WriteLine("\n");
break;
case "C":
case "c":
Util utils = new Util();
Console.WriteLine("Inserisci l'ID:\n");
num_id = Console.ReadLine();
num_id2 = Convert.ToInt32(num_id);
utils.rimuovi(num_id2);
Console.WriteLine("\n");
Console.WriteLine("Che vuoi fare ora?\n");
control = Console.ReadLine();
Console.WriteLine("\n");
break;
case "X":
case "x":
break;
}
}while(control != "X");
}
}
/// <summary>
/// Summary description for Agenda.
/// </summary>
public class Util
{
/// <summary>
/// La variabili
/// </summary>
public ArrayList id = new ArrayList();
public ArrayList nome = new ArrayList();
public ArrayList cognome = new ArrayList();
public string tmp;
public Util()
{
this.nome = null;
this.cognome = null;
this.id = null;
}
/// <summary>
/// Aggiunge
/// </summary>
/// <param name="nm">Il nome</param>
/// <param name="cgn">Il Cognome</param>
public void aggiungi(object nm, object cgn)
{
try
{
this.nome.Add(nm);
this.cognome.Add(cgn);
this.id.Add(1);
}
catch(System.NullReferenceException MyExceptions)
{
Console.WriteLine(MyExceptions);
}
}
/// <summary>
/// Toglie
/// </summary>
/// <param name="num">Il numero</param>
/// <returns></returns>
public int rimuovi(int num)
{
for(int i=0;i<this.nome.Count;i++)
{
if(id[i].Equals(num))
{
//attento che in questo modo non deallochi comunque la memoria
this.id[i] = null;
this.cognome[i] = null;
this.nome[i] = null;
return i;
}
}
//se sono fuori dal ciclo allora significa che non è stato trovato
System.Console.WriteLine("Cognome non presente\n\t\tRiprovare..");
return -1; //oppure lanci una eccezione
}
}
}
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Prova così:
Codice:
using System;
using System.Collections;
namespace Gestione_Persone
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Princ
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
string num_id, nome, cognome;
int num_id2;
bool control = false;
string cosa;
Util util = new Util();
do
{
Console.WriteLine("Menu:\nI -> inserire\nC -> cancellare\nX -> Uscire\n");
cosa = Console.ReadLine();
Console.WriteLine("\n");
switch(cosa)
{
case "I":
case "i":
Console.Write("Inserisci il nome:");
nome = Console.ReadLine();
Console.Write("Inserisci il cognome:");
cognome = Console.ReadLine();
Console.Write("\n");
util.aggiungi(nome, cognome);
break;
case "C":
case "c":
Console.Write("Inserisci l'ID:");
num_id = Console.ReadLine();
num_id2 = Convert.ToInt32(num_id);
util.rimuovi(num_id2);
break;
case "X":
case "x":
control = true;
break;
}
}while(control != true);
}
}
/// <summary>
/// Summary description for Agenda.
/// </summary>
public class Util
{
/// <summary>
/// La variabili
/// </summary>
private ArrayList id;
private ArrayList nome;
private ArrayList cognome;
private int progressivo;
public Util()
{
this.nome = new ArrayList();
this.cognome = new ArrayList();
this.id = new ArrayList();
progressivo = 0;
}
/// <summary>
/// Aggiunge
/// </summary>
/// <param name="nm">Il nome</param>
/// <param name="cgn">Il Cognome</param>
public void aggiungi(string nm, string cgn)
{
try
{
this.nome.Add(nm);
this.cognome.Add(cgn);
this.id.Add(++progressivo);
}
catch(System.NullReferenceException MyExceptions)
{
Console.WriteLine(MyExceptions);
}
}
/// <summary>
/// Toglie
/// </summary>
/// <param name="num">Il numero</param>
/// <returns></returns>
public int rimuovi(int num)
{
for(int i=0; i<this.nome.Count; i++)
{
if(id[i].Equals(num))
{
this.id.RemoveAt(i);
this.cognome.RemoveAt(i);
this.nome.RemoveAt(i);
return i;
}
}
//se sono fuori dal ciclo allora significa che non è stato trovato
System.Console.WriteLine("Cognome non presente, riprovare...");
return -1; //oppure lanci una eccezione
}
}
}
__________________
Chi non cerca trova. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:35.



















