Toon posts:

string compare in Java

Pagina: 1
Acties:

Onderwerpen


  • kinderpindakaas
  • Registratie: oktober 2006
  • Laatst online: 26-03 11:20
Ik ben vrij nieuw in Java en zit met het volgende probleem.
Ik moet 2 strings met elkaar vergelijken.
De ene string bevat juiste antwoorden van een tentamen en de andere string bevat gegeven antwoorden van een student. Ik moet ze dus per karakter vergelijken en dus zal een string.equals() niet gaan werken.

Dus ik dacht ik los het even simpel op door in een loop het volgende te doen:
code:
1
if(antwoorden.charAt(j) == juisteAntwoorden.charAt(j))


En dan een tellertje verhogen met het aantal juiste antwoorden.
Echter dit wil niet echt werken.
Wie weet waarom?

  • CoolGamer
  • Registratie: mei 2005
  • Laatst online: 22-09 16:33

CoolGamer

What is it? Dragons?

Wat gaat er fout dan? Krijg je een error of werkt het niet zoals je wilt?

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


  • C.J.V.
  • Registratie: februari 2009
  • Laatst online: 15-08 21:37
Wat wil er niet werken?

Krijg je een fout melding of doet het gewoon niet wat je verwacht dat het doet?

edit: woopsie

[Voor 7% gewijzigd door C.J.V. op 18-10-2010 17:43]


  • Vinnienerd
  • Registratie: juli 2000
  • Laatst online: 23:59
Wat is voor jou het verschil tussen String.equals en .charAt?

  • Wirf
  • Registratie: april 2000
  • Laatst online: 18-09 17:42
Heb je een voorbeeld van de twee strings die je met elkaar probeert te vergelijken?

Wat je nu trouwens probeert te doen is eigenlijk precies hetzelfde als wat string.equals() doet....

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Laurenz
  • Registratie: februari 2003
  • Laatst online: 16-08 12:46
Laat de hele methode eens zien?

Leave only footprints, take only memories


  • kinderpindakaas
  • Registratie: oktober 2006
  • Laatst online: 26-03 11:20
Bij een string equals krijg je alleen terug of er een verschil is tussen die 2 strings, maar niet hoeveel karakters er dan verschillend zijn.

Stel mijn string met juiste antwoorden is 10 tekens lang.
Dan doorloop ik een loop 10x met j als index:
code:
1
if(antwoorden.charAt(j) == juisteAntwoorden.charAt(j))


Zelfs als beide string 100% hetzelfde zijn, dan nog detecteert hij op deze manier geen overeenkomsten.

  • Caelorum
  • Registratie: april 2005
  • Laatst online: 23:13
Wirf schreef op maandag 18 oktober 2010 @ 17:43:
Heb je een voorbeeld van de twee strings die je met elkaar probeert te vergelijken?

Wat je nu trouwens probeert te doen is eigenlijk precies hetzelfde als wat string.equals() doet....
Hij laat toch een tellertje meelopen? Of geeft string.equals() in java ook een getal in hoeverre de twee strings overeenkomen?

  • kinderpindakaas
  • Registratie: oktober 2006
  • Laatst online: 26-03 11:20
De hele functie ziet er zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        public void berekenCijfer(String juisteAntwoorden)
    {
        int goedeAntwoorden = 0;
        //String antwoorden = tentamens[i].getAntwoorden();
        
        for(int j=0; j<juisteAntwoorden.length(); j++)
        {
            if(antwoorden.charAt(j) == juisteAntwoorden.charAt(j))
                goedeAntwoorden++;
        }   
            
        double percentage = goedeAntwoorden/juisteAntwoorden.length();
        float  berekening = ((12*goedeAntwoorden)/juisteAntwoorden.length())-2;
        
        if(percentage < 0.25)
            cijfer = 1;
        else
            cijfer = Math.round(berekening);
            
        aantalGoedeAntwoorden = goedeAntwoorden;
        
    }

  • NMe
  • Registratie: februari 2004
  • Laatst online: 21:39

NMe

Quia Ego Sic Dico.

