Avatar billede touel Nybegynder
21. oktober 2008 - 20:13 Der er 12 kommentarer og
1 løsning

Gennemløbe en String

skal bruge noget ala en funk som kan gennemløbe en String.

Hvis jeg ex har ordet "tommer", skal funk gennemløbe enten som char eller som char array.

funk har i forvejen en ArrayList som indeholder ord, ex.:

tommer  Rigtig

Tommer  Fejl,stor T,resten er rigtig

tOmmer  Fejl,lille t rigtig, stor O forkert,resten rigtig

tomer  Fejl,mangler lile m,resten rigtig

TommeR  Fejl,Stor T og R, resten rigtig

med disse 5 ord, vil det så kun være den første som vil passe med det oprindelige ord.

På resten skal den give fejl,og fortælle hvilke fejl det er.

jeg har siddet og leget med dobbel for-løkker, men det blir alt for uoverskueligt... ved at jeg somehow skal bruge char eller charArray
Avatar billede touel Nybegynder
21. oktober 2008 - 20:34 #1
Har foreløbig denne simple funk, som printer, om ordet enten er rigtig eller forkert.

public void findFejl(ArrayList n,String s){
       
        forsog=n;
        tmp=s;

int fejl = 0;  //Tæller antallet af fejl pr. bruger.
        int rigtig = 0; //Tæller de rigtige indtastninger pr. bruger.

for(int i=0;i<forsog.size();i++)
        {
            if(tmp.equals(forsog.get(i)))
            {
                System.out.println("Det passer");
                rigtig++;
            }
            else
            {
    System.out.println("Passer ikke "+forsog.get(i) );
                fejl++;
            }
        }
       
        System.out.println("Der var i alt " +fejl+" fejl");
    }
Avatar billede arne_v Ekspert
21. oktober 2008 - 20:43 #2
Hvorfor ikke gemme ord og resultat i en HashMap<String,String> og saa slet ikke have nogen
loekker overhovedet ?
Avatar billede touel Nybegynder
21. oktober 2008 - 20:56 #3
kigger lige på det
Avatar billede touel Nybegynder
21. oktober 2008 - 21:12 #4
okay, HashMap har en værdi/streng hvortil der er tilknyttet en anden værdi/streng, dvs. de hører sammen.

i mit tilfælde :

HashMap forsog = new HashMap();

forsog.put("tommer","tommer");
forsog.put("tommer","Tommer");
forsog.put("tommer","tOmmer");
forsog.put("tommer","tomer");
forsog.put("tommer","TommeR");

hmmm...øhhmm, kan ikke se hvordan det skulle hjælpe mig ???
Avatar billede arne_v Ekspert
22. oktober 2008 - 00:48 #5
forsog.put("tommer","Rigtig");
forsog.put("Tommer","Fejl,stor T,resten er rigtig");
forsog.put("tOmmer","Fejl,lille t rigtig, stor O forkert,resten rigtig");
forsog.put("tomer","Fejl,mangler lile m,resten rigtig");
forsog.put("TommeR","Fejl,Stor T og R, resten rigtig");
Avatar billede touel Nybegynder
22. oktober 2008 - 00:50 #6
ok fandt ud af at hvis jeg bytter om på "tommer" og "Tommer" rækkerne, så printer den ud de felter hvor der er fejl...

men det kunne mine 2 forløkker også fortælle mig

Hvordan opdager jeg eksakt de fejl som er der ?

Tror stadig jeg skal bruge char eller charArray til det?
Avatar billede touel Nybegynder
22. oktober 2008 - 00:52 #7
ohhh nej nej arne...

sorry my bad - tekst jeg har skrevet ved siden af ordene var ment som forklaring, ikke som input til hashmap,sorry.
Avatar billede arne_v Ekspert
22. oktober 2008 - 00:57 #8
OK.

Du kunne bruge et HashSet til hurtigt at checke for om ordet er stavet rigtigt.

