Avatar billede daliwi Nybegynder
29. november 2005 - 17:55 Der er 8 kommentarer og
1 løsning

compareTo i en for-løkke!

Jeg skal lige have noget på det rette i Java:

Hvis man benytter compareTo på den måde at man sammenligner to Strings, og ønsker at køre en for-løkke så længe at de to Strings ikke er identiske så kan man skrive således, ik:

for(string1 = "???"; !(string1.compareTo(string2)==0); string1 = metode(string1))

Hvad så hvis man ønsker at den også lige skal køre den sidste gang med hvor de er identiske?

Kan man så vælge ==1:

for(string1 = "???"; !(string1.compareTo(string2)==1); string1 = metode(string1))

Gerne hurtige svar tak!
Avatar billede mikkelbm Nybegynder
29. november 2005 - 18:09 #1
String str1;
String str2;

while (str1.compareTo(str2) == 0)
{
    str1 = ""; // et eller andet
    str2 = ""; // et eller andet
    System.out.println (str1 + ", " + str2);
}


Skulle gerne skrive alle de forekomster ud, hvor de to strenge er ens.

Og nej, du kan ikke spørge på om det giver 1. Medmindre du vil vide om forskellen på de to strenge giver returværdien 1.

Lidt info fra dokumentationen:

"the value 0 if the argument string is equal to this string; a value less than 0 if this string is lexicographically less than the string argument; and a value greater than 0 if this string is lexicographically greater than the string argument."

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html
Avatar billede mikkelbm Nybegynder
29. november 2005 - 18:11 #2
Hov. Jeg tror lige jeg læste dit spørgsmål forkert.
Avatar billede mikkelbm Nybegynder
29. november 2005 - 18:13 #3
Du kan ikke gøre det du vil inde i din løkke. For du sætter jo en betingelse op, og den følger løkken bare.
Avatar billede schwarz84 Nybegynder
29. november 2005 - 19:11 #4
Med en direkte oversættelse af dine kode bliver det:

string1 = "???"
do {
  //Din kode
  string1 = metode(string1));
} while (!string1.compareTo(string2)==0);

do-while udfører koden og tester bagefter. Ved den sidste kørsel af løkken er strengene således ens.

Det er i øvrigt nok pænere at bruge equals en compareTo:

string1 = "???"
do {
  //Din kode
  string1 = metode(string1));
} while (!string1.equals(string2));
Avatar billede schwarz84 Nybegynder
29. november 2005 - 19:12 #5
Hvor "Din kode" betyder at her skriver du det du vil udføre i din løkke...
Avatar billede mikkelbm Nybegynder
29. november 2005 - 19:14 #6
Hold kæft ja, hvordan kunne jeg glemme do-while :) Jeg tror nu egentlig heller ikke at jeg har brugt den til noget fornuftigt i længere tid.
Avatar billede jakoba Nybegynder
02. december 2005 - 04:35 #7
men do-while løser da ikke problemet her. det skal gøres een gang til *efter* der er testet ens, og det bliver der heller ikke med do-while.

det eneste jeg kan komme på er:

String dinKode ( String atr ) {    // actions samtet i een metode
  //Din kode
  return metode(str));
}

while( ! string1.equals(string2) ) {
    string1 = dinKode( string1 );    // sålænge de ikke er ens
}
string1 = dinKode( string1 );        // og så een gang til for prins Knud

mvh JakobA
Avatar billede daliwi Nybegynder
21. december 2005 - 12:52 #8
Jeg glemte helt at lukke dette spm, sorry!
Do while løste ikke helt mit problem, men jakoba's løsning virkede, så smider du ikke lige et svar?
Avatar billede jakoba Nybegynder
21. december 2005 - 21:39 #9
ok
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