【问题标题】:Pig Latin Translator Program (English sentence input)猪拉丁语翻译程序(英文句子输入)
【发布时间】:2016-05-26 19:41:45
【问题描述】:

我目前正在为 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”时

空格的索引一定有问题。我有心理障碍。

【问题讨论】:

  • Pig latin 似乎是一个比这更复杂的答案。您的 CS 课程对 Pig Latin 的定义是用 string.substring(1) + string.charAt(0) + "ay" 替换所有字符串吗?
  • 使用sent.split(" ") 会更容易,它将sent 拆分为String[],由空格分隔。更好的是,sent.split("\\s+") 拆分发送到 String[] 拆分任意数量的任何类型的空白。
  • 在 Stack Overflow 上有 many other questions and answers 关于 Java 中的 Pig Latin 翻译器。它们也可能会有所帮助。

标签: java arraylist substring


【解决方案1】:

有两个问题:

  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

【讨论】:

  • 你偷了我的答案;我要说的是关于修剪的事情;)有一个赞成票。这是一个非常彻底的答案。
  • 是的,在 StackOverflow 上打字速度有时很关键,为此我不得不多次放弃长答案:))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多