[英]How do you check if a string is a palindrome in java?
我正在嘗試編寫一個程序來檢查字符串是否是回文,到目前為止,我知道我在正確的路徑上,但是當我輸入代碼時,它將永遠運行。 我不知道問題出在哪里,希望能幫助您找到解決方案。 在我的程序中,我希望用戶在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.");
}
}
由於這一行:
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上有許多QA具有更快的解決方案(提示:不要構建字符串,只比較字符)。
這可以以更加有效的方式實現:
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()'讀取了另一個值。 這是您遇到問題的原因。
去掉
Scanner in = new Scanner(System.in);
和
n = in.nextLine();
來自Printpalindrome函數
它應該工作。
我嘗試了您的代碼,發現的是:首先,您要在代碼的第2行輸入一個字符串:
String n=console.next();
接下來,當執行此行時,程序再次進入等待狀態:
n = in.nextLine();
實際上,該特定行還期望輸入,因此這就是程序在此時停止的原因。 如果您在此時輸入要檢查回文的字符串,您將獲得理想的結果。 但我希望您刪除該行
n = in.nextLine();
因為您必須輸入兩個不明確的詞。
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.");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.