Permalänk

edit arrayList

Jag försöker nu göra en metod för att ändra värden i en arrayList.

Nu undrar jag hur jag kan veta vilket index värde readern jag vill ändra på är sparad i.
som jag förstår det ändrar jag värden såhär: arrList.set(5,newValue);

Där 5 är index värdet och talar om vilken "rad" jag vill göra ändringen på. NewValue är variabeln som innehåller all data.

Jag har en arrayList med användare.
Varje användare har namn, id, address etc.

Så nu vill jag detta:

1. Type the ID of the user you want to edit:

2. Type in new Name:
Type in new Address:

osv.

Men någonstanns känner jag att jag måste specifiera vilket index värde detta ska ske på, hur får jag reda på det?

edit: detta är java

Permalänk
Medlem

Loopa igenom din arrayList och jämför arrayList[i].Id med det Id du vill ändra på, om det matchar so gör arrayList.Set(i, newValue).

Visa signatur
Permalänk

hm... hur skulle en sådan loop se ut.

visa gärna ett litet exempel om du har tid

Permalänk
Medlem

arrList[5] = newValue;

Har du provat google.se? Kolla upp en "tutorial" eller använd tillgänglig dokumentation för språket i fråga.
Indexering är en väldigt fundamental del i programmering. Frågan är om exakt syntax och jag tycker detta bidra till att förstöra forumets programmeringsdel. Snälla försök läsa en "tutorial" i arrays innan du frågar.

Permalänk
Hedersmedlem

Det här forumet är som sagt inte till för att ge kod så en skoluppgift blir löst utan mer som vägledning.

Permalänk

bra, nu är det två som sagt det. då förstår jag....

men det stoppar ändå inte mig från att fråga... jag ska skriva ihop lite nu för jag har fortfarande inte löst detta.

Permalänk
Hedersmedlem

Poängen är alltså att du får försöka göra loopen och om det blir fel så kan du lägga upp koden här så kanske man kan se var du tänker fel och på så sätt lär du dig bättre. Är problemet att du inte har koll på hur man gör en loop överhuvudtaget så kan någon få visa ett exempel på en loop men inte en som just löser ditt problem då.

Permalänk

public Reader searchReader(int readerID) { for (Reader reader : readers) { if (reader.getReaderID() == readerID) { return reader; } } return null; }

Detta använder jag för att söka reda på en reader ID.
Då tänker jag mig att jag kan använda detta för att jämföra det användaren skriver in med readerID som finns i listan och då göra en ändring.
men jag vill ha det i en ny metod

