回文代码(下面给出的错误)

时间:2016-06-08 13:13:03

标签: java

ng-if="schedule.NOM_EQU1"

输出尖叫错误:

输入word =>女士

package palindrome;
import java.util.Scanner;
public class Palindrome 
{
    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the word = > ");
        String word = input.nextLine();
        int flag = 0;
        int x = word.length();
        int i = 0;
        int j = x;
        for(; i<=x/2 && j>=x/2; i++,j--)
        {
            if(word.charAt(i)!=word.charAt(j))
            {
                flag = 1;
                break;
            }
        }
        if(flag==0)
        {
            System.out.printf("The word '%s' is a palindrome", word);
        }
        else 
            System.out.printf("The word '%s' is not a palindrome", word);
    }


}

8 个答案:

答案 0 :(得分:2)

int j = x;

应该是:

int j = x-1;

答案 1 :(得分:1)

您必须将j的初始值设置为length-1

import java.util.Scanner;
public class Scratch 
{
    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the word = > ");
        String word = input.nextLine();
        int flag = 0;
        int x = word.length()-1;
        int i = 0;
        int j = x;
        for(; i<=x/2 && j>=x/2; i++,j--)
        {
            if(word.charAt(i)!=word.charAt(j))
            {
                flag = 1;
                break;
            }

        }
        if(flag==0)
        {
            System.out.printf("The word '%s' is a palindrome", word);
        }
        else 
            System.out.printf("The word '%s' is not a palindrome", word);
    }


}

答案 2 :(得分:0)

索引从数组中的0开始。

package palindrome;
import java.util.Scanner;
public class Palindrome
{
public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the word = > ");
    String word = input.nextLine();
    int flag = 0;
    int x = word.length();
    int i = 0;
    int j = x-1;
    for(; i<=x/2 && j>=x/2; i++,j--)
    {
        System.out.println(i+" " +j );
        if(word.charAt(i)!=word.charAt(j))
        {
            flag = 1;
            break;
        }
    }
    if(flag==0)
    {
        System.out.printf("The word '%s' is a palindrome", word);
    }
    else
        System.out.printf("The word '%s' is not a palindrome", word);
}

}

答案 3 :(得分:0)

你只是忘记将单词的长度减少1: 记住Java中字符串和数组的索引从0开始,因此长度应始终为-1,因为它不会到达。例如,如果单词的长度为4,则可以达到索引3,即0到3,总长度为4。

int x = word.length()-1;
    int i = 0;
    int j = x;
    for (; i <= x / 2 && j >= x / 2; i++, j--) {
        if (word.charAt(i) != word.charAt(j)) {
            flag = 1;
            break;
        }
    }

答案 4 :(得分:0)

只是澄清其他答案:
字符串是一个字符数组,所以如果你写“女士”

[m][a][d][a][m] -> is 5 letters, so its length is 5
[0][1][2][3][4] -> but the indexes start with 0, so the last one is 4

因此,x=word.length()-1

答案 5 :(得分:0)

我在你的代码中犯了错误。

&#34; j = x的值;&#34; // 是错的 由于String是一个字符数组,因此从0开始到string.length-1。

因此 int j = x-1 ; //会做对吗

答案 6 :(得分:0)

我的建议是你应该有一个单独的方法来检查回文,这样你就可以使你的代码变得干净和质量代码。你可以使用以下方法来检查回文:

public static void main(String[] args) 
{
        Scanner input = new Scanner(System.in);
        System.out.print("Enter the word = > ");
        String word = input.nextLine();

       if(isPalindrome(word))
       {
           System.out.printf("The word '%s' is a palindrome", word);
       }
      else 
          System.out.printf("The word '%s' is not a palindrome", word);
}


private static boolean isPalindrome(String input) {
        if(input == null || input.isEmpty()) {
            return false;
        }
        for(int i=0,j=input.length() -1; i > j; i++,j-- ) {
            if(input.charAt(i) != input.charAt(j)) {
                return false;
            }
        }
        return true;
}

答案 7 :(得分:-2)

我认为这是因为5的结果分为2。 尝试将中间长度保持为整数。