我目前正在为 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“
空格的索引一定有问题。我有精神障碍。
最佳答案
有两个问题:
您正在跳过每个第二个单词:
i+=2
。这是通过执行i++
来解决的。一旦 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/