Avatar billede tonika Nybegynder
01. november 2009 - 21:17 Der er 31 kommentarer og
1 løsning

array Strings sammenlign

Hej,

Et lille spørgsmål om en sag der er ved at drive mig til vanvid.

Jeg har to arrays bestående af strings.

Jeg skal have talt hvor mange af det ene arrays strings der er i det andet. Der skulle gerne være mere end et enkelt match for hver string.

Spørg endelig hvis det ikke er forklaret godt nok.
Avatar billede tonika Nybegynder
01. november 2009 - 21:21 #1
Jeg havde selv tænkt mig noget i retningen af:

for (int j = 0 ; j < mitEne.length ; j++){
        for (int i = 0 ; i < detAndet.length ; i++){
              if(mitEne[i].equalsIgnoreCase(detAndet[i])){
              //gem ordet i nyt midlertidigt array
              count++;
              }
              else{
              count = count;
              }
        }
}
Avatar billede erikjacobsen Ekspert
01. november 2009 - 21:21 #2
Hvad har du prøvet? Kode?
Avatar billede erikjacobsen Ekspert
01. november 2009 - 21:26 #3
Du skal bare have styr på om du mener i eller j, så er den vist ok (men kan laves smartere - det ser vi på når det virker).

Du behøver slet ikke din else, men den gør heller ingen skade.
Avatar billede tonika Nybegynder
01. november 2009 - 21:46 #4
for(int j=0; j<temp.length;j++){
    for (int i = 0 ; i < urlTextArray.length ; i++){
        if(urlTextArray[i].equalsIgnoreCase(temp[j])){
            count++;
        }
        else{
        count = count;
        }                   
    }
}

Sådan ser min rigtige kode ud. Og den virker fint så længe temp kun indeholder et enkelt ord. Og det er jo ikke holdbart. Hvad skal jeg gøre for at få gemt de ord der matcher i et array eller en string?
Avatar billede erikjacobsen Ekspert
01. november 2009 - 21:52 #5
Hvad er problemet?
Avatar billede tonika Nybegynder
01. november 2009 - 21:59 #6
Problemet er at så længe temp kun indeholder et ord virker det fint. Men jeg vil gerne have det skal kunne indeholde flere ord. Og finde match på alle ordene et efter et. Mit spørgsmål er hvordan jeg kan få gemt de ord der matcher i en string eller array samt antal gange de optræder.
Avatar billede erikjacobsen Ekspert
01. november 2009 - 22:04 #7
Dit oprindelige spørgsmål går på "Jeg skal have talt hvor mange af det ene arrays strings der er i det andet." - der stod ikke noget om at du også skulle have ordene ud.

Kan du ikke give et eksempel på hvad du mener?
Avatar billede tonika Nybegynder
01. november 2009 - 22:09 #8
Ok... Jamen jeg prøver at forklare det så godt jeg kan.

Mit ene array består af f.eks. rød, grøn, blå og sort.

Det andet består kun af rød og grøn.

Det jeg skal bruge er jo så en udskrift der hedder rød 1 og grøn 1.

Giver det mening nu?
Avatar billede erikjacobsen Ekspert
01. november 2009 - 22:12 #9
Det var da et eksempel ;)

Hvad med

for(int j=0; j<temp.length;j++){
    count=0;
    for (int i = 0 ; i < urlTextArray.length ; i++){
        if(urlTextArray[i].equalsIgnoreCase(temp[j])){
            count++;
        }
    }
    // udskriv temp[i] og count
}
Avatar billede erikjacobsen Ekspert
01. november 2009 - 22:13 #10
Ok, skulle have været:

    // udskriv temp[j] og count
Avatar billede tonika Nybegynder
01. november 2009 - 22:29 #11
Hej igen,

Det er nu altså stadig kun det første ord i temp det virker for. Resten af temp arrayet giver 0; Selvom det burde give mere. Jeg har prøvet at udskrive de to arrays hver for sig. De indeholder begge en bunke ord.

for(int j=0; j<temp.length;j++){
    count= 0;
  for (int i = 0 ; i < urlTextArray.length ; i++){
        if(urlTextArray[i].equalsIgnoreCase(temp[j])){
          count++;
        }                   
  }
  System.out.println(temp[j]+ " "+ count);
}
Avatar billede tonika Nybegynder
01. november 2009 - 22:37 #12
Jeg beklager jeg har fået det til at virke nu........ Der var et lille mellemrum i arrayet før hvert ord på grund af den måde jeg havde splittet stregen på. Da jeg fjernede det virkede det perfekt.

Tak for hjælpen.
Avatar billede erikjacobsen Ekspert
01. november 2009 - 22:40 #13
Mente det nok. Jeg nåede at lave et lille eksempel:

        String[] urlTextArray = {"a","b","c","a","b"};
        String[] temp = {"a","c","d"};
       
        int count;
        for(int j=0; j<temp.length;j++){
            count= 0;
          for (int i = 0 ; i < urlTextArray.length ; i++){
                if(urlTextArray[i].equalsIgnoreCase(temp[j])){
                  count++;
                }                 
          }
          System.out.println(temp[j]+ " "+ count);
        }

som udskriver:

a 2
c 1
d 0
Avatar billede tonika Nybegynder
01. november 2009 - 22:46 #14
Tusind tak for hjælpen ;-) Så blev jeg ikke vanvittig denne gang ;-)

