0

所以我正在尝试编写一个程序来打印一个所有元音都替换为 $ 的单词。在爪哇。

当我运行它时,我不断收到这个错误exception in thread main java.lang.StringIndexOutOfBoundsException: String index out of range: 6,它编译得很好。这是代码。

import java.util.*;

public class SummerFour
{
    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);

        int cnt = 0;
        String word;
        String output = "";
        char letter = 'x';
        System.out.print("enter word to test: ");
        word = keyboard.nextLine();

        do {

            cnt++;
            letter = word.charAt(cnt - 1);

            if (letter == 'a' || letter == 'i' || letter == 'e' || letter == 'u' || letter == 'o')
            {
                letter = '$';
            }
        }
        while (cnt <= word.length());

        System.out.println(word);
    }
}
4

1 回答 1

1

您的 do...while 循环有一个错误。您检查是否cnt小于或等于字符串的大小,然后将其递增 1 并将该值 - 1 用作String.charAt(). 这是有问题的,因为字符串是从 0 开始索引的,所以在字符串的末尾,你总是会走得太远。

想想这个例子:

tacos

这是一个五个字母的单词。当 时cnt = 5,您将再次返回循环一次(因为 5 小于或等于 5)并递增cnt到 6。然后您String.charAt()使用 5 (6 -1) 的值调用,但 的范围tacos仅为 0 -4 (0 = t, 1 = a, 2 = c, 3 = o, 4 = s),因此 5 超出范围。您可以通过执行以下操作使您的 do...while 循环正常工作并且看起来不那么混乱:

    do
    {
        letter = word.charAt(cnt);

        if (letter=='a'||letter=='i'||letter=='e'||letter=='u'||letter=='o')
        {
            letter='$';
        }
        cnt++;
    } while(cnt<word.length());

当然,代码仍然没有按照您的意愿执行,但是您不再收到原始错误。由于这看起来可能是家庭作业,我会让你继续完成它。

于 2012-07-29T03:13:45.213 回答