1

我不确定为什么会收到此错误。该代码旨在测试回文而不考虑标点符号。

所以这是我的代码:

            char junk;
            String temp = "";

            for (int i = 0; i < txt.length(); i++)
            {
                junk  = txt.charAt(i);
                if (Character.isLetterOrDigit(txt.charAt(jumk)))
                {
                    temp += junk;
                }
            }
            txt = temp;
            left = 0;
            right = txt.length() -1;

            while (txt.charAt(left) == txt.charAt(right) && right > left)
            {
                left++;
                right--;
            }


java.lang.StringIndexOutOfBoundException: PalindromeTester.main(PalindromeTester.java:35) 处的字符串索引超出范围 0

第35行如下:

    while (txt.charAt(left) == txt.charAt(right) && right > left)
4

2 回答 2

1
 if (Character.isLetterOrDigit(txt.charAt(yP)))

是你的问题, yP 是一个字符而不是对位置的引用。

你的意思可能是:

 if (Character.isLetterOrDigit(yP))

编辑:我的评论:权利的值是-1,而charAt需要一个大于0的整数..所以你应该检查txt的长度,如果它是== 0然后显示一条消息说需要一个实际的单词.

您应该在到达此行之前停止执行:

right = txt.length() -1;

这是您的固定代码:

do
    {
        System.out.println("Enter a word, phrase, or sentence (blank line to stop):");
        txt = kb.nextLine();
    }

while (!txt.equals(""));

    txt = txt.toLowerCase();
    char yP;
    String noP = "";

    for (int i = 0; i < txt.length(); i++)
    {
        yP  = txt.charAt(i);
        if (Character.isLetterOrDigit(txt.charAt(yP)))
        {
            noP += yP;
        }
    }
    txt = noP;

    left = 0;
    right = txt.length() -1;

    while (txt.charAt(left) == txt.charAt(right) && right > left)
    {
        left++;
        right--;
    }

    if (left > right)
    {
        System.out.println("Palindrome");
        cntr++;
    }
    else
    {
        System.out.println("Not a palindrome");
    }
于 2012-10-28T22:39:21.873 回答
0

该变量yP是您在 index 处 i的字符,而不是索引(因为您在给您错误的行上使用它)。将该行更改为:

if (Character.isLetterOrDigit(yP)) { ...

编辑新问题:

您不需要 while 循环来检查用户是否没有输入任何内容,因为在这种情况下您不想重复执行某些操作(这就是循环的用途)。由于您只想做某事一次,即打印出他们找到了多少回文,您可以只使用一个if语句。结构如下所示:

do {
    get user input

    if they entered the empty string "" {

        print out how many palindromes they have found so far

    } else { // they must have entered text, so check for palindrome

        your normal palindrome checking code goes here

    }

} while (your condition);

编辑2:

尝试改变

if (left > right)

if (left >= right)

因为如果left==right,这意味着它们都在奇数长度字符串的中间字符上(例如,皮划艇中的'y'),这意味着字符串是回文。

于 2012-10-28T22:40:02.620 回答