java - Pig Latin Translator Program(英文句子输入)

标签 java arraylist substring

我目前正在为 AP 计算机科学编写 Java 程序,目标是将英语句子翻译成 Pig Latin。我的完整程序代码是 http://pastebin.com/PJgpveAh

但主要问题(我相信)是

    public static String pigLatSent(String sent)
{
    sent.trim();
    String finalSent="";
    ArrayList<Integer> spaceIndexes= new ArrayList<Integer>();
    spaceIndexes.add(0);
    for(int i=0;i<sent.length();i++)
    {
        if(sent.charAt(i)==' ')
        {
            spaceIndexes.add(i);
        }
    }
    for(int i=0;i<spaceIndexes.size()-1;i+=2)
    {
        int value=spaceIndexes.get(i);
        int value1=spaceIndexes.get(i+1);
        finalSent+=pigLat(sent.substring(value, value1))+" ";
    }
    return finalSent;
}

输入“你好,你好吗” 程序返回“你翻译的句子是ellohay are ay” 当它应该是“你的翻译句子是”你的翻译句子是ellohay owhay areway ouyay“

空格的索引一定有问题。我有精神障碍。

最佳答案

有两个问题:

  1. 您正在跳过每个第二个单词:i+=2。这是通过执行 i++ 来解决的。

  2. 一旦 1. 固定,您将跳过最后一个单词,因为索引列表不包括字符串的末尾。这是通过在第一个循环之后执行 spaceIndexes.add(sent.length()); 来解决的(与循环之前的 spaceIndexes.add(0); 对称) .

然后,还有一堆其他的小问题:

  • sent.trim() 没有达到您的预期。 String 在 Java 中是不可变的,所以这个表达式返回新的修剪过的字符串,它只是被忽略了。它应该是 sent = sent.trim();(或者对结果使用不同的变量,然后再使用它)。

  • pigLat() 函数接收包含前导空格的单词(第一个除外),例如它按顺序接收以下输入:"hello", "how", "are", "you"。这必须由 pigLat() 实现来处理。

  • 在循环中连接字符串是一种已知的反模式 — 参见 Schlemiel the Painter's algorithm .请考虑改用 StringBuilder

关于java - Pig Latin Translator Program(英文句子输入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35417117/

相关文章:

java - appengine 上的聊天应用程序

java - 如何打乱字符串数组

java - 组合两个不同的数组列表并根据时间排序

python - 如何同时替换多个子字符串

c - 如何制作受正则表达式启发的字符串函数?

java - ZipOutputStream 提示 FileNotFoundException

java - Guava :ImmutableList.of(E[]) 的最佳实践

Java - ByteBuffer 还是 ArrayList<Byte>?

java - 在 Java 中将字符串转换为 token 数组

java - 我正在尝试制作一个简单的程序,用 'a' 符号替换 'e' 、 'i' 、 "*"但我收到此错误代码