此代码应采用 String ArrayList 并打印出这些字符串的修改版本(称为“states”)。例如:第一个字符串“3,3,L”应打印 MMMCCCL。目前,当我输入 ArrayList goodMoves: ([3,3,L, 1,1,R, 3,2,L, 0,3,R, 3,1,L, 2,2,R, 2,2,L, 3,1,R, 0,3,L, 3,2,R, 1,1,L, 3,3,R]) 时,代码返回 ArrayList 中的最后一个状态(“MMMCCCR”)而不是所有 11 个州:
MMMCCL
MCR
MMMCCL
CCCR
MMMCL
MMCCR
MMCCL
MMMCR
CCCL
MMMCCR
MCL
MMMCCCR
这是我到目前为止所拥有的:
// Testing method
public static void main(String[] args) {
int missionaries = 3;
int cannibals = 3;
boolean BoatState = true;
// Add initial state
goodMoves.add(toString(missionaries, cannibals, BoatState));
// Call checkBoat and explore
explore(missionaries, cannibals, BoatState, goodMoves, allMovesMade);
// Print all steps using helper method
System.out.println(makePicture(goodMoves));
// Print the total number of operations made
String finalMoves = ("Number of moves made: " + (goodMoves.size()-1));
System.out.println(finalMoves);
}
// Create strings of state spaces
public static String makePicture(ArrayList<String> goodMoves) {
// Initialize strings
String missString = "";
String cannString = "";
String moveString = "";
// Use input to create printout
for (String output: goodMoves) {
// Get numbers/character at each index of string
char missNum = output.charAt(0);
char cannNum = output.charAt(2);
char boatPos = output.charAt(4);
// Print number of M's and C's then concatenate them together
missString = new String(new char[missNum]).replace("\0", "M");
cannString = new String(new char[cannNum]).replace("\0", "C");
// Concatenate both strings
moveString = missString + cannString + boatPos + "\n";
}
}
// Return string of current state
return moveString;
}
如果需要任何说明,请告诉我。这个问题引用了常见的传教士和食人者游戏。提前致谢!
更新:问题已解决。感谢您的反馈
最佳答案
首先,您有一个不必要的 if 结构。你有 if (boatPos == 'L')
然后你做一些事情,然后有 else
然后做完全相同的事情。因此,只需删除 if 结构并执行该操作即可。
因此将 for 循环更改为:
// Use input to create printout
for (String output: goodMoves) {
// Get numbers/character at each index of string
char missNum = output.charAt(0);
char cannNum = output.charAt(2);
char boatPos = output.charAt(4);
// Print number of M's and C's then concatenate them together
missString = new String(new char[missNum]).replace("\0", "M");
cannString = new String(new char[cannNum]).replace("\0", "C");
// Concatenate both strings
moveString = missString + cannString + boatPos + "\n";
}
请注意,在最后一行,我添加了一个 "\n"
。那是换行符。计算完每个 moveString
后,它将打印一个新行。如果您需要将换行符放在其他地方(我不完全理解您的代码),则将其移动到其他地方。但添加换行符就这么简单。
关于java - 从 String ArrayList 获取输入并输出新字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39906955/