猪拉丁语翻译程序(英文句子输入)

时间:2016-02-15 19:02:28

标签: 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是ay” 当它应该是“你的翻译句子是”你的翻译句子是ellohay owhay areway ouyay“

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

1 个答案:

答案 0 :(得分:3)

有两个问题:

  1. 您正在跳过每一个字:i+=2。这可以通过执行i++来解决。

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

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

    • sent.trim()没有达到您的期望。 String在Java中是不可变的,因此该表达式返回新修剪的字符串,该字符串被忽略。它应该是sent = sent.trim();(或者为结果使用不同的变量并在之后使用它)。

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

    • 在循环中连接字符串是一种已知的反模式 - 请参阅Schlemiel the Painter's algorithm。请考虑使用StringBuilder代替。