Avatar billede trp79 Nybegynder
08. maj 2002 - 12:54 Der er 10 kommentarer og
2 løsninger

Generering af brugernavn

Jeg vil generere et brugernavn ud fra for- og efternavn, det skal foregår på følgende måde:

Klaus Pedersen bliver til : KlPe

Men hvis kan findes i forvejen skal det være KlaPe

Hvis han findes skal det være KlaPe1
 
  hvis han... Klape2 osv.

Jeg kan godt får den til at lave Klape men hvis denne findes skal der vel laves en eller anden form for rekursiv-metode eller en while-løkke der undersøge på det 6. tegn indtil den finder det største nummer og derefter oprette en bruger med "nummer++".

Jeg kunne godt tænke mig noget respons i form af kode og forklaring.

Indtil videre har jeg følgende kode i mit klasse BinaertTrae:

public String LavBrugerId(String fornavn, String efternavn)
    {
        String brugernavn="";
        if(fornavn.length()>=2 && efternavn.length()>=2)
            {
            String fnavn = fornavn.substring(0,2);
            String enavn = efternavn.substring(0,2);
            brugernavn=fnavn+enavn;
            System.out.println(brugernavn);
            bnavn=brugernavn;

            }
        else
            {
            System.out.println("Du har skrevet mindre end 2 karakter");
            }
    return brugernavn;
    }

    public String LavBrugerId2(String fornavn, String efternavn)
    {
        String brugernavn="";
        if(fornavn.length()>=2 && efternavn.length()>=2)
            {
            String fnavn = fornavn.substring(0,3);
            String enavn = efternavn.substring(0,2);
            brugernavn=fnavn+enavn;
            System.out.println(brugernavn);
            bnavn=brugernavn;
            }
        else
            {
            System.out.println("Du har skrevet mindre end 2 karakter");
            }
    return brugernavn;
    }

    public String LavBrugerId3(String fornavn, String efternavn,int n)
        {
            n=n+1;
            String brugernavn="";
            if(fornavn.length()>=2 && efternavn.length()>=2)
                {
                String fnavn = fornavn.substring(0,3);
                String enavn = efternavn.substring(0,2);
                brugernavn=fnavn+enavn+n;
                System.out.println(brugernavn);
                bnavn=brugernavn;
                }
            else
                {
                System.out.println("Du har skrevet mindre end 2 karakter");
                }
        return brugernavn;



Og i klassen OpretNy:
if (e.getSource() == tilfoej)
        {
            String fn=Fornavn.getText();
            String en=Efternavn.getText();
            if(bt.soegprebrugernavn(bt.rod,bt.LavBrugerId(fn,en))==true)
            {
                if(bt.soegprebrugernavn(bt.rod,bt.LavBrugerId2(fn,en))==true)
                {
                    if(bt.LavBrugerId2(fn,en).length()>5)

                    {
                    String n=bt.LavBrugerId2(fn,en).substring(6,6);
                    int nn=Integer.parseInt(n);
                    System.out.println("yes"+n);
                    bt.indsaet(bt.rod,new Bruger(bt.LavBrugerId3(fn,en,nn),bt.genererPW(5),r));
                    LBrugernavn.setText(bt.getBrugernavn());
                    LPassword.setText(bt.getPassword());
                    LInfo.setText("Dit brugernavn og password er: ");

                    }
                    else
                    bt.indsaet(bt.rod,new Bruger(bt.LavBrugerId3(fn,en,0),bt.genererPW(5),r));
                    LBrugernavn.setText(bt.getBrugernavn());
                    LPassword.setText(bt.getPassword());
                    LInfo.setText("Dit brugernavn og password er: ");

                }
                else
                {
                    bt.indsaet(bt.rod,new Bruger(bt.LavBrugerId2(fn,en),bt.genererPW(5),r));
                    LBrugernavn.setText(bt.getBrugernavn());
                    LPassword.setText(bt.getPassword());
                    LInfo.setText("Dit brugernavn og password er: ");

                }

            }

Bt er det binæretræ som så består af alle brugerne.

Avatar billede disky Nybegynder
08. maj 2002 - 13:39 #1
De bruger id's som findes skal du smide i en hashmap.

Deres key er bruger id'et value er antal man er nået til.

Hvis du sø kommer til KlaPe, og ser den findes, henter du value som nu er 1, så genererer du KlaPe1 som bruger det som ID. og tæller så value for KlaPe 1 op, osv.
Avatar billede trp79 Nybegynder
08. maj 2002 - 14:10 #2
Det må da også være muligt at gøre med en rekursiv metode eller i en while-løkke der undersøger på om brugernavnet består af 6 karakter og hvis det gør, så er den sidste jo et tal. Hvis man så bruger en parseInt på dette tal, vil man kunne køre smøre igen indtil man finder det største tal. Er dette ikke muligt? og i såfald hvordan rent kode mæssigt?
Avatar billede disky Nybegynder
08. maj 2002 - 14:29 #3
jo det er muligt, men jeg kan ikke lige se hvorfor du vil have den skal være rekursiv.

Rent performance mæssigt er den med en HashMap dog klart hurtigere.
Avatar billede trp79 Nybegynder
08. maj 2002 - 14:38 #4
Hvordan vil du, rent kodemæssigt, kreere sådan en HashMap. der er jeg lidt på bar bund.
Avatar billede disky Nybegynder
08. maj 2002 - 15:33 #5
Map map=new HashMap();

Når du så skal smide noget ind i den siger du

map.put(key,new Integer(value));
key er den text ID du har lavet, og value er det antal gange den er brugt

når du skal hente siger du f.eks.

Integer idCount=(Integer)map.get(key);
Hvis den key ikke findes er idCount=null så ved du at du skal lave en ny, ellers kan du lave den til en int via .intValue(), bruge den til at lave et nyt id, tælle en op og .put den tilbage i din hashmap.

p.s. Collections kan være temmelig komplexe at have med at gøre til at starte med, men geniale når man først har styr på det.
Avatar billede quaid Nybegynder
08. maj 2002 - 15:34 #6
Her er et stærk forsimplet eksempel til at forstå hvordan hashMap virker.

import java.util.*;


public class hm
{
    public static void main (String args[])
    {
    HashMap hashmap = new HashMap();   
    hashmap.put("soeren","Experten");       
       
    String kodeord  =(String)hashmap.get("soeren");
    System.out.println("soerens kodeord er    " + kodeord); 
 
    }
}

Som du ser bruges soeren til at beregne hvor i tabellen Eksperten skal ligge. Derefter bruges soeren igen til at beregne hvor den samme oplysning ligger, og henter den ud.
QD::
Avatar billede quaid Nybegynder
08. maj 2002 - 15:37 #7
OK jeg giver op :) Det var jo løsningen på et sølvfad.
QD::
Avatar billede anni01ad Nybegynder
08. maj 2002 - 16:23 #8
Held og lykke med din eksamensopgave på døk. jeg vil følge intenst med i denne diskussion!
Avatar billede trp79 Nybegynder
08. maj 2002 - 19:30 #9
I lige måde Andreas H N :o)
Jeg er desværre stadig total stuckt i denne generering.....
Avatar billede disky Nybegynder
08. maj 2002 - 22:09 #10
hvad er dit problem ?

Vi vil gerne hjælpe dig, men ikke altid lave opgaverne for dig, man lærer mest ved at prøve selv.
Avatar billede trp79 Nybegynder
09. maj 2002 - 10:19 #11
Jep det gør man.... Derfor sidder jeg også og prøver nu med en rekursiv funktion.. tror jeg er tæt på en løsning, men....det er jo aldrig til at vide! ;o) Er ikke helt sikker på den dersens hash-tabel, men må lige se på det... og så give jer pointene...
Avatar billede trp79 Nybegynder
09. maj 2002 - 13:42 #12
Jeg valgte så at bruge en while løkke istedet, og fik det til at funke. Mange tak for de gode hints :o)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester