16. oktober 2004 - 17:33Der er
27 kommentarer og 1 løsning
ArrayList - Er jeg på rette spor?
Jeg skal nu lave en "telefonbog" der kan rumme et navn og et telefonnummer, man skal kunne indtaste navn og nummer samt søge og slette. Se det der falder mig ind er en ArrayList da vi ikke skal anvende en database. Men jeg kan vel ikke umiddelbart indtaste navn og telefonnummer i en ArrayList uden at gøre det i samme streng, kan jeg? Jeg mener f.eks hvis jeg har en klasse eller metode til navn og en til nummer så kan jeg ikke forbinde dem uden et id? Programmet skal indtil videre kører i konsollen men vi skal tage højde for at der skal tilføjes et GUI på et senere tidspunkt, hvad menes der mon med det?
Jeg ville nok oprette et "Person" objekt, hvor du så kan have navn, telefonnummer osv i streng værdier. Disse Personobjekter kan du så gemme i en ArrayList. Så kan du lave en søgning der kan gennemløbe disse objekter!
Så svar til dit spørgsmål.. ja, du kan sagtens være på rette spor! :)
hmm.. jeg prøver at bikse lidt med det og poster så lidt kode, Arne, jeg er bange for at det du nævner som mulighed 2 ligger et stykke over mine evner. Men jeg prøver lige at se hvor langt jeg kan komme. Vender frygteligt tilbage her.
Jeg prøver lige at bede om en kommentar til disse linier, hvor skal jeg placere min ArrayList? Og jeg skal helst have en klasse til bruger interaktion, dette havde jeg tænkt mig med en switch i min main, lyder det helt gak?
using System; using System.Collections;
namespace Phonebook {
class Person
{ public static int nameCount=0; //her er det meningen at jeg vil //tælle hvor mange personer // der bliver oprettet
public void Names () {
nameCount++;
}
public void AddNewName() { Person.Add(new Person()); Console.WriteLine("New name added!"); Printstats(); }
public void Printstats()
{ Console.WriteLine("(Number of Names in phonebook" + nameCount); }
[STAThread] static void Main(string[] args) { // her havde jeg tænkt mig min printmenu skulle komme // // } } }
class MainClass { public static void Main(string[] args) { ArrayList lst = new ArrayList(); lst.Add(new MyData(1)); lst.Add(new MyData(2)); lst.Add(new MyData(3)); for(int i = 0; i < lst.Count; i++) { MyData md = (MyData)lst[i]; Console.WriteLine(md.V); } } }
public class MyData { private int v; public MyData(int v) { this.v = v; } public MyData() { v = 0; } public int V { get { return v; } set { v = value; } } }
public class MitObjekt { private int etNummer; public MitObjekt(int etNummer) { this.etNummer = etNummer; } public int GetObjektNummer() { return etNummer; } }
public class MitObjektComparer : IComparer { int IComparer.Compare(Object o1, Object o2) { return (((MitObjekt)o1).GetObjektNummer() - ((MitObjekt)o2).GetObjektNummer()); } }
class MainClass { public static void Main(string[] args) { ArrayList list = new ArrayList(); list.Add(new MitObjekt(3)); list.Add(new MitObjekt(2)); list.Add(new MitObjekt(1)); for(int i = 0; i < list.Count; i++) { Console.WriteLine(((MitObjekt)list[i]).GetObjektNummer()); } list.Sort(new MitObjektComparer()); for(int i = 0; i < list.Count; i++) { Console.WriteLine(((MitObjekt)list[i]).GetObjektNummer()); } } }
Nu er jeg kommet (måske) lidt videre men jeg kan ikke rigtigt gennemskue hvordan jeg skal håndtere disse get og set, her er hvad jeg har indtil videre
class Person
{ private string name; private int phonenumber;
public Person(string initialName, int initialPhoneNumber) { name = initialName; phonenumber = initialPhoneNumber;
}
class Book { private ArrayList names;
public void Names() { names = new ArrayList(); int initialPhoneNumber; string initialName; Console.WriteLine("Type a name"); initialName=Convert.ToString(Console.ReadLine()); Console.WriteLine("Type a phonenumber"); initialPhoneNumber=Convert.ToInt32(Console.ReadLine()); names.Add(new Person(initialName,initialPhoneNumber));
} }
[STAThread] static void Main(string[] args) { // her havde jeg tænkt mig min printmenu skulle komme // // } } }
jeg har prøvet med følgende men får en fejl omkring liste.Add, hvordan kan jeg evt. udskrive i WriteLine for at se om mine nye person er oprettet i min liste? hvis jeg kan få det til at virke vl at mærke;
class Person { private string name; private string phonenumber;
public string Name { get {return name;} set {name = value;} } public string PhoneNumber { get {return phonenumber;} set {phonenumber = value;} } public Person(string initialName, string initialPhoneNumber) { name=initialName; phonenumber=initialPhoneNumber; }
ArrayList liste=new ArrayList(); Person p = new Person("viggo","12345678");
liste.Add(new p);
public static void Main(string[] args) { Console.WriteLine("test"); } } }
class Person { private string name; private string phonenumber;
public string Name { get {return name;} set {name = value;} } public string PhoneNumber { get {return phonenumber;} set {phonenumber = value;} } public Person(string initialName, string initialPhoneNumber) { name=initialName; phonenumber=initialPhoneNumber; }
aha, tak Arne, det lader til at det jeg skrev i morges ikke er blevet postet ( var nok for søvnig) smid et svar så jeg ikke glemmer det. Jeg har downloadet SD da jeg ikke har råd til licens for VS på min laptop, ved du om jeg kan sætte SD til at debugge mens man taster ind ligesom VS? Jeg prøver at bøvle lidt videre men undre mig over at den siger ::::: (47): The name 'initialName' does not exist in the class or namespace 'Phonebook.Person' Det mener jeg jo at det gør jvn. ovenstående kode; min main har jeg prøvet således : public static void Main(string[] args) { ArrayList liste=new ArrayList(); Console.WriteLine("Add name"); initialName = Console.ReadLine(); Console.WriteLine("Add phone"); initialPhoneNumber = Console.ReadLine(); liste.Add(initialName,initialPhoneNumber); for (int i =0; i<liste.Count;i++) Console.WriteLine(liste[i]); Console.ReadLine(); } } }
ahhhhhhhhhhr... for .... Ja jeg lærer noget hvergang, problemet er bare at huske det. Jeg ved godt at du bruger SD, det var det der gav mig ideen, det er en lille smule anderledes end VS men prisen er jo i orden 8>)
jamen det skal det Arne! Tusind tak nu må jeg se om jeg selv kan komme videre
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.