kinderpindakaas schreef op maandag 18 oktober 2010 @ 17:47:
Bij een string equals krijg je alleen terug of er een verschil is tussen die 2 strings, maar niet hoeveel karakters er dan verschillend zijn.

Stel mijn string met juiste antwoorden is 10 tekens lang.
Dan doorloop ik een loop 10x met j als index:
code:
1
if(antwoorden.charAt(j) == juisteAntwoorden.charAt(j))


Zelfs als beide string 100% hetzelfde zijn, dan nog detecteert hij op deze manier geen overeenkomsten.
Debuggen. Welke string bevat antwoorden? Welke string bevat juisteAntwoorden? Welke waarde bevat j per iteratie en wat geeft charAt terug voor elk van deze strings wanneer je er doorheen stapt?

En inderdaad, laat eens de hele loop of de hele method zien?

edit:
Waarom heb je je antwoorden trouwens in een string staan en niet netjes in een List?

[Voor 6% gewijzigd door NMe op 18-10-2010 17:51]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Aloys
  • Registratie: juni 2005
  • Niet online
kinderpindakaas schreef op maandag 18 oktober 2010 @ 17:49:
De hele functie ziet er zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        public void berekenCijfer(String juisteAntwoorden)
    {
        int goedeAntwoorden = 0;
        //String antwoorden = tentamens[i].getAntwoorden();
        
        for(int j=0; j<juisteAntwoorden.length(); j++)
        {
            if(antwoorden.charAt(j) == juisteAntwoorden.charAt(j))
                goedeAntwoorden++;
        }   
            
        double percentage = goedeAntwoorden/juisteAntwoorden.length();
        float  berekening = ((12*goedeAntwoorden)/juisteAntwoorden.length())-2;
        
        if(percentage < 0.25)
            cijfer = 1;
        else
            cijfer = Math.round(berekening);
            
        aantalGoedeAntwoorden = goedeAntwoorden;
        
    }
Sowieso handig om antwoorden te uncommenten, maar je functie retourneert ook niets? Hoe wil je dan een antwoord krijgen? :)

  • NMe
  • Registratie: februari 2004
  • Laatst online: 21:39

NMe

Quia Ego Sic Dico.

Aloys schreef op maandag 18 oktober 2010 @ 17:54:
[...]

Sowieso handig om antwoorden te uncommenten, maar je functie retourneert ook niets? Hoe wil je dan een antwoord krijgen? :)
this.aantalGoedeAntwoorden. Niet netjes inderdaad IMO, maar het kan wel. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Wirf
  • Registratie: april 2000
  • Laatst online: 18-09 17:42
Even een "shotgun aproach" van mij:

code:
1
if(antwoorden.trim().toLower().charAt(j).equals(juisteAntwoorden.trim().toLower().charAt(j)))


Zelf even kijken of, en welke, van deze aanpassingen helpt :)

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Yexo
  • Registratie: februari 2006
  • Laatst online: 14-01-2016
Dit ziet er niet goed uit, waarschijnlijk int/int division waar een int (0/1) uit komt, geen double.
kinderpindakaas schreef op maandag 18 oktober 2010 @ 17:49:
code:
1
        double percentage = goedeAntwoorden/juisteAntwoorden.length();

  • pedorus
  • Registratie: januari 2008
  • Niet online
Anyway, wat geeft dit?
Java:
1
double aDouble = 5/10;

Vitamine D tekorten in Nederland | Middelen tegen corona


  • Remus
  • Registratie: juli 2000
  • Laatst online: 15-08 15:25
NMe schreef op maandag 18 oktober 2010 @ 17:56:
[...]

this.aantalGoedeAntwoorden. Niet netjes inderdaad IMO, maar het kan wel. :P
Dat ligt er maar helemaal aan. Java is een OO taal, geen procedurele taal. Het gebruik van een attribuut van het object is dus een verdedigbare keuze.
pedorus schreef op maandag 18 oktober 2010 @ 18:03:
Anyway, wat geeft dit?
Java:
1
double aDouble = 5/10;
Helemaal overheen gelezen, dat is zeer waarschijnlijk de oorzaak van de problemen van de TS.

[Voor 28% gewijzigd door Remus op 18-10-2010 18:04]


  • kinderpindakaas
  • Registratie: oktober 2006
  • Laatst online: 26-03 11:20
Het gebruik van strings is helaas een vereiste in de opdracht, anders ha dik allang een list gepakt idd.

Deze functie is onderdeel van een class Student.
In deze class is al een attribuut antwoorden opgenomen, dus vandaar dat die andere gecomment is.

Vanuit een class Docent roep ik deze functie aan en ik geef de juiste antwoorden mee.
Het enige wat deze functie moet doen is de antwoorden van de student vergelijken met de juisteAntwoorden.
En daarna afhankelijk van het aantal goede antwoorden een cijfer berekenen

  • Jovaro
  • Registratie: april 2005
  • Laatst online: 22-09 11:38
Gebruik .equals() inplaats van ==

Net even gegoogled naar "java equals" en het eerste wat ik vond was dit:
Compares references, not values. The use of == with object references is generally limited to the following:

* Comparing to see if a reference is null.
* Comparing two enum values. This works because there is only one object for each enum constant.
* You want to know if two references are to the same object

  • Remus
  • Registratie: juli 2000
  • Laatst online: 15-08 15:25
Jovaro schreef op maandag 18 oktober 2010 @ 18:03:
Gebruik .equals() inplaats van ==

Net even gegoogled naar "java equals" en het eerste wat ik vond was dit:

[...]
Dat is helemaal niet relevant in dit geval. De TS vergelijkt geen objecten, maar primitieve datatypes (char), en dan dient gewoon == gebruikt te worden.

  • SPee
  • Registratie: oktober 2001
  • Laatst online: 00:59
Als je this.aantalGoedeAntwoorden maar 1 keer uitleest en dat doet voordat je die functie hebt aangeroepen, wordt ook niet de juiste waarde getoond.
Dus weet je zeker dat de fout in deze code zit, of in de aanroepende code? ;)

let the past be the past.


  • Domdo
  • Registratie: juni 2009
  • Laatst online: 15-09 09:37
Java:
1
2
3
4
5
6
7
        double percentage = goedeAntwoorden/juisteAntwoorden.length();
        float  berekening = ((12*goedeAntwoorden)/juisteAntwoorden.length())-2;
        
        if(percentage < 0.25)
            cijfer = 1;
        else
            cijfer = Math.round(berekening);


Hier komt altijd een afgerond getal uit. Gezien het mij niet helemaal duidelijk wat er precies fout gaat, of dat je gewoon hebt aangenomen dat de berekening goed is en dus de string.toLower().equals(String.toLower()) niet goed werkt bedoel je denk ik,

Java:
1
        double percentage = (double)goedeAntwoorden/(double)juisteAntwoorden.length();


Als je 2 int door elkaar deelt, wordt blijft het een int, totdat de waarde in een double geschreven wordt.

[Voor 4% gewijzigd door Domdo op 18-10-2010 18:09]


  • NMe
  • Registratie: februari 2004
  • Laatst online: 21:39

NMe

Quia Ego Sic Dico.

Remus schreef op maandag 18 oktober 2010 @ 18:06:
[...]

Dat is helemaal niet relevant in dit geval. De TS vergelijkt geen objecten, maar primitieve datatypes (char), en dan dient gewoon == gebruikt te worden.
Sterker nog, char.equals (let op de lower case) geeft een dikke error.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Jovaro
  • Registratie: april 2005
  • Laatst online: 22-09 11:38
Remus schreef op maandag 18 oktober 2010 @ 18:06:
[...]

Dat is helemaal niet relevant in dit geval. De TS vergelijkt geen objecten, maar primitieve datatypes (char), en dan dient gewoon == gebruikt te worden.
Ah ja, je hebt gelijk. Een char is een enum dus dan werkt dat inderdaad..

  • NMe
  • Registratie: februari 2004
  • Laatst online: 21:39

NMe

Quia Ego Sic Dico.

Jovaro schreef op maandag 18 oktober 2010 @ 18:09:
[...]

