/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Kan ikke genkende tegn??
Fra : Allan


Dato : 20-05-01 16:24

Hej ng

Jeg har et lille banalt problem, som jeg ikke lige kan gennemskue:

Jeg har lavet to små applikationer, en server- og en klientapplikation.
Klienten sender en streng til serveren, som så reagerer alt efter hvad den
modtager. Men jeg har et problem....hvis jeg f.eks sender et a, så kan jeg
ikke få serveren til at genkende det. Jeg har sat en println ind som skriver
det ud den modtager og den skriver lige så pænt et a, men når jeg laver en
if (input == "a"), så går den ikke ind i if-sætningen.

Er der en bamhjertig sjæl, som kan give mig et godt råd??

Mvh. Allan




 
 
James Olsen (20-05-2001)
Kommentar
Fra : James Olsen


Dato : 20-05-01 16:39


"Allan" <astengaard@hotmail.com> wrote in message
news:9e8nog$a2$1@news.inet.tele.dk...
> Hej ng
>
> Jeg har et lille banalt problem, som jeg ikke lige kan gennemskue:
>
> Jeg har lavet to små applikationer, en server- og en klientapplikation.
> Klienten sender en streng til serveren, som så reagerer alt efter hvad den
> modtager. Men jeg har et problem....hvis jeg f.eks sender et a, så kan jeg
> ikke få serveren til at genkende det. Jeg har sat en println ind som
skriver
> det ud den modtager og den skriver lige så pænt et a, men når jeg laver en
> if (input == "a"), så går den ikke ind i if-sætningen.
>
> Er der en bamhjertig sjæl, som kan give mig et godt råd??

Du kan bruge en af følgende :

if(input.equals("a"))

if(equalsIgnoreCase("a"))

>
> Mvh. Allan
>
>
>



Allan (20-05-2001)
Kommentar
Fra : Allan


Dato : 20-05-01 16:51


"James Olsen" <james_olsen@vip.cybercity.dk> wrote in message
news:9e8ofo$2dha$1@news.cybercity.dk...
>
> "Allan" <astengaard@hotmail.com> wrote in message
> news:9e8nog$a2$1@news.inet.tele.dk...
> > Hej ng
> >
> > Jeg har et lille banalt problem, som jeg ikke lige kan gennemskue:
> >
> > Jeg har lavet to små applikationer, en server- og en klientapplikation.
> > Klienten sender en streng til serveren, som så reagerer alt efter hvad
den
> > modtager. Men jeg har et problem....hvis jeg f.eks sender et a, så kan
jeg
> > ikke få serveren til at genkende det. Jeg har sat en println ind som
> skriver
> > det ud den modtager og den skriver lige så pænt et a, men når jeg laver
en
> > if (input == "a"), så går den ikke ind i if-sætningen.
> >
> > Er der en bamhjertig sjæl, som kan give mig et godt råd??
>
> Du kan bruge en af følgende :
>
> if(input.equals("a"))
>
> if(equalsIgnoreCase("a"))
>
Nu har jeg prøvet begge dele, med samme resultat: Serveren går ikke ind i
IF-sætningen.

> >
> > Mvh. Allan
> >
> >
> >
>
>



James Olsen (20-05-2001)
Kommentar
Fra : James Olsen


Dato : 20-05-01 17:18


"Allan" <astengaard@hotmail.com> wrote in message
news:9e8paf$5a1$1@news.inet.tele.dk...
>
> "James Olsen" <james_olsen@vip.cybercity.dk> wrote in message
> news:9e8ofo$2dha$1@news.cybercity.dk...
> >
> > "Allan" <astengaard@hotmail.com> wrote in message
> > news:9e8nog$a2$1@news.inet.tele.dk...
> > > Hej ng
> > >
> > > Jeg har et lille banalt problem, som jeg ikke lige kan gennemskue:
> > >
> > > Jeg har lavet to små applikationer, en server- og en
klientapplikation.
> > > Klienten sender en streng til serveren, som så reagerer alt efter hvad
> den
> > > modtager. Men jeg har et problem....hvis jeg f.eks sender et a, så kan
> jeg
> > > ikke få serveren til at genkende det. Jeg har sat en println ind som
> > skriver
> > > det ud den modtager og den skriver lige så pænt et a, men når jeg
laver
> en
> > > if (input == "a"), så går den ikke ind i if-sætningen.
> > >
> > > Er der en bamhjertig sjæl, som kan give mig et godt råd??
> >
> > Du kan bruge en af følgende :
> >
> > if(input.equals("a"))
> >
> > if(equalsIgnoreCase("a"))
> >
> Nu har jeg prøvet begge dele, med samme resultat: Serveren går ikke ind i
> IF-sætningen.

