Forumdelen sponsras av

Kolla om kontoNr redan existerar (Java)

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Jan 2011

Kolla om kontoNr redan existerar (Java)

Hej,

Sitter och håller på med ett enkelt ATM system i Java. Har dock kört fast när det kommer till hur jag ska kolla ifall ett kontoNr redan finns.
Jag använder mig av klassen Random för att skapa ett bankkonto. Vill att detta random-tal ska sparas i en array. När jag sedan skapar ett till bankkonto loopar jag igenom hela arrayen och kollar så att den inte är likadant som ett annat.

Jag har lyckats med att skapa random tal som sedan sparas ner i en array. Min kod + ett av försöken till att lösa mitt problem.
Hittade ej någon "code block" så skickar en snippet istället. https://snipplr.com/view/328930/sweclockers/

Min fråga: Hur kollar jag ifall potentiellt nytt kontoNr redan finns sparat i en array?

tack på förhand!

Trädvy Permalänk
Medlem
Plats
Åland
Registrerad
Jun 2009

Vad är frågan? Om det finns bättre sätt att kolla efter dubletter i en array?
Isåfall är det nog som du beskriver att man får traversera hela arrayen och leta.
Personligen så skulle jag nog inte använda en array utan använda kontonumren som en nyckel i en hashtabell eller något liknande.

Trädvy Permalänk
Medlem
Plats
Umeå
Registrerad
Apr 2009

Vi verkar inte komma åt din kod du har länkat. Det finns Code-taggar här på sweclockers som du kan använda!

Däremot så tror jag vi behöver förstå vad du faktiskt har problem med (det kanske iofs hade varit klarare om vi såg koden).

Är det att traversera arrayen du inte vet hur man gör? För om du kan det så är det ju bara att jämföra med ditt nya konotnummer.

if(accountNumber[i] == newAccountNumber) { // code }

ps. jag har dålig koll på java så jag vet inte riktigt vad man kan göra samt hur man gör olika saker.

Edit: Om det är att traversera arrayen så bör det finnas något liknande som foreach i C#.

Chassi: Fractal Design Define R3, Titanium CPU: Intel Core i7 7700K 4.8 GHz
MoBo: Gigabyte GA-Z270-Gaming K3 GPU: EVGA GTX 970 4 GB
RAM: Corsair LPX 16GB CL15 3000Mhz VENGEANCE SSD: Samsung 750 EVO 500GB
HDD: 500GB Seagate Barracuda 7200rpm PSU: LEPA B1000-MB

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Jan 2011
Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Jan 2011

@willesakken:

Jag vill dubbelkolla ifall ett kontoNr finns i en array eller inte.

https://snipplr.com/view/328930/sweclockers/

Trädvy Permalänk
Medlem
Plats
Finland
Registrerad
Maj 2004

@lodarletarn: Det du gör nu är att du går igenom varje kontonummer i listan, och jämför det med själva listan. Det du bör göra är att skicka det genererade kontonumret till funktionen, och jämföra med det istället.

Dessutom kör du en while-loop som lägger till kontonumret så länge det inte finns (förutsatt att din godakännaKontoNr-funktion skulle fungera rätt). Detta är väl inte vad du är ute efter? Generera i stället ett nytt kontonr tills du får ett som inte redan finns, och lägg sedan till det i listan.

Tips som inte krävs för korrekt program:

Alla listor och samlingar (List och Set) har funktionen contains som kollar ifall ett objekt redan finns i listan. I ditt fall med en lista så är denna funktion dock inte effektivare än sättet du gör det på.

Om ordningen i listan inte är viktig för dej, så kan du använda dig av ett Set i stället. Set kan inte innehålla duplikat, men de har heller inte en ordning (undantag är t.ex. LinkedHashSet, som är en kombination av LinkedList och HashSet). Framför allt HashSet är bra i ditt fall, då funktionen contains på den är väldigt snabb.

En sista detalj är att det i verkligheten inte är effektivt att slumpa fram nummer och kolla om de redan finns. Tänk om du t.ex. redan har skapat 99 kontonummer, och bara har ett ledigt nummer kvar. Du kommer då att måsta slumpa fram väldigt många tal innan du råkar slumpa fram just det sista lediga. Undantag är t.ex. unika ID:n (t.ex. UUID), som är så långa att chansen att du får två likadana är nästan obefintlig.

Trädvy Permalänk
Medlem
Plats
Åland
Registrerad
Jun 2009
Skrivet av lodarletarn:

@willesakken:

Jag vill dubbelkolla ifall ett kontoNr finns i en array eller inte.

https://snipplr.com/view/328930/sweclockers/

Då är det nog att traversera arrayen som gäller och jämföra. Men som Tazavoo skriver här så kan du med fördel använda Javas standardbibliotek för detta.

För övrigt nåt du säkerligen förr eller senare kommer att behöva fundera på: Är det faktist Kund klassens ansvar att generera och validera kontonummer? Varför har ens kundklassen en array av kontonummer?
Och om flera personer någon gång i framtiden kommer att ta del av den här kodbasen, snälla koda ej på svenska. Det blir bara jobbigt att byta språk 2 gånger per rad. Plus det uppenbara att du låser in den till folk som begriper svenska.

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Jan 2011

@willesakken:
@Tazavoo:

Jättetack för svaren båda två! Ska kika på det imorgon och återkommer. Tar också till mig av det ni skriver gällande hur pass icke-effektiv min metod var. Måste försvara mig själv också och säga att jag 99% av gångerna skriver på engelska

Tack igen!