Men hvis du vil analysere hvordan ordet er stavet forkert saa skal du igang med
2 loekker.

En loekker som itererer over de kendte ord i array listen. Og en anden loekke som
itererer over bogstaver i ordet og det ord som du sammenligner.

Men det er faktisk enn ret kompleks logik der skal til. Hvordan beslutter du dig
for at det er det ord som er stavet forkert ? Og hvordan definerer du hvad der er
fejlen ? Det er rimeligt komplekst at kode. Du skal starte med at definere
den algoritme du skal bruge.
Avatar billede touel Nybegynder
22. oktober 2008 - 01:06 #9
jeg remser lige hurig op med det jeg har siddet med i dag.

I mine 2 forløkker tjekkede jeg først hele arrayList igenenm.

De fejl som opstod blev vist i en if løkke, i den "indre" for løkke.

jeg prøvede så at omdanne både det oprindelige password og fejlene om til charArray.

Noget så langt at den kunne vise mig de bogstaver som var skrevet forkert, men den

kan ikke finde ud af, hvis der mangler et bogstav, og vise hvilket et det er.

Men problemet er,at når den har fundet fejlen og lad os sige at det er det første

bogstav, som er skrevet forkert, så viser den det, og hopper videre til næste ord,

uden at løbe det forrige ord helt igennem....
Avatar billede touel Nybegynder
22. oktober 2008 - 01:22 #10
men du har ret, det er ret langthåret :0)

public void findFejl(ArrayList n,String s){
       
        forsog=n;
        tmp=s;
        char c='0';
       
        int fejl = 0;  //Tæller antallet af fejl pr. bruger.
        int rigtig = 0; //Tæller de rigtige indtastninger pr. bruger.
       
        System.out.println(forsog);
       
        for(int i=0;i<forsog.size();i++)
        {
            if(tmp.equals(forsog.get(i)))
            {
                System.out.println("Det passer");
                rigtig++;
            }
            else
            {
                    char [] c1=forsog.get(i).toString().toCharArray();
                   
                    for(int j=0;j<tmp.length();j++)
                    {
                        if(c1.equals(tmp))
                        {
                            System.out.println("c1 er " +c1);
                        }
                        else
                        {
                            break;//System.out.println("virker ikke");
                        }
                        for(int k=0;k<c1.length;k++)
                        {
                            if(tmp.equals(c1))
                            {
                                System.out.println("bambino");
                            }
                        }
                    }
                   
                    System.out.println("Passer ikke "+forsog.get(i) );
                fejl++;
            }
        }
       
        System.out.println("Der var i alt " +fejl+" fejl");
    }
Avatar billede gedfrik Nybegynder
22. oktober 2008 - 01:23 #11
Du kan først og fremmest oprette du arrays, der består af chars for ordet som det skal staves, samt et array for det ord der er skrevet og skal evalueres.

Så laver du en løkke der sammenligner ord for ord. Hvis du finder en fejl, kan du evt. smide de chars der er forkerte ind i en ny liste - fejlListen.

Hvis denne er != 0, kører du en algoritme der analysere hvert bogstav. Hvis det F.eks. er med stort har du opdaget én type fejl og kan fortælle brugeren dette. En anden type fejl er hvis de to arrays er af forskellig størrelse, så ved du de har glemt et bogstav.

Er det ikke nogenlunde det du søger!? I øvrigt, Kig String klassens dokumentation igennem, så du er helt up to date med hvilke metoder den indeholder :)
Avatar billede gedfrik Nybegynder
22. oktober 2008 - 01:26 #12
*Rette-funktion. Vink Eksperten!!*

du arrays = to arrays.
ord for ord = bogstav for bogstav.

Sorry for multi-post.
Avatar billede touel Nybegynder
24. oktober 2008 - 00:29 #13
Så jeg igen ved at gå sur i den...

Status :

Jeg kan frasortere de ord som passer med mit password.

De ord som ikke passer sendes til en anden funk, som kigger dem igennem,bogstav for bogstav.

