miXer Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 Jeg har laget en egen funksjon som returnerer en boolean utifra om brukeren angir "yes" eller "no" i konsollet, men min if setning tolker dette helt tullete. Det som skal skje: - Brukeren skriver inn "yes", funksjonen tolker dette som true - Brukeren skriver inn "no", funksjonen tolker dette som false - Brukeren skriver inn noe helt annet, funksjonen tolker dette som false Det som skjer: - Brukeren skriver inn "yes", funksjonen tolker dette som noe helt annet, dermed false - Brukeren skriver inn "no", funksjonen tolker dette som noe helt annet, dermed false - Brukeren skriver inn noe helt annet, funksjonen tolker dette som noe helt annet, dermed false Her er koden som kaller funksjonen: boolean numsPresent = false; numsPresent = readBool(); Her er funksjonen: private static boolean readBool() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { String s = br.readLine(); if (s == "yes") return true; else if (s == "no") return false; else { System.out.println("\nYou entered something weird, so i take that as a big fat NO!"); return false; } } catch (Exception ex) { System.out.println(ex); return false; } } Lenke til kommentar
steingrim Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 if (s == "yes") return true; else if (s == "no") return false; == gjør ikke det du tror den gjør. Stringer er objekter og == sammenligner objekt-likhet, altså om referansene peker til samme objekt. Det gjør de ikke. Det du vil er å bruke equals(), eller muligens equalsIgnoreCase() if (s.equals("yes")) return true; // osv... Lenke til kommentar
miXer Skrevet 3. desember 2009 Forfatter Del Skrevet 3. desember 2009 Takk for svar og løsning. Er vant til C# som er noget mere logisk føler jeg Lenke til kommentar
MailMan13 Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 (endret) En som koder Java til vanlig vil nok si nøyaktig det samme om C# Endret 3. desember 2009 av MailMan13 Lenke til kommentar
Sokkalf™ Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 (endret) Hvilken versjon av java kompilerer du med? == for å sammenligne strings har vel vært gyldig en stund nå? (1.5, 1.6?). Kompilerte et lite testprogram for å verifisere, og jo, det funket å bruke ==. Edit: Jeg er forøvrig helt enig i at .equals() er det "rette" måten å gjøre det på! Endret 3. desember 2009 av Sokkalf™ Lenke til kommentar
miXer Skrevet 3. desember 2009 Forfatter Del Skrevet 3. desember 2009 Jeg bruker 1.6.0_16 Har du det lille testprogrammet ditt, så kan jeg se om det fungerer her å. Og om .equals() er den rette eller ikke, det er vel bare smak og behag tror jeg Lenke til kommentar
Sokkalf™ Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 (endret) Nja, == gir warnings i NetBeans ihvertfall. Vel, testet måten du gjorde det på, og det funker ikke her heller. String y = "yes"; Og deretter : (y == "yes") gir true, men når jeg prøvde å lese inn strengen med readLine, så fungerte det ikke. Litt usikker på hvorfor, men kanskje noen som er litt klokere enn meg kan svare på det. Edit: http://www.devdaily.com/java/edu/qanda/pjq...tml#comment-474 Ser ut som jeg har blitt lurt av java-compileren, .equals er definitivt og i alle tilfeller måten å gjøre det på. Endret 3. desember 2009 av Sokkalf™ Lenke til kommentar
steingrim Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 (endret) Hvilken versjon av java kompilerer du med? == for å sammenligne strings har vel vært gyldig en stund nå? (1.5, 1.6?). Tullball. == er ikke overloadet for String i Java, slik den er i C#. Endret 3. desember 2009 av steingrim Lenke til kommentar
steingrim Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 String y = "yes"; Og deretter : (y == "yes") gir true, men når jeg prøvde å lese inn strengen med readLine, så fungerte det ikke. Grunnen til at det fungerer i det ene tilfellet og ikke det andre har med en liten detalj som heter string interning å gjøre. Alle literale strenger i .java-filene dine opprettes som statiske String-objekter i en String-pool. Dvs at om du har flere "yes"-literaler i .java-filene dine så vil alle disse referere til samme "yes"-objekt i intern-poolen. Men når du kaller readLine() lages et nytt String-objekt. == vil derfor gi false, ettersom dette nye String-objektet ikke er det samme som det som ligger i intern-poolen. Lenke til kommentar
Sokkalf™ Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 Ja, det var det jeg svarte meg selv på i den redigerte posten min over, ref. url'en jeg postet der. Lenke til kommentar
steingrim Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 Heh, gadd ikke klikke på den linken og så ikke at det var du var samme bruker Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå