我目前正在为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“
空格索引必定有问题。我有精神障碍。
答案 0 :(得分:3)
有两个问题:
您正在跳过每一个字: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
代替。