Her har jeg pt et problem som jeg ikke kan overskue,uden at skulle bruge for mange for løkker og if - else... Problemet beskriver jeg efter koden.

jeg poster lige koden for begge funk, hvis nogen har forslag er jeg LUTTER øren


import java.util.*;
public class databaseHelper {

    ArrayList forsog;
    static String tmp;
   

   

        public void findFejl(ArrayList n,String s){
       
        forsog=n;
        tmp=s;
   
        char [] gentagpwd = new char [0];  //Indeholder de 30 forsøg pr. bruger.
       
             
        int fejl = 0;  //Tæller antallet af fejl pr. bruger.
        int rigtig = 0; //Tæller de rigtige indtastninger pr. bruger.
       
            for(int i=0;i<forsog.size();i++)
            {
                if(tmp.equals(forsog.get(i)))
                {
                    System.out.println("Det passer");
                    rigtig++;
                }
                else
                {
                    gentagpwd=forsog.get(i).toString().toCharArray();
                    adskilFejl(gentagpwd);
                    fejl++;
                }   
            }
           
            System.out.println("Der var i alt " +fejl+" fejl");
        }
                   
   
           
/*Her kommer kun de ord, som ikke passer med det oprindelige
* password. De tjekkes bogstav for bogstav.
* 3 ArrayList gemmer fejl, afhængig af om man har
* skrevet få,flere, eller undladt bogstaver eller cifre
* i overensstemmelse med det oprindelige password.
*/       
        public void adskilFejl(char [] c){
           
            char []tempchar = new char[30];
            tempchar = c;       
            char [] pwd =new char[30];
            pwd = tmp.toCharArray();       
            ArrayList fejllist = new ArrayList();  //Forkert indtastede bogstaver eller cifre.
            ArrayList glemtlist = new ArrayList(); //Undladt at skrive en/flere bogstaver eller cifre.
            ArrayList langlist = new ArrayList();  //Skrevet for mange bogstaver eller cifre.
           
            for(int j=0;j<tempchar.length;j++)
            {
           
                if(tempchar[j]==pwd[j])
                {
                    System.out.println(tempchar[j]+" Er ens "+pwd[j]);
                }
                else
                {
                   
                    System.out.println(tempchar[j]+" 123 ");
                    if(tempchar[j]==pwd[++j]||tempchar[j]==pwd[--j])
                    {
                        System.out.println(tempchar[j]+" '''' "+pwd[++j]);
                       
                    }
                    else
                    {
                        System.out.println("Prøve");
                    }
                   
                   
                    if(tempchar.length==pwd.length)
                    {
                        System.out.println("ordene har samme længde");
                       
                    }
                    else
                    {
                        int t1 = tempchar.length;
                        int t2 = pwd.length;
                       
                        if(t1<t2)
                        {
                            int t3=t2-t1;
                            glemtlist.add(new Character(tempchar[j]));
                            System.out.println("der mangler "+t3+" bogstav");
                        }
                        else
                        {
                            int t4=t1-t2;
                            langlist.add(new Character(pwd[j]));
                            System.out.println("Der er "+t4+" for mange bogstaver");
                        }
                       
                    }
                   
                    fejllist.add(new Character(tempchar[j]));
                    System.out.println(tempchar[j]+" er fejlen");
                   
               
                }
               
            }
           
            for(int k=0;k<fejllist.size();k++)
            {
                System.out.println("Følgende fejl fundet " + fejllist.get(k));
            }
        }
}       
               
               
Hvis mit oprindelige password er ex: SDBd5C, og alle ander skal passe til den, så hvis vi siger at i et tilfælde så passer den frem til B, hvorefter der er undladt "d"(red. SDB5C),så kan jeg dog få 5 og 5 til at finde hinanden, men kan ikk få C og C til at finde hinanden...

dvs. selv hvis har undladt et bogstav i starten af et ord, så skal den stadig kunne sammenligne resten af ordet og evt. finde flere fejl.

Håber det gav mening !!!
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