ЯВА: Ошибка при реверсировании строки для проверки палаиндрома
У меня проблема. Я получил задание написать псевдокод для программы проверки палиндрома. Моя проблема в том, что, хотя я получил хорошие оценки в своем назначении псевдокода, когда я пытался написать код в 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));
}
}