我是学习Java的初学者,并且被要求检查给定的字符串是否是回文。
这是我到目前为止所做的:
int namel = name.length();
for (int i =0; i<=namel; i++)
{
char letter = name.charAt(i);
char namerev = name.charAt(namel-i);
String letterS =txtNamePali.getText();
if(letter==namerev)
{
txtNamePali.setText("Palindrone");
}
else
{
txtNamePali.setText( "Not a Palindrone");
}
}
不幸的是我的文本框没有显示任何输出。我已经搜索了如何解决这个问题,但找不到与我在课堂上学到的相关的答案。
我做错了什么,我该如何纠正?
答案 0 :(得分:4)
我认为最简单的测试是使用StringBuilder.reverse()
来构造输入的反向。此外,该单词通常拼写回文。
StringBuilder sb = new StringBuilder(name);
sb.reverse();
String msg = (sb.toString().equals(name)) ? "Palindrome" : "Not a Palindrome";
txtNamePali.setText(msg);
答案 1 :(得分:1)
您可以使用StringBuilder
来完成使用reverse功能。
例如:
public static void main(String args[]){
String str = "1234";
String str1 = "1234321";
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(str);
if(stringBuilder.reverse().toString().equals(str)){
System.out.println("Palindrome");
} else {
System.out.println("Not Palindrome");
}
stringBuilder = new StringBuilder();
stringBuilder.append(str1);
if(stringBuilder.reverse().toString().equals(str1)){
System.out.println("Palindrome");
} else {
System.out.println("Not Palindrome");
}
}
输出:
Not Palindrome
Palindrome
简而言之,你可以做到
new StringBuilder().append(yourString).reverse().toString().equals(yourString)
如果字符串是palindrome,则返回布尔值true,否则返回false。
答案 2 :(得分:0)
您的代码是正确的,但正如有些人所说,您需要考虑一些错误,这些错误应该显示为编译器问题。
int namel = name.length();
boolean isPalindrome = true;
//add a tracking value, it's a palindrome unless we prove it otherwise
for (int i =0; i< namel/2; i++)
//change from <= to < because arrays are 0-index, we also only have to check halfway so we can use namel/2
{
char letter = name.charAt(i);
char namerev = name.charAt(namel-i);
//String letterS =txtNamePali.getText(); <-- not sure what this was for, possibly a debug statement
if(letter!=namerev)
{
isPalindrome = false; //we have found a non-matching value, it'll stay false, and we'll output correctly
}
}
//then we set the text once. Keeping the text inside would have returned an erroneous "abbc" is a palindrome.
if(isPalindrome) {
txtNamePali.setText("Palindrone");
}
else {
txtNamePali.setText( "Not a Palindrone");
}
答案 3 :(得分:0)
1.检查整个字符串时应该给出方法的结果。所以先放
if(letter==namerev)
{
txtNamePali.setText("Palindrone");
}
else
{
txtNamePali.setText( "Not a Palindrone");
}
在循环之外(并改变条件 - 就像我在下面的提议中一样)。 当两个字符的第一个不匹配发生时,你可以打破循环。
2.而不是char namerev = name.charAt(namel-i);
你已经减少了一个位置。
所以请使用:char namerev = name.charAt(namel-1-i);
尝试这样的事情:
String s = "stringtotest";
boolean result = true;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != s.charAt(s.length()-1-i)) {
result = false;
break;
}
}
if (result)
System.out.println("Palindrom");
else
System.out.println("Not palindrom");
答案 4 :(得分:0)
String name="pop"; // string to check if it palindrome or not
String revName="";
int namel = name.length();
for (int i =1; i<=namel; i++)
{
char namerev = name.charAt(namel-i);
revName += namerev;
}
if(name.equals(revName))
{
System.out.println("Palindrome");
}
else
{
System.out.println( "Not a Palindrome");
}
答案 5 :(得分:0)
与其他人一样的一般想法,但我认为这更清晰,更容易阅读。只是一个想法 - 每个人都有自己的风格。 :)如果你是初学者,我强烈建议养成将冗余逻辑转移到自己的方法的习惯。它比较干净,以后可能会更有用。
public class Main {
public static void main( String args[] ) {
for ( String string : args ) {
if ( isPalendrome( string ) {
System.out.println("Palindrome");
} else {
System.out.println("Not a Palindrome");
}
}
}
private static boolean isPalindrome( String string ) {
return string.equals( reverse( string ) );
}
private static String reverse( String original ) {
return new StringBuilder(original).reverse().toString();
}
}