Ah ja, je hebt gelijk. Een char is een enum dus dan werkt dat inderdaad..
Ehm, bij mijn weten is Java geen uitzondering op de "regel" dat een char een (8-bits) integer is. Then again, een enum is intern ook een integer, dus in die zin heb je gelijk...maar ik denk dat je even op moet gaan zoeken wat je termen betekenen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • kinderpindakaas
  • Registratie: oktober 2006
  • Laatst online: 26-03 11:20
Ok het casten van de int's naar double zou het volgende probleem zijn.
Maar het gaat al mis in de if loop die goedeAntwoorden++ moet uitvoeren.
Haal ik de if conditie weg, dan haalt wel elke student een 10.
Dus er gaat echt iets goed mis in if(antwoorden.charAt(j) == juisteAntwoorden.charAt(j))

antwoorden is een attribuut uit zijn eigen class.
Dus je zou ook nog this.antwoorden kunnen doen, maar dat helpt verder niets :P

  • NMe
  • Registratie: februari 2004
  • Laatst online: 21:39

NMe

Quia Ego Sic Dico.

kinderpindakaas schreef op maandag 18 oktober 2010 @ 18:20:
Ok het casten van de int's naar double zou het volgende probleem zijn.
Maar het gaat al mis in de if loop die goedeAntwoorden++ moet uitvoeren.
Haal ik de if conditie weg, dan haalt wel elke student een 10.
Dus er gaat echt iets goed mis in if(antwoorden.charAt(j) == juisteAntwoorden.charAt(j))
Doe eens netjes debuggen zoals ik in mijn eerste post al zei? Netjes door je code heen steppen en variabelen inspecten, ben je er zo uit...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • kinderpindakaas
  • Registratie: oktober 2006
  • Laatst online: 26-03 11:20
Ja, maar nog nooit gedaan in Eclipse.
Even inlezen

  • kinderpindakaas
  • Registratie: oktober 2006
  • Laatst online: 26-03 11:20
Ok heel stom dit.
In mijn main class vraag ik de gebruiker om studentnummer en antwoorden als volgt in te voeren:
12345 abcdabccab

Verder lees ik deze in met:
code:
1
2
3
int sNum = in.nextInt();
String sAntw = in.nextLine();
docent.voegTentamenToe(sNum, sAntw);


Niet bij stil gestaan dat de spatie tussen studentnummer en antwoorden opgenomen worden in sAntw.
Daardoor lopen je antwoorden in de if lus vergelijking net niet synchroon

Het lag dus niet aan de if vergelijking.
Kostte ff wat tijd om hier achter te komen :)
Thanx iedereen, ik kan weer verder.

PS offtopic: Als beginnende OO programmeur vraag ik me af of het niet beter is om gebruik van "this" altijd toe te passen op private attributen om misverstanden te voorkomen?
Of alleen toepassen als het echt nodig is?

Het leest in elk geval wel beter. Weet je gelijk waar een variabele staat

[Voor 4% gewijzigd door kinderpindakaas op 18-10-2010 18:45]


  • NetForce1
  • Registratie: november 2001
  • Laatst online: 23:43

NetForce1

(inspiratie == 0) -> true

kinderpindakaas schreef op maandag 18 oktober 2010 @ 18:43:
Ok heel stom dit.
In mijn main class vraag ik de gebruiker om studentnummer en antwoorden als volgt in te voeren:
12345 abcdabccab

Verder lees ik deze in met:
code:
1
2
3
int sNum = in.nextInt();
String sAntw = in.nextLine();
docent.voegTentamenToe(sNum, sAntw);


Niet bij stil gestaan dat de spatie tussen studentnummer en antwoorden opgenomen worden in sAntw.
Daardoor lopen je antwoorden in de if lus vergelijking net niet synchroon

Het lag dus niet aan de if vergelijking.
Kostte ff wat tijd om hier achter te komen :)
Thanx iedereen, ik kan weer verder.

PS offtopic: Als beginnende OO programmeur vraag ik me af of het niet beter is om gebruik van "this" altijd toe te passen op private attributen om misverstanden te voorkomen?
Of alleen toepassen als het echt nodig is?

Het leest in elk geval wel beter. Weet je gelijk waar een variabele staat
this. zou ik alleen toepassing indien nodig, een beetje IDE geeft al een verschillende kleur aan je local en instance vars.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • pedorus
  • Registratie: januari 2008
  • Niet online
kinderpindakaas schreef op maandag 18 oktober 2010 @ 18:43:
PS offtopic: Als beginnende OO programmeur vraag ik me af of het niet beter is om gebruik van "this" altijd toe te passen op private attributen om misverstanden te voorkomen?
Of alleen toepassen als het echt nodig is?
Zie boven, daar is de IDE voor. Wat wel heel belangrijk is, is dat je goede namen kiest. Dus geen percentage als je fractie bedoelt, en ook geen goedeAntwoorden naast juisteAntwoorden (kies dan juistBeantwoord ofzo). En sNum mag best iets langer. :p

Vitamine D tekorten in Nederland | Middelen tegen corona


  • Wirf
  • Registratie: april 2000
  • Laatst online: 18-09 17:42
Remus schreef op maandag 18 oktober 2010 @ 18:03:
[...]

Dat ligt er maar helemaal aan. Java is een OO taal, geen procedurele taal. Het gebruik van een attribuut van het object is dus een verdedigbare keuze.
Als je "statefull" classes maakt, wat je in dit geval doet, kun je later problemen krijgen als je gaat multithreaden. Als wij dit tegenkomen tijdens een code-review, zal dat dus ook zeker een puntje van kritiek zijn.

Wij raden aan om alle functies dus alles via een return statement terug te laten geven, en dus niet via instance variabelen.

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Onno
  • Registratie: juni 1999
  • Niet online
NMe schreef op maandag 18 oktober 2010 @ 18:15:
Ehm, bij mijn weten is Java geen uitzondering op de "regel" dat een char een (8-bits) integer is.
Toch knap dat je er dan elk Unicode teken in kwijt kunt. :)
Then again, een enum is intern ook een integer, dus in die zin heb je gelijk...
Niet echt, een enum in Java is een normale class. (wel wordt hier en daar de waarde van .ordinal() gebruikt, bijvoorbeeld in een switch)

  • kinderpindakaas
  • Registratie: oktober 2006
  • Laatst online: 26-03 11:20
pedorus schreef op maandag 18 oktober 2010 @ 20:37:
[...]

Zie boven, daar is de IDE voor. Wat wel heel belangrijk is, is dat je goede namen kiest. Dus geen percentage als je fractie bedoelt, en ook geen goedeAntwoorden naast juisteAntwoorden (kies dan juistBeantwoord ofzo). En sNum mag best iets langer. :p
Terecht opgemerkt.
Zelf kom ik er vaak wel uit, maar een ander vaak niet.
Tijdens mijn afstudeerpresentatie stonden er in mijn project nog steeds variabelen als $kinderpindakaas en $fftijdelijk in mijn code. Schandalig eigenlijk.
Maar wat je op dat moment ff tijdelijk noemt kan blijvend worden.
Dus het beste is altijd logische namen te gebruiken. Daar moet ik echt aan werken.

Laatst nog was ik een robot aan het proggen waarvan ik wilde weten of de laser een obstakel te dicht op de robot detecteerde. Ik had daarvoor een algoritme dat een variabele $comfortzone op true of false zette.
Voor mijzelf was duidelijk dat $comfortzone = true betekende dat de robot vrije bewegingsruimte had, maar mijn teamgenoten dachten dat $comfortzone = true betekende dat er een obstakel in de zone stond.
Heel verwarrend.

Beter had ik de variabele $isComfort kunnen noemen of in sommige gevallen een enum toepassen.

En zo leren we elke dag weer een beetje bij :)

  • CoolGamer
  • Registratie: mei 2005
  • Laatst online: 22-09 16:33

CoolGamer

What is it? Dragons?

NMe schreef op maandag 18 oktober 2010 @ 18:15:
[...]

Ehm, bij mijn weten is Java geen uitzondering op de "regel" dat een char een (8-bits) integer is.
Het is een 16-bits integer, net als bijvoorbeeld in C#.
Onno schreef op maandag 18 oktober 2010 @ 22:34:
Toch knap dat je er dan elk Unicode teken in kwijt kunt. :)
Dat kan met characters van 8 (UTF-8), 16 (UTF-16) en 32 (UTF-32) bits. Dus het aantal bits zegt niet zoveel. Wanneer een teken niet binnen 1 character past wordt gebruik gemaakt van meerdere characters om het teken op te slaan.

