簡體   English   中英

在Java中,如何檢查字符串是否是回文?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM