• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Metoda do sprawdzania Palindromu

Object Storage Arubacloud
+3 głosów
489 wizyt
pytanie zadane 8 marca 2022 w Java przez lassiter Nowicjusz (180 p.)

Witam serdecznie,

Mam do napisania program, który pobierze od użytkownika słowo i sprawdzi czy podane przez użytkownika słowo jest palindronem (czytane od przodu i od tyłu ma te same znaki), niezależnie od wielkości. Przy tak napisanym kodzie zawsze odpowiedzią jest false niezależnie od podanego słowa. Na 90% jestem pewien, że błąd jest gdzieś w instrukcji warunkowej if ale nie potrafię go zlokalizować.

import java.util.Scanner;

public class czyPalindronMetody {
    public static void main(String[] args) {

        System.out.println("Podaj słowo: ");
        String slowo = getString();
        slowo.toLowerCase();
        System.out.println("czy to slowo jest palindronem? " + czyPalindrom(slowo));

    }

    public static String getString() {
        return new Scanner(System.in).next();
    }

    public static boolean czyPalindrom(String slowo) {

        int x = slowo.length() - 1;
        boolean test = false;

        for (int i = 0; i < slowo.length(); i++) {
            if (slowo.charAt(i) != slowo.charAt(x)) {
                x--;
                test = false;
            } else {
                test = true;
            }
        }
        return test;
    }
}


 

komentarz 8 marca 2022 przez Wiciorny Ekspert (269,790 p.)
program zwraca false, dla słowa np. "Ala" :) więc nie działa poprawnie.
Tak samo dla słowa 'aaa'
np twój for nigdy nie sprawdzi środkowej sekcji.

3 odpowiedzi

+1 głos
odpowiedź 8 marca 2022 przez Wiciorny Ekspert (269,790 p.)
wybrane 8 marca 2022 przez lassiter
 
Najlepsza

Poprawiłem twój przykład

[ PRZETESTOWANE DLA NP : "ALA" "AAA" CZY TEŻ "AAAG"]
 

import java.util.Scanner;
 
public class czyPalindronMetody {
    public static void main(String[] args) {
 
        System.out.println("Podaj slowo: ");
        String slowo = getString();
        slowo.toLowerCase();
        System.out.println("czy to slowo jest palindronem? " + czyPalindrom(slowo));
 
    }
 
    public static String getString() {
        return new Scanner(System.in).next();
    }
 
    public static boolean czyPalindrom(String slowo) {
 
        int x = slowo.length();
        int counter=0; // liczy powtorzenia
 
        for (int i = 0; i < slowo.length()/2; i++) {
            //case ma sprawdzac czy sa rowne 
            if (slowo.charAt(i) == slowo.charAt(x-i-1)) {
                //tak sa rowne to zwiekszamy licznik
               counter ++;
            }
        }
        // jesli counter bedzie takiej samej wielkosci jak x- to palindrom
        // przez dwa dlatego ze wystarczy nam polowa ciagu :) 
        return (counter==x/2);
    }
}

Pomyśl? Sprawdzać masz palindrom czyli, czy słowo od końca jest takie samo jak od przodu... więc możesz ZOPTYMALIZOWAĆ TO ZADANIE, ograniczając się do przeglądania tlyko połowy ciągu, dlatego że pierwsza część Cię nie interesuje :) a w pętli przez te pierwszą część przechodzisz porównując z końcem do połowy- środka.

Jeśli zliczeń PRAWEJ STRONY OD ŚRODKA, jest taka sama ilość względem długości/2 czyli połowy to znaczy że każdy znam od PRAWEJ STRONY ;] był po lewej w tej samej kolejności 

1
komentarz 8 marca 2022 przez lassiter Nowicjusz (180 p.)

Ah no jasne. Chwilę mi zajęło zrozumienie logiki ale już kumam. Serdeczne dziekiyes

 

komentarz 8 marca 2022 przez Wiciorny Ekspert (269,790 p.)
sposobów jest kilka na podejście i rozwiązanie problemu, ja przedstawiłem Ci taki - w postaci prostej, trywialnej i wpasowanej do tego co sam juz pisales
komentarz 9 marca 2022 przez VBService Ekspert (253,300 p.)
edycja 9 marca 2022 przez VBService

@Wiciorny, 

Poprawiłem twój przykład

[ PRZETESTOWANE DLA NP : "ALA" "AAA" CZY TEŻ "AAAG"]

a dla "Ala" i "Aaa"  wink

 