[Voor 42% gewijzigd door CoolGamer op 18-10-2010 22:47]

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


  • Wirf
  • Registratie: april 2000
  • Laatst online: 18-09 17:42
kinderpindakaas schreef op maandag 18 oktober 2010 @ 22:37:
[..]
Laatst nog was ik een robot aan het proggen waarvan ik wilde weten of de laser een obstakel te dicht op de robot detecteerde. Ik had daarvoor een algoritme dat een variabele $comfortzone op true of false zette.
Voor mijzelf was duidelijk dat $comfortzone = true betekende dat de robot vrije bewegingsruimte had, maar mijn teamgenoten dachten dat $comfortzone = true betekende dat er een obstakel in de zone stond.
Heel verwarrend.

Beter had ik de variabele $isComfort kunnen noemen of in sommige gevallen een enum toepassen.
Had je niet beter je variabele "objectDetected" kunnen noemen? :+

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Soultaker
  • Registratie: september 2000
  • Laatst online: 22-07 23:43
Of "objectNearby" of iets dergelijks. Dat krijg je ervan als je aan bestaande termen een onjuiste betekenis toekent:
comfort zone (noun)
1: the temperature range within which one is comfortable
2: the level at which one functions with ease and familiarity
Als je per se een ongebruikelijke term nodig hebt (wat hier niet nodig was, maar soms niet te vermijden is) dan moet je de interpretatie daarvan natuurlijk ergens documenteren.

[Voor 24% gewijzigd door Soultaker op 18-10-2010 23:27]


  • Herko_ter_Horst
  • Registratie: november 2002
  • Niet online
TheCoolGamer schreef op maandag 18 oktober 2010 @ 22:40:
Dat kan met characters van 8 (UTF-8), 16 (UTF-16) en 32 (UTF-32) bits. Dus het aantal bits zegt niet zoveel. Wanneer een teken niet binnen 1 character past wordt gebruik gemaakt van meerdere characters om het teken op te slaan.
Off-topic, maar voor de volledigheid: Java werkt voor chars (en dus voor Strings, die op char[] zijn gebaseerd) met UTF-16. In UTF-16 kan een code point (= character) bestaan uit 1 of 2 code units van 16 bits. Voor de meeste tekens die wij gewoonlijk gebruiken, is slechts 1 code unit nodig. Voor exotische tekens (supplementaire characters) wordt gebruik gemaakt van een zgn. surrogate pair van 2 code units.

Een char in Java representeert eigenlijk een code unit en is daarom voor supplementaire characters niet los te interpeteren als een character. De onderliggende code van bijv. de Character class werkt daarom met ints.

Zie ook: http://java.sun.com/devel...icles/Intl/Supplementary/

In UTF-8 is het nog gekker: daar worden characters ge-encode in 1, 2 of 4 bytes. De 1 byte characters zijn compatible met ASCII encoding.

[Voor 6% gewijzigd door Herko_ter_Horst op 19-10-2010 00:28]

"Any sufficiently advanced technology is indistinguishable from magic."


  • NMe
  • Registratie: februari 2004
  • Laatst online: 21:39

NMe

Quia Ego Sic Dico.

Onno schreef op maandag 18 oktober 2010 @ 22:34:
[...]

Toch knap dat je er dan elk Unicode teken in kwijt kunt. :)
Ik miste een vraagteken achter 8-bits. :)
Niet echt, een enum in Java is een normale class. (wel wordt hier en daar de waarde van .ordinal() gebruikt, bijvoorbeeld in een switch)
Ik zei bewust enum en niet Enum. :P Ik doelde op het enum-principe zoals heel veel talen het kennen. Hoe dan ook, als je het met de class Enum vergelijkt, dan heeft een char sowieso niets met een Enum te maken, wat mijn originele punt was. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Remus
  • Registratie: juli 2000
  • Laatst online: 15-08 15:25
NMe schreef op maandag 18 oktober 2010 @ 18:15:
[...]

Ehm, bij mijn weten is Java geen uitzondering op de "regel" dat een char een (8-bits) integer is. Then again, een enum is intern ook een integer, dus in die zin heb je gelijk...maar ik denk dat je even op moet gaan zoeken wat je termen betekenen. :)
Een char is een 32 bits datatype in Java. Een enum in Java is een fullblown class met een static definitie van zijn instances.
Onno schreef op maandag 18 oktober 2010 @ 22:34:
Niet echt, een enum in Java is een normale class. (wel wordt hier en daar de waarde van .ordinal() gebruikt, bijvoorbeeld in een switch)
Je kan gewoon switchen op een enum zelf, daar is geen aanroep naar ordinal() voor nodig.

[Voor 25% gewijzigd door Remus op 19-10-2010 08:57]


  • pedorus
  • Registratie: januari 2008
  • Niet online
Remus schreef op dinsdag 19 oktober 2010 @ 08:55:
Een char is een 32 bits datatype in Java.
char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (or 65,535 inclusive).
En dit is niet verandert sinds er surrogate pair characters zijn. ;)

Vitamine D tekorten in Nederland | Middelen tegen corona


  • Remus
  • Registratie: juli 2000
  • Laatst online: 15-08 15:25
pedorus schreef op dinsdag 19 oktober 2010 @ 13:33:
[...]


[...]

En dit is niet verandert sinds er surrogate pair characters zijn. ;)
Oeps, ik was denk ik in de war met het feit dat Character 32 bit integers gebruikt om codepoints als een entity weer te geven (JLS 3.1)

  • Onno
  • Registratie: juni 1999
  • Niet online
Herko_ter_Horst schreef op dinsdag 19 oktober 2010 @ 00:22:
In UTF-8 is het nog gekker: daar worden characters ge-encode in 1, 2 of 4 bytes.
Of 3 natuurlijk.
NMe schreef op dinsdag 19 oktober 2010 @ 00:58:
Ik zei bewust enum en niet Enum. :P
Niet dat dat uitmaakt, want het keyword enum resulteert in Java in een subclass van Enum. :)
Ik doelde op het enum-principe zoals heel veel talen het kennen.
Logisch. :Y)
Remus schreef op dinsdag 19 oktober 2010 @ 08:55:
Je kan gewoon switchen op een enum zelf, daar is geen aanroep naar ordinal() voor nodig.
Het ging om de interne representatie ervan, voor een switch op een enum gebruikt Java intern een aanroep naar .ordinal(). Daarom krijg je bijvoorbeeld ook een NPE als je null aan zo'n switch meegeeft.

  • Herko_ter_Horst
  • Registratie: november 2002
  • Niet online
N.m. al gezegd.

[Voor 89% gewijzigd door Herko_ter_Horst op 21-10-2010 21:48]

"Any sufficiently advanced technology is indistinguishable from magic."


  • ReenL
  • Registratie: augustus 2010
  • Laatst online: 22-03-2015
Java:
1
2
3
4
5
public void berekenCijfer(String juisteAntwoorden)
{
    System.out.println(antwoorden);
    System.out.println(juisteAntwoorden);
}


Wat is de output?

Oops, tweede pagina over het hoofd gezien

[Voor 18% gewijzigd door ReenL op 22-10-2010 10:30]


  • Reinder83
  • Registratie: september 2002
  • Laatst online: 22-09 14:58
in java kan je een string niet comparen met == dat zal je altijd met .equals moeten doen, dus als je een character wilt comparen

code:
1
if (string1.charAt(j).equal(string2.charAt(j)))


Hoop dat je daar wat aan hebt

  • NetForce1
  • Registratie: november 2001
  • Laatst online: 23:43

NetForce1

(inspiratie == 0) -> true

Reinder83 schreef op vrijdag 22 oktober 2010 @ 10:41:
in java kan je een string niet comparen met == dat zal je altijd met .equals moeten doen, dus als je een character wilt comparen

code:
1
if (string1.charAt(j).equal(string2.charAt(j)))


Hoop dat je daar wat aan hebt
Onzin, zie: Remus in "string compare in Java"

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"

Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee