[java] Strings vergelijken

Pagina: 1
Acties:
  • 151 views sinds 30-01-2008

  • judgem
  • Registratie: December 2001
  • Laatst online: 28-04-2014

judgem

Lord of Metal

Topicstarter
Gegroet allemaal,

Ik ben momenteel bezig aan een opdracht om te controleren of een ingevoerde string hetzelfde is indien hij ook achterwaards gelezen wordt.. Ik ben al een heel eind op weg alleen krijg ik steeds een foutmelding waar ik geen wijs uit kan...

Een deel van de code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.lang.String;

public class Palindroom extends Applet implements ActionListener
{
    private TextField invoerVak;
    private boolean isGelijk = false;
    private int lengteString;
    private String invoer, testString;
    
    public void init()
    {
      invoerVak = new TextField(20);
      this.add(invoerVak);
      invoerVak.setBounds(120,20,200,20);
      
      uitvoerLabel = new Label("");
      add(uitvoerLabel);
      uitvoerLabel.setBounds(20,170,300,20);

      invoerVak.requestFocus();
    }

    public void actionPerformed(ActionEvent event)
    {
      if (event.getSource() == testKnop)
      {
        invoer = invoerVak.getText();
        lengteString = invoer.length();
        
        for(int i=0;i<lengteString;i++)
        {
              invoer.charAt(i) = testString.charAt(lengteString-i);
            if(invoer.equalsIgnoreCase(testString))
            {
                isGelijk = true;
            }
        }
      }
    }
}

Wat ik dus wil doen is een tijdelijke string aanmaken die de letters (chars) van de ingevoerde string in omgekeerde volgorde achter elkaar zet en vervolgens de 2 strings met elkaar gaat vergelijken.

De foutmelding die ik vervolgens krijg is deze:
code:
1
2
3
4
5
Palindroom.java:53: unexpected type
required: variable
found   : value
invoer.charAt(i) = testString.charAt(lengteString-i);
         ^

Wie kan me helpen? Ik gebruik overigens JCreator 2.0

Alvast enorm bedankt!

- Ik bespreek ook harde waren en dan wel op www.lordsofmetal.nl - en ik draai en programmeer ze in DYNAMO


  • Xanthus
  • Registratie: Februari 2002
  • Laatst online: 11-07 12:45

Verwijderd

Hmm, als je de characters uit de strings vergelijkt met elkaar, komt het wel goed. Strings zijn objecten die bestaan uit de klasse character.

  • johnny7
  • Registratie: November 2000
  • Laatst online: 07-11-2023
Is het niet handiger om een string om te zetten in een stringbuffer en dan vervolgens de methode reverse aan te roepen? Daarna hoef je alleen maar twee strings te vergelijken met equals B-)

  • Wirf
  • Registratie: April 2000
  • Laatst online: 10-09 14:32
Dit stukkie klopt niet
code:
1
2
3
4
5
6
7
8
 for(int i=0;i<lengteString;i++)
     {
         invoer.charAt(i) = testString.charAt(lengteString-i);
         if(invoer.equalsIgnoreCase(testString))
         {
          isGelijk = true;
         }
     }

dat moet worden:
code:
1
2
3
4
5
6
7
8
 for(int i=0;i<lengteString;i++)
     {
         invoer.charAt(i) = testString.charAt(lengteString-i);
     }
     if(invoer.equalsIgnoreCase(testString))
     {
       isGelijk = true;
     }

tenminste, als ik helemaal begrepen heb wat jij wil.

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Wirf
  • Registratie: April 2000
  • Laatst online: 10-09 14:32
en dit:
code:
1
invoer.charAt(i) = testString.charAt(lengteString-i);

Moet ook net andersom:
code:
1
testString.charAt(i) = invoer.charAt(lengteString-i);

en wat xanthus zegt, klopt ook :)

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Xanthus
  • Registratie: Februari 2002
  • Laatst online: 11-07 12:45
Strings zijn immutable, dus wat jij doet vraagt eigenlijk om een StringBuffer(lees ook wat bovenaan in de api docs van de String staat)
Anders maak je eigenlijk steeds een nieuwe string aan op basis van de oude.
En je kan ook geen waardes hieraan toewijzen.

  • judgem
  • Registratie: December 2001
  • Laatst online: 28-04-2014

judgem

Lord of Metal

Topicstarter
Wirf: hij geeft nog steeds dezelfde error..

Ik probeer de andere mogelijkheden even....


Dank tot op heden!

- Ik bespreek ook harde waren en dan wel op www.lordsofmetal.nl - en ik draai en programmeer ze in DYNAMO


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Rare assignment:
code:
1
invoer.charAt(i) = testString.charAt(lengteString-i);

Een assignment die je aan een variabele, niet op het resultaat van een methode, wat een waarde is.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Birk
  • Registratie: Maart 2002
  • Laatst online: 15-02-2019
Misschien een ander idee om te kijken of het een Palindroom is, een for lus nemen die net zolang is als het woord en dan de eerste letter met de laatste vergelijken enz...

lepel

l met l vergelijken, e met e, en dan ben je in het midden (is oneven woord) dus gelijk, dus Palindroom...

Is misschien ook een leuke mogelijkheid om uit te proberen :)

Dyslexie | Linux | MoZilla | OpenOffice


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
code:
1
2
3
4
5
invoer = invoerVak.getText();
int len = invoer.length();
int i = 0;
while(i < len/2 && invoer.charAt(i) == invoer.charAt(len-i-1)) i++;
if (i >= len/2) isGelijk = true;

zoiets zou gewoon moeten werken. :Y)

  • Wirf
  • Registratie: April 2000
  • Laatst online: 10-09 14:32
Birks manier:
code:
1
2
3
4
5
6
7
8
boolean palindroom = true;

for (int i = 0; i < invoer.length(); i++) {
    if (invoer.charAt(i) != invoer.charAt(invoer.length() - i) {
       palindroom = false;
       break;
    }
}

NIET getest

sjaakie's manier ziet er ook goed uit

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
Ik heb hem getest. :)
Die van Wirf klopt bijna, ten eerste geeft .length()-i een fout als i == 0, omdat charAt() nul-based is.
En ten tweede hoef je natuurlijk maar tot de helft van de string te controleren.

  • Birk
  • Registratie: Maart 2002
  • Laatst online: 15-02-2019
Op woensdag 27 maart 2002 13:13 schreef Wirf het volgende:
Birks manier:
code:
1
...

NIET getest

sjaakie's manier ziet er ook goed uit
Precies, thx voor het het uitschrijven van de code, en idd wat Sjaaky ook zegt de helft van de string moet voldoende zijn ;)

Dyslexie | Linux | MoZilla | OpenOffice


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Is (StringBuffer(str).reverse().toString().equals(str)) niet voldoende? Als je meer efficientie wil kan je natuurlijk karakter voor karakter vergelijken, maar doe 't dan in assembly. ;)

Of korter:
str.contentEquals(StringBuffer(str).reverse());

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Soultaker: str.contentEquals(StringBuffer(str).reverse());
:X

Dit topic is echt te maf...

Les 1: verdeel problemen in sub-problemen. In dit probleem moet je een string omdraaien en vergelijken. Dat kan je in 1 keer doen, maar das alleen maar lastig.

Les 2: zoek in de index van de Java api docs naar een 'reverse' methode als je die niet kan vinden in java.lang.String.

Les 3: leer Java goed, voordat je er in gaat proggen. Een assignment aan een waarde is gewoon echt heel erg fout...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Volgens mij was het ontdekken van een palindroom bij mij een onderdeel van een practicum van mijn eerste jaar.
en ik kan me herinneren dat ik het erg makkelijk vond.

Het algoritme is extreem simpel en lijkt me ook niet moeilijk om in java om te zetten.
Pagina: 1

Dit topic is gesloten.