komentarz 9 marca 2022 przez Wiciorny Ekspert (269,790 p.)
Nie rozumiem, wystarczy sprawdzic samemu : dla ALA i AAA zwraca true :) wiec dziala

ZRESZTA CYTUJESZ  to co napisalem a potem zadajesz pytanie :D o to.
komentarz 9 marca 2022 przez VBService Ekspert (253,300 p.)
Pytam bo dla zapisu "ALA" działa, a dla zapisu "Ala" już nie, bo z tego co się orientuję definicja palindromu nie mówi nic o wielkości liter.
komentarz 9 marca 2022 przez Wiciorny Ekspert (269,790 p.)
edycja 9 marca 2022 przez Wiciorny

zadanie o wielkości litter tez nic nie mowi :) zresztą nie jest to moje rozwiazanie a autora tematu, ja tylko  wskazałem czemu ma blad ;] generalnie samemu rozwiązanie napisałbym w 3 linijkach 
wystarczy zmapować to na strumien intow i przefiltrować liczby  cos w taki spsob ale mozna tez lepiej i mam to na githubie 

String temp  = text.replaceAll("\\s+", "").toLowerCase();
    return IntStream.range(0, temp.length() / 2)
      .noneMatch(i -> temp.charAt(i) != temp.charAt(temp.length() - i - 1));

I stwierdzam iz wielkość liter ma znaczenie to jest java ;] nie js i tez biorac pod uwage testerke na code-labsie dla zadania z palindromem ;] slowo Ala nie jest rowne ala 

komentarz 9 marca 2022 przez VBService Ekspert (253,300 p.)

Więc niezależnie od wielkości liter, słowo które jest palindromem zwracało wartość true.

Czy podanie przez użytkownika: "ALA", "Ala", "aLa", "alA" itp. nie powinno mieć znaczenia dla programu.  smiley

0 głosów
odpowiedź 8 marca 2022 przez Velta Maniak (52,010 p.)

czytane od przodu i od tyłu ma te same znaki

Proponuję sprawdzać po prostu odwrócony ciąg znaków:

boolean isPalindrome(String input, boolean checkSpaces) {
    if (!checkSpaces) {
        input = input.replace(" ", "");
    }
    StringBuilder sb = new StringBuilder(input);
    sb.reverse();
    return input.equalsIgnoreCase(sb.toString());
}

 

0 głosów
odpowiedź 9 marca 2022 przez VBService Ekspert (253,300 p.)
edycja 9 marca 2022 przez VBService

Propozycja poprawki

import java.util.Scanner;
 
public class czyPalindronMetody {
    public static void main(String[] args) {
 
        System.out.println("Podaj słowo: ");
        String slowo = getString();
        slowo.toLowerCase();
        System.out.println("Czy to slowo jest palindronem? " + czyPalindrom(slowo.toLowerCase()));
    }
 
    public static String getString() {
        return new Scanner(System.in).next();
    }
 
    public static boolean czyPalindrom(String slowo) {
 
        int x = slowo.length() - 1;
        boolean test = false;
 
        for (int i = 0; i < slowo.length() / 2; i++)
            test = (slowo.charAt(i) != slowo.charAt(x--)) ? false : true;
            
        return test;
    }
}

 

czy nawet tak  wink

import java.util.Scanner;
 
public class czyPalindronMetody {
    public static void main(String[] args) {
  
        System.out.println("Podaj słowo: ");
        String slowo = getString();
        slowo.toLowerCase();
        System.out.println("Czy to slowo jest palindronem? " + czyPalindrom(slowo.toLowerCase()));
    }
  
    public static String getString() {
        return new Scanner(System.in).next();
    }
  
    public static String czyPalindrom(String slowo) {
  
        int x = slowo.length() - 1;
        String test = "";
  
        for (int i = 0; i < slowo.length() / 2; i++)
            test = (slowo.charAt(i) != slowo.charAt(x--)) ? "Nie" : "Tak";
             
        return test;
    }
}

 

Podobne pytania

0 głosów
2 odpowiedzi 529 wizyt
pytanie zadane 9 maja 2018 w Java przez Piotr Brodziak Początkujący (390 p.)
0 głosów
1 odpowiedź 237 wizyt
pytanie zadane 24 maja 2022 w Matematyka, fizyka, logika przez Oryctes Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 338 wizyt
pytanie zadane 22 października 2021 w C# przez Bodziek96 Nowicjusz (150 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...