Prøv lige at checke længden på input ?

btw : så skulle den sidste selvfølgelig have været
if(input.equalsIgnoreCase("a"))


>
> > >
> > > Mvh. Allan
> > >
> > >
> > >
> >
> >
>
>



Allan (20-05-2001)
Kommentar
Fra : Allan


Dato : 20-05-01 19:34


"James Olsen" <james_olsen@vip.cybercity.dk> wrote in message
news:9e8qp9$2h78$1@news.cybercity.dk...
>
> "Allan" <astengaard@hotmail.com> wrote in message
> news:9e8paf$5a1$1@news.inet.tele.dk...
> >
> > "James Olsen" <james_olsen@vip.cybercity.dk> wrote in message
> > news:9e8ofo$2dha$1@news.cybercity.dk...
> > >
> > > "Allan" <astengaard@hotmail.com> wrote in message
> > > news:9e8nog$a2$1@news.inet.tele.dk...
> > > > Hej ng
> > > >
> > > > Jeg har et lille banalt problem, som jeg ikke lige kan gennemskue:
> > > >
> > > > Jeg har lavet to små applikationer, en server- og en
> klientapplikation.
> > > > Klienten sender en streng til serveren, som så reagerer alt efter
hvad
> > den
> > > > modtager. Men jeg har et problem....hvis jeg f.eks sender et a, så
kan
> > jeg
> > > > ikke få serveren til at genkende det. Jeg har sat en println ind som
> > > skriver
> > > > det ud den modtager og den skriver lige så pænt et a, men når jeg
> laver
> > en
> > > > if (input == "a"), så går den ikke ind i if-sætningen.
> > > >
> > > > Er der en bamhjertig sjæl, som kan give mig et godt råd??
> > >
> > > Du kan bruge en af følgende :
> > >
> > > if(input.equals("a"))
> > >
> > > if(equalsIgnoreCase("a"))
> > >
> > Nu har jeg prøvet begge dele, med samme resultat: Serveren går ikke ind
i
> > IF-sætningen.
>
> Prøv lige at checke længden på input ?
>
> btw : så skulle den sidste selvfølgelig have været
> if(input.equalsIgnoreCase("a"))

Jeg har fået løst problemet. Mit problem var, at klienten lave en out.print
istedet for en out.println. Og så ændrede jeg også til equals. Nu virker
programmet fint. Tak for hjælpen
>
>
> >
> > > >
> > > > Mvh. Allan
> > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Bertel Lund Hansen (20-05-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 20-05-01 17:52

Allan skrev:

>if (input == "a"), så går den ikke ind i if-sætningen.

Det er vel ikke fordi du skal teste på en char istedet?

   if (input == 'a')

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Jonas Kongslund (20-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 20-05-01 23:18

Allan wrote:
> Jeg har sat en println ind som skriver
> det ud den modtager og den skriver lige så pænt et a, men når jeg laver en
> if (input == "a"), så går den ikke ind i if-sætningen.

Hvert nyt objekt der oprettes i Java får tildelt et unikt /objektid/.
Når du skriver
String input = "hejsa"
så oprettes der et objekt i systemet, og "input" får tildelt en
/objektreference/ (i form af føromtalte objektid) til objektet.

Når du skriver "a == b" så undersøges der om objektreferencerne peger på
det samme objekt, dvs. der testes for /fysisk identitet/. Med andre ord
så vil
if (input == "a")
kun fungere såfremt "input" og '"a"' har samme objektreference - også
selvom "input" rent faktisk repræsenterer bogstavet "a".

Hvis du har to objekter af samme klassetype og som ikke er fysisk
identiske, så kan man teste for /logisk identitet/, dvs. vha. en metode,
der sammenligner attributterne. I Java bruger man pr. konvention
"equals"-metoden, som man selv har ansvar for at implementere i nye
klasser.

Du kan f.eks. bruge
if (("a").equals(input))
som også fungerer selvom "input" antager null-værdien.

En anden måde (som ikke fungerer, hvis "input" er null) er
if (input.intern() == "a")
Bemærk at vi her bruger "=="-operatoren!

Årsagen til at vi kan teste for fysisk identitet er at String-klassen
vedligeholder en intern pulje over strenge. Kalder du intern() på et
String-objekt og findes det ikke i puljen i forvejen, så bliver det
tilføjet og dets objektreference bliver returneret. Hvis puljen allerede
indeholder en streng som er logisk identisk (dvs. der testes vha.
"equals"-metoden) så returneres en objektreference til denne streng.

Initielt bliver alle strenge som kan bestemmes på compile time indsat i
puljen, mens nye objekter kun ryger deri såfremt deres "intern"-metode
bliver kaldt. Det har ganske interessante konsekvenser.

Min påstand er at nedenstående kode altid vil udskrive "Hej med dig" til
trods for at vi tester for fysisk identitet uden at inddrage
"intern"-metoden.

String foo = "Hej ";
String bar = "med dig";
String foobar = foo+bar;

if (foobar == "Hej med dig") {
System.out.println(foobar);
}

Hvis "foobar" derimod bliver bestemt på runtime, f.eks. ved at brugeren
indtaster en værdi, så vil det ikke fungere uanset om denne værdi måtte
være "Hej med dig" da der pludselig er tale om forskellige
objektreferencer!

Du kan læse om det i Java Language Specification, §3.10.5
(http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html)


Morale: Bruge altid "equals"- eller "intern"-metoden når du skal
sammenligne strenge.

--
Jonas Kongslund, http://kongslund.dk

Ulrik Magnusson (21-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 21-05-01 00:07

Jonas Kongslund wrote:

> Min påstand er at nedenstående kode altid vil udskrive "Hej med dig" til
> trods for at vi tester for fysisk identitet uden at inddrage
> "intern"-metoden.
>
> String foo = "Hej ";
> String bar = "med dig";
> String foobar = foo+bar;
>
> if (foobar == "Hej med dig") {
> System.out.println(foobar);
> }

Det passer vist ikke. Hvis du havde skrevet

String foobar = "Hej "+"med dig";

så havde det passet. Det er i hvert fald hvad mit system og 3.10.5 siger
(jeg har lige sakset lidt):

public static void main(String[] args) {
String hello = "Hello", lo = "lo";
System.out.print((hello == "Hello") + " "); // true
System.out.print((Other.hello == hello) + " "); // true
System.out.print((other.Other.hello == hello) + " "); //
true
System.out.print((hello == ("Hel"+"lo")) + " "); // true
System.out.print((hello == ("Hel"+lo)) + "
"); // NB!!! false
System.out.println(hello == ("Hel"+lo).intern()); // true
}

package other;
public class Other { static String hello = "Hello"; }

Dermed må det være sådan, at str1 + str2 ses som én konstant/literal,
hvis de begge er konstanter/literaler. + operationen forsvinder altså i
dette tilfælde (hvilket synes ok, hvis man har strenge over flere linier).

Ulrik Magnusson

--
"hvorfor er det stadig tilladt at høre klassisk musik ?"
'Mickey', dk.politik.indvandring
Visit my home page: http://www.geocities.com/ulrikm



Jonas Kongslund (21-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 21-05-01 07:48

Ulrik Magnusson wrote:
> Dermed må det være sådan, at str1 + str2 ses som én konstant/literal,
> hvis de begge er konstanter/literaler. + operationen forsvinder altså i
> dette tilfælde (hvilket synes ok, hvis man har strenge over flere linier).

Du har ret. Det er straffen for ikke at teste sine kodestumper

--
Jonas Kongslund, http://kongslund.dk

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste