Avatar billede mikmakmuk Nybegynder
05. april 2004 - 22:08 Der er 27 kommentarer og
1 løsning

sammenlign to strenge

hvad er det som går galt for mig her. Jeg skal undersøge om regninger er et palidrom

  String test1 = "regninger";
     
      boolean b = true;
     
    //  while (b=true)
    //  {
          for (int k=0,h=1;k<test1.length();k++,h++)
          {
          String sub2 = test1.substring(k,h);
          }
         
          for (int kk=test1.length(),hh=test1.length()-1;kk==0;kk--,hh--)
          {
          String sub3 = test1.substring(kk,hh);
          }
       
        System.out.print(sub2+" er lig "+sub3);
         
    //    }
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 22:09 #1
tanken er at jeg vil finde den første karakter i strengen og sammenligne den med den sidste o.s.v
Avatar billede arne_v Ekspert
05. april 2004 - 22:12 #2
Prøv:

boolean pal = true;
for(int i = 0; i < s.length()/2; i++) {
  if(s.charAt(i) != s.charAt(s.length() - i)) {
      pal = false;
  }
}
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 22:16 #3
Det er sikkert meget rigtigt og korrekt, men kan du svare på hvorfor jeg ikke kan sammenligne

    if (sub2.equals(sub3))
        {
        }
        else
        {
        b=false;
        }
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 22:17 #4
Jeg får at vide at sub2 og sub3 ikke findes :-(
Avatar billede arne_v Ekspert
05. april 2004 - 22:19 #5
for (int k=0,h=1;k<test1.length();k++,h++)
          {
          String sub2 = test1.substring(k,h); // sub2 er kun gyldig her mellem { }
          }
       
          for (int kk=test1.length(),hh=test1.length()-1;kk==0;kk--,hh--)
          {
          String sub3 = test1.substring(kk,hh);  // sub3 er kun gyldig her mellem { }
          }
     
        System.out.print(sub2+" er lig "+sub3); // her bruger du sub2 og sub3 udenfor deres scope
Avatar billede uffe_kld Nybegynder
05. april 2004 - 22:21 #6
String test1 = "regninger";
int mylen = test1.length
int i =0
boolean b = true;

while (b || i == mylen) {
if (test1.substr(i,1) != test1.substr(mylen-i-1,1)) {
    b= false;
}

}

if (b) {
System.out.print(test1 + "er en palindrom")

}

Sådan nogen ville jeg forsøge mig med, der nok nogle mindre fejl da jeg aldrig har programmeret i Java, kun i C.
Avatar billede arne_v Ekspert
05. april 2004 - 22:44 #7
Jeg vil også ligge et svar
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 22:47 #8
Jeg kan ikke få det til at spille.

String s = "regninger";
boolean pal = true;
     
for(int i=0;i<s.length()/2;i++)
{
       
if(s.charAt(i) != s.charAt(s.length() - i))
{
  pal = false;
}
             
}
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 22:48 #9
Jeg tror nok jeg kan følge tankegangen men det virker ikke som jeg gerne vil
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 22:48 #10
Jeg får en outofbounce exception
Avatar billede arne_v Ekspert
05. april 2004 - 22:51 #11
Der mangler en -1
Avatar billede arne_v Ekspert
05. april 2004 - 22:51 #12
public class Pal {
    public static boolean isPal(String s) {
        boolean pal = true;
        for(int i = 0; i < s.length()/2; i++) {
          if(s.charAt(i) != s.charAt(s.length() - i - 1)) {
              pal = false;
          }
        }
        return pal;
    }
    public static void main(String[] args) {
        System.out.println(isPal("regninger"));
        System.out.println(isPal("foobar"));
    }
}
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 22:51 #13
Jeg er heller ikke med på hvorfor der skal divideres med 2
Avatar billede arne_v Ekspert
05. april 2004 - 22:53 #14
2 tegn : sammenlign 1-2
3 tegn : sammenlign 1-3
4 tegn : sammenlign 1-4 2-3
5 tegn : sammenlign 1-5 2-4
etc.
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 22:59 #15
Så blev det sådan her :-)

String s = "russerdressur";
      boolean pal = true;
     
      for(int i=0;i<s.length()/2;i++)
      {
         
            if(s.charAt(i) != s.charAt(s.length() - i -1))
            {
                  pal = false;
                  System.out.println(s+" er ikke et palindrom");
                  break;
              }
              else
              {
                  System.out.println(s+" er et palindrom");
                  break;
              }
             
          }
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 23:02 #16
Så behøver jeg ikke booleanen. Er det okay at gøre det sådan :-)
Avatar billede arne_v Ekspert
05. april 2004 - 23:05 #17
Jeg tror at den tester forkert.

Prøv med "axya".
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 23:06 #18
Det ser ud til at virke :-)
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 23:07 #19
Gider du vise mig præcis hvordan du ville gøre
Avatar billede arne_v Ekspert
05. april 2004 - 23:10 #20
public class Pal {
    public static boolean isPal(String s) {
        boolean pal = true;
        for(int i = 0; i < s.length()/2; i++) {
          if(s.charAt(i) != s.charAt(s.length() - i - 1)) {
              pal = false;
          }
        }
        return pal;
    }
    public static void check(String s) {
        if(isPal(s)) {
            System.out.println(s + " er et palindrom");
        } else {
            System.out.println(s + " er IKKE et palindrom");
        }
    }
    public static void main(String[] args) {
        check("regninger");
        check("foobar");
        check("axya");
        check("russerdressur");
    }
}
Avatar billede arne_v Ekspert
05. april 2004 - 23:11 #21
Men jeg har mine sære ideer.

:-)
Avatar billede mikmakmuk Nybegynder
05. april 2004 - 23:16 #22
Nu tror jeg jeg kan se det :-) Mange tak for hjælpen
Avatar billede mikmakmuk Nybegynder
06. april 2004 - 07:29 #23
Jeg har lavet en klasse som hedder Pal. Det virker også fint, men hvad går galt her
sss      = sss.replaceAll(".",""); Det er som om at strengen forsvinder helt

Pal p = new Pal();
          p.check("regninger");
          p.check("russerdressur");
         
          String sss      = "Selmas lakserøde, garagedøre skal samles.";
                sss      = sss.replaceAll(" ","");
                sss      = sss.replaceAll(",","");
              //  sss      = sss.replaceAll(".","");
          String ssstemp  = sss.toUpperCase();
          p.check(ssstemp);
Avatar billede arne_v Ekspert
06. april 2004 - 08:07 #24
public class XPal {
    public static boolean isPal(String s) {
        String s2 = s.replaceAll(" ","").replaceAll(",", "").replaceAll("\\.", "").toUpperCase();
        boolean pal = true;
        for(int i = 0; i < s2.length()/2; i++) {
          if(s2.charAt(i) != s2.charAt(s2.length() - i - 1)) {
              pal = false;
          }
        }
        return pal;
    }
    public static void check(String s) {
        if(isPal(s)) {
            System.out.println("\"" + s + "\" er et palindrom");
        } else {
            System.out.println("\"" + s + "\" er IKKE et palindrom");
        }
    }
    public static void main(String[] args) {
        check("regninger");
        check("foobar");
        check("axya");
        check("russerdressur");
        check("Selmas lakserøde, garagedøre skal samles.");
    }
}
Avatar billede arne_v Ekspert
06. april 2004 - 08:09 #25
Borset fra at jeg har compactet lidt, så er tricket:

.replaceAll("\\.", "")

replaceAll er nemlig ikke det du tror den er !

replaceAll er ikke bare strenge - det er faktisk regular expressions.

Og i regular expressions betyder "." alt og "\\." et punktum.
Avatar billede mikmakmuk Nybegynder
06. april 2004 - 08:13 #26
Godt at vide :-)
Avatar billede jacobbay Nybegynder
07. april 2004 - 16:43 #27
Hvad med sådan her?

  public boolean isPal(String pal) {
    return pal.trim().toUpperCase().equals(new StringBuffer(pal.trim()).reverse().toString().toUpperCase());
  }
Avatar billede arne_v Ekspert
07. april 2004 - 16:48 #28
Det kunne man også.

Smart at konvertere til StringBuffer og bruge dens reverse.
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