我正在尝试编写一个程序来检查字符串是否为回文并且到目前为止我知道我在正确的路径上但是当我输入我的代码时它会一直运行。我不知道问题是什么,并希望帮助找到解决方案。在我的程序中,我希望用户在方法Printpalindrome中输入单词或单词,然后程序应该知道字符串是否是回文。
这是我的代码:
...
Scanner console = new Scanner (System.in);
String str = console.next();
Printpalindrome(console, str);
}
public static void Printpalindrome(Scanner console, String str) {
Scanner in = new Scanner(System.in);
String original, reverse = "";
str = in.nextLine();
int length = str.length();
for ( int i = length - 1; i >= 0; i-- ) {
reverse = reverse + str.charAt(i);
}
if (str.equals(reverse))
System.out.println("Entered string is a palindrome.");
}
}
答案 0 :(得分:3)
由于这一行:
n = in.nextLine();
你的程序正在等待第二次输入,但在进入该功能之前你已经有了一个输入。
删除此行,它可以正常工作。
此处您的计划,已清理(并经过测试):
public static void main(String[] args){
Scanner console = new Scanner (System.in);
String n = console.next();
Printpalindrome(n);
}
public static void Printpalindrome(String n){
String reverse = "";
for ( int i = n.length() - 1; i >= 0; i-- ) {
reverse = reverse + n.charAt(i);
System.out.println("re:"+reverse);
}
if (n.equals(reverse))
System.out.println("Entered string is a palindrome.");
else
System.out.println("Entered string is NOT a palindrome.");
}
当然,这不是最好的算法,但你已经知道SO上有很多质量保证和更快的解决方案(提示:不要构建字符串,只需比较字符)。
答案 1 :(得分:0)
这可以以更有效的方式实施:
boolean isPalindrom(String s){
if (s == null /* || s.length == 0 ?*/) {
return false;
}
int i = 0, j = s.length() - 1;
while(i < j) {
if(s.charAt(i++) != s.charAt(j--)) {
return false;
}
}
return true;
}
忽略PrintPalindrom
的参数。您使用`in.nextLine()&#39;读取另一个值。这就是你问题的原因。
答案 2 :(得分:0)
删除
Scanner in = new Scanner(System.in);
和
n = in.nextLine();
来自Printpalindrome函数的
它应该有用。
答案 3 :(得分:0)
我尝试了你的代码,我观察到的是: 首先,你要在代码的第2行输入一个字符串:
String n=console.next();
接下来,当该行执行时,程序再次进入等待状态:
n = in.nextLine();
实际上这个特定的行也期望输入,这就是程序在这个时间点停止的原因。 如果您输入要在此时检查回文的字符串,您将获得所需的结果。 但我宁愿你删除该行
n = in.nextLine();
因为这样,你必须输入两个含糊不清的词。
答案 4 :(得分:0)
Ur代码有一些更正: -
import java.util.*;
class Palindrome
{
public static void main(String args[])
{
String original, reverse = "";
Scanner in = new Scanner(System.in);
System.out.println("Enter a string to check if it is a palindrome");
original = in.nextLine();
int length = original.length();
for ( int i = length - 1; i >= 0; i-- )
reverse = reverse + original.charAt(i);
if (original.equals(reverse))
System.out.println("Entered string is a palindrome.");
else
System.out.println("Entered string is not a palindrome.");
}
}