Må man spørge om en anden lille ting, eller skal man så oprette en ny tråd?
Avatar billede tonika Nybegynder
01. november 2009 - 23:02 #15
Nå, jeg opretter en ny ;-)
Avatar billede erikjacobsen Ekspert
01. november 2009 - 23:15 #16
For min skyld må du fortsætte her..... Men husk at afslutte dette spørgesmål - læs: http://jeg-samler-slet-ikke-paa-point-tak.erikjacobsen.com/
Avatar billede tonika Nybegynder
01. november 2009 - 23:17 #17
Afslutter så her......
Avatar billede tonika Nybegynder
06. november 2009 - 15:19 #18
Hej igen,

Håber du lige har tid til at hjælpe mig igen.

Den metode som du har hjulpet mig med ovenfor skal vi bruge til i en thread som skal kunne sove et stykke tid over flere omgange. Når den vågner skal den afprøve metoden igen og gerne i en løkke der fortsætte så længe jeg ønsker.

Problemet er jo så at når jeg vikler metoden ind i en ny løkke tæller den 'dobbelt op' fordi den ikke nulstiller metoden undervejs inden den kalder igen. (det hele er naturligvis i en try-catch) hvordan kan vi få tråden til at 'starte forfra hver gang den kalder metoden'?

for (int i =0; i<10;i++) {
           
System.out.println(o.countWords(o.getSite(), o.getWords()));
currentThread().sleep(minuts);         
           
            }
Avatar billede erikjacobsen Ekspert
06. november 2009 - 16:48 #19
"starte forfra" ?  Jeg forstår ikke hvad du mener.
Avatar billede tonika Nybegynder
06. november 2009 - 17:23 #20
Når jeg kalder den metode som du hjalp mig med i en ny for-løkke, som den jeg viser dig ovenfor, tæller tælleren yderligere op. Dvs. hvis der var 3 forekomster af Rød da den blev kaldt første gang er der 4 næste gang, 5 gangen efter osv. Det er naturligvis ikke korrekt.
o.countWords(o.getSite(), o.getWords()) er den metode du har hjulpet mig med længere oppe.

Derfor ville jeg gerne 'nulstille' min metode så den altid bliver kaldt på ny hver gang en tråd vågner. Giver det mening nu?
Avatar billede erikjacobsen Ekspert
06. november 2009 - 17:41 #21
Hvilken tæller? Variablen count sættes til 0 før hvert gennemløb.
Avatar billede tonika Nybegynder
06. november 2009 - 17:43 #22
Ja i den oprindelige metode gør det. Og det er den metode jeg så endnu engang skal have igennem en for løkke og her tæller den altså op yderligere.
Det forstår jeg heller ikke når vi har sat den til nul i den oprindelige metode.
Avatar billede tonika Nybegynder
06. november 2009 - 19:19 #23
Giver det stadig ingen mening?
Avatar billede erikjacobsen Ekspert
06. november 2009 - 19:22 #24
Nej.
Avatar billede tonika Nybegynder
06. november 2009 - 19:32 #25
Metoden som du hjalp mig med virker fint for sig selv.
Jeg skal dog bruge den til en tråd som skal sove et stykke tid ad flere gang og derefter vågne igen også ad flere gange.

Hver gang tråden vågner vil jeg bruge metoden, som du hjalp mig med for at se om der er et nyt match.

Men når jeg kalder metoden inden i en ny for løkke tæller den dobbelt op og resultatet bliver således hver gang tråden vågner:

Morgenstund 1
i 5

Morgenstund 2
i 10

Som altså kommer af følgende:
for (int i =0; i<10;i++) {         
System.out.println(o.countWords(o.getSite(), o.getWords()));
currentThread().sleep(minuts);             
}
Avatar billede erikjacobsen Ekspert
06. november 2009 - 19:42 #26
Så er det vel fordi dit ene array bliver dubleret - bliver dobbelt så stort?
Avatar billede tonika Nybegynder
06. november 2009 - 19:47 #27
Ja, det er nok rigtigt. Men hvordan undgår jeg det? - Jeg skal jo bruge en løkke igen?
Avatar billede erikjacobsen Ekspert
06. november 2009 - 19:58 #28
Du undgår det vel, ved at lade være med at gøre dit ene array dobbelt så stort - hvis det er årsagen. Det er ikke til at sige hvad det skyldes.
Avatar billede tonika Nybegynder
06. november 2009 - 21:33 #29
Har du en ide til hvordan jeg kan bruge min metode sammen med en tråd der skal sove et vist antal gange uden at bruge en løkke?
Avatar billede erikjacobsen Ekspert
06. november 2009 - 21:43 #30
Nej - jeg vil da bruge en løkke. Det er ikke problemet.
Avatar billede tonika Nybegynder
06. november 2009 - 21:52 #31
Hvis jeg kalder metoden normalt fungerer den jo fint. Så må det da være den nye løkke der ødelægger det hele?

Men jeg spørger i skolen på mandag så.  Tak for hjælpen endnu engang.
Avatar billede erikjacobsen Ekspert
06. november 2009 - 22:07 #32
Der er ingen grund til at det er løkken. Det er givetvis noget i resten af din kode.
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