ЯВА: Ошибка при реверсировании строки для проверки палаиндрома

У меня проблема. Я получил задание написать псевдокод для программы проверки палиндрома. Моя проблема в том, что, хотя я получил хорошие оценки в своем назначении псевдокода, когда я пытался написать код в java для собственного редактирования, я не смог сделать так, чтобы он мог проверять int а также string,

import java.util.Scanner;
public class palindromeCheck {

private static Scanner in;

public static void main(String[] args) {

    in = new Scanner(System.in);
    String forward;
    String reverse = "";
    int reverseCountdown;
    System.out.println("enter a string and I will tell you if its a palindrome");
    forward= in.next();
    int stringLength= forward.length();


    for(reverseCountdown = stringLength-1; stringLength>-1; stringLength--);
    reverse=reverse+forward.charAt(reverseCountdown);

    if(forward.equals(reverse))
        System.out.println("Bro you got a palindrome!");
    else
        System.out.println("Thats not a palindrome...");

    }
 }

Теперь моя проблема, насколько я могу найти это с моими жалкими навыками, заключается в том, что в моем for цикл, я переписываю символьные значения в строку один за другим, однако я не могу придумать кодовое решение, которое будет принимать все символы; кажется, что они все, кроме одного. (или, возможно, моя ошибка в чем-то другом.) Но это то, на что я похож, поскольку код будет работать, но я никогда не получаю ответ палиндрома (даже для чего-то очевидного, например, 222), кроме как с односимвольными элементами, такими как 0 или 1.

Любая помощь в исправлении этого или даже понимание более элегантного способа проверки будет принята с благодарностью.

5 ответов

Решение

Цикл for должен быть примерно таким

    for (reverseCountdown = stringLength-1; reverseCountdown >=0; reverseCountdown--){ //have changed the loop variables here
                reverse  += forward.charAt(reverseCountdown);
    }

; в конце цикла for выполнялся цикл for с пустым оператором (только; считается пустым оператором). удалите это и немного измените цикл for,

проблема с вашим циклом for была в том, что вы должны были везде использовать переменную reverseCountdown, но вы делали StringLength-- который не шел великолепно.

Использование StringBuilder также является способом, у которого есть встроенная функция для обращения строки, но я не уверен, что человек, который дал вам назначение, был бы рад видеть вас, используя встроенную функцию.

надеюсь это поможет! Удачи!

Это не псевдокод, верно? Почему у вас точка с запятой после цикла for?

Я бы это убрал.

Это не единственная проблема. Вы должны использовать обратный отсчет в качестве проверки цикла, а не stringLength, и вы должны уменьшить обратный отсчет.

for(reverseCountdown = stringLength-1; reverseCountdown >= 0; reverseCountdown--)

Я думаю, что лучший подход будет либо использовать StringBuilder в Java или сделать свою собственную реализацию, используя array как ниже.

import java.util.Scanner;


public class PalindromeCheck {

private static Scanner in; 

public static void main(String[] args) {

    in = new Scanner(System.in);
    System.out.println("enter a string and I will tell you if its a palindrome");
    char[] arr = in.next().toCharArray();
    boolean bool = true;
    for(int i=0;i<Math.floor(arr.length/2);i++){
        if(arr[i] != arr[arr.length-1-i]){
            System.out.println("Not a palindrome");
            bool = false;
            break;
        }
    }
    if(bool){
        System.out.println("You got a palindrome");
    }
}
}

Это было бы более эффективно, так как это происходит только в половине случаев.

Ваш for цикл завершается точкой с запятой.

for(reverseCountdown = stringLength-1; stringLength>-1; stringLength--);
reverse=reverse+forward.charAt(reverseCountdown);

Я думаю, что вы хотели (и вам нужно проверить и изменить reverseCountdown) что-то вроде

for(reverseCountdown = stringLength-1; reverseCountdown>-1; reverseCountdown--) {
   reverse=reverse+forward.charAt(reverseCountdown);
}

Я бы лично предпочел StringBuilder (потому что у него есть reverse метод) как

System.out.println("enter a string and I will tell you if "
        + "it's a palindrome");
String forward = in.next();
StringBuilder sb = new StringBuilder(forward);
sb.reverse();
if (sb.toString().equals(forward)) {
    System.out.println("Bro you got a palindrome!");
} else {
    System.out.println("Thats not a palindrome...");
}

Проверьте код палиндрома

public class PalindromeCheck {

    public static boolean check(String str) {
        boolean flag = true;
        char[] chs = str.toCharArray();
        int len = chs.length;
        for(int i = 0; i < len/2; i++) {
            if(chs[i] != chs[len - i -1]) {
                flag = false;
                break;
            }
        }
        return flag;
    }

    public static void main(String[] args) {
        String str0 = "123321";
        String str1 = "1234321";
        String str2 = "123421";
        System.out.println(check(str0));
        System.out.println(check(str1));
        System.out.println(check(str2));
    }
}
Другие вопросы по тегам