public void editReader(){
readers.set(index, newValue)

Permalänk

jag blir galen, jag förstår vad jag vill göra men problemet är att jag inte förstår hur readerID kan sedan avgöra vilket index som ska användas....

Permalänk
Medlem
Skrivet av hjarterkung:

public Reader searchReader(int readerID) { for (Reader reader : readers) { if (reader.getReaderID() == readerID) { return reader; } } return null; }

Detta använder jag för att söka reda på en reader ID.
Då tänker jag mig att jag kan använda detta för att jämföra det användaren skriver in med readerID som finns i listan och då göra en ändring.
men jag vill ha det i en ny metod

public void editReader(){
readers.set(index, newValue)

Jag förstår fortfarande inte vad du vill ha då du skriver en sak och koden en annan.
Vilket språk är det, java eller C#?
Varför returnerar du en Reader i din searchReader() metod? Är en reader en användare?
Vad är det svåra i att anropa Edit() metoden?

Prova detta:

string users[,] = new string [2,3] {{"1", "Hjärter", "Kung"}, {"2", "John", "Doe"}; // Skapar två första användarna // Här ska du skapa en metod när användaren klickat på knappen. Anropa UpdateUser och skicka med parametrarna ur textboxarna. // Och nu till att faktiskt uppdatera användaren public void UpdateUser(int id, string firstname, string lastname){ users[id] = {id, firstname, lastname}; }

ID, förnamn och efternamn får du ur textboxen så de är givna, hämta dem när användaren klickar på knappen.

Googla på det först nästa gång. Behöver du verkligen hjälp, förklara då bättre vad du gör, hur koden ser ut etc.

Permalänk

mm det är svårt att förklara när man frågar tycker jag.
skulle vilja visa hela koden men det blir en jäkla massa klistrande.

jag förstår inte din kod du skrev, jag skriver i Java fyi (glömde nämna det).

men jag har googlat, så det räcker med att tjata om att jag ska googla och inte skriva här....
jag skriver här och gör mitt bästa för att hitta infon på google. men jag är så pass ny att infon jag hittar har jag svårt att implementera i mitt program.

därför söker jag mer konkreta exempel så jag förstår.
men då förklarar jag dåligt... så nu har jag kört fast

ska testa lite och kanske klistrar jag in all min kod senare om jag inte lyckas

Permalänk
Medlem
Skrivet av hjarterkung:

mm det är svårt att förklara när man frågar tycker jag.
skulle vilja visa hela koden men det blir en jäkla massa klistrande.

jag förstår inte din kod du skrev, jag skriver i Java fyi (glömde nämna det).

men jag har googlat, så det räcker med att tjata om att jag ska googla och inte skriva här....
jag skriver här och gör mitt bästa för att hitta infon på google. men jag är så pass ny att infon jag hittar har jag svårt att implementera i mitt program.

därför söker jag mer konkreta exempel så jag förstår.
men då förklarar jag dåligt... så nu har jag kört fast

ska testa lite och kanske klistrar jag in all min kod senare om jag inte lyckas

Java var ett tag sedan så kodspecifikt kan ajg tyvärr inte hjälpa dig, om än mycket är liknande. att askapa arrayer däremot är inte likt.
Vad i min kod förstod du inte? Kan inte hjälpa dig vidare om du inte berättar det.

Permalänk

Main klass: http://pastebin.com/BzPBtkDM
Library klass: http://pastebin.com/qHTZQBYf
ReaderCollection: http://pastebin.com/DZAyZHYj

Där är mina klasser.
Jag håller på längst ned i MainLibraryProgram med editReader()
(Reader = användare = user)

Det jag vill göra är att
1. Sök upp readerID, dvs vilken användare vill jag ändra på i min Reader arrayList.
2. Utföra ändringen, lägga till nya värden på den valda readern.

Som jag förstått det gör jag detta då med
namnpåarraylist.set(index, value);

då behöver jag först ta reda på vilket index ligger den specefika användaren på?
detta gör jag genom att jämföra det jag skriver in (input) mot de som redan ligger i listan.

Jämförelsen gör jag med en for-loop. Jämför input mot existerande readerID värden.
Sedan en enkel if statement.
Om input är lika med ett readerID
utför då ändringen i arrayListan.

Men jag kan inte utföra det i koden.
Läser om och om igen... men har kört fast.

Permalänk
Hedersmedlem

Okej, är det något mer specifikt du kör fast på? Kan du börja med ett göra loopen? Kan du skriva villkoret för if-satsen? Kan du utföra ändringen i arraylistan?

Var är det liksom skon klämmer?

Permalänk

Ungefär såhär:

public int SearchID (String ID){ for(int i=0; i<array.size(); i++) { if(array[i].id.compareToIgnoreCase(ID)==0){ return i; } }

Detta är ju om du vill få tillbaka index på vart ditt ID ligger!

Visa signatur

MSI P67A-GD55 | Core i7 2600k @4.0 Noctua NH-D14| Corsair HX 650W | Corsair Dominato r8 GB | XFX Radeon 6950 2 GB | Samsung 500 GB + 2x 160 GB | Corsair Force 120 GB || NAD C326BEE | Cerwin Vega VS-10 | LG LH4000| Samsung SyncMaster EX2220

Permalänk

efter många om och men så har jag något konkret att visa vad jag gjort.....

detta har jag lagt till i main klassen

private void editReader(){ int readerID = readInt("What reader ID do you want to edit: "); int index = library.indexOf(readerID); String name = readString("Name: "); int birthYear = readInt("Birth Year: "); Address address = readAddress(); PhoneNo phoneNo = readPhoneNo(); Email email = readEmail(); Reader theEditedReader = new Reader(name, readerID, birthYear, address, phoneNo, email); library.editReader(index, theEditedReader); System.out.println("Reader " + name + " added"); }

detta har jag lagt till i
library klassen

public void editReader(int index, Reader theEditedReader){ readerCollection.editReader(index, theEditedReader); } public int indexOf(int readerID){ return readerCollection.indexOf(readerID); }

detta i readerCollection klassen

public int indexOf(int readerID){ Reader r; for(int index = 0; index < readers.size(); index++){ r = readers.get(index); if(readerID == r.getReaderID()); return index; } return -1; } public void editReader(int index, Reader theEditedReader){ readers.set(index, theEditedReader); }

Jag kan utföra en ändring när jag kör metoden i main klassen.
Allt funkar fint. MEN..... jag kan bara ändra index 0 i arrayListan.
den bryr sig inte om jag skriver ID numret på en reader som finns längre ned i listan, utan den ändrar bara första personen i listan ändå.

Permalänk
Medlem
Skrivet av hjarterkung:

efter många om och men så har jag något konkret att visa vad jag gjort.....

detta har jag lagt till i main klassen

private void editReader(){ int readerID = readInt("What reader ID do you want to edit: "); int index = library.indexOf(readerID); String name = readString("Name: "); int birthYear = readInt("Birth Year: "); Address address = readAddress(); PhoneNo phoneNo = readPhoneNo(); Email email = readEmail(); Reader theEditedReader = new Reader(name, readerID, birthYear, address, phoneNo, email); library.editReader(index, theEditedReader); System.out.println("Reader " + name + " added"); }

detta har jag lagt till i
library klassen

public void editReader(int index, Reader theEditedReader){ readerCollection.editReader(index, theEditedReader); } public int indexOf(int readerID){ return readerCollection.indexOf(readerID); }

detta i readerCollection klassen

public int indexOf(int readerID){ Reader r; for(int index = 0; index < readers.size(); index++){ r = readers.get(index); if(readerID == r.getReaderID()); return index; } return -1; } public void editReader(int index, Reader theEditedReader){ readers.set(index, theEditedReader); }

Jag kan utföra en ändring när jag kör metoden i main klassen.
Allt funkar fint. MEN..... jag kan bara ändra index 0 i arrayListan.
den bryr sig inte om jag skriver ID numret på en reader som finns längre ned i listan, utan den ändrar bara första personen i listan ändå.

Tja. Du "returnar" ju bara index, vilket är noll. Så det är ju inte så konstigt.

Visa signatur

gg

Permalänk

Hur ska jag göra då?

Skickades från m.sweclockers.com

Permalänk

löst, puh!
Behövde lite sömn kanske... nu såg jag direkt att if satsen inte funka som den skulle

tack för all hjälp

Permalänk
Hedersmedlem

Haha har själv haft det där felet ett antal gånger. Semikolon efter villkoret är inte så bra