Java 从字符串ArrayList获取输入并输出新字符串
这段代码应该获取一个字符串ArrayList并打印出这些字符串的修改版本,称为“states”。例如:第一个字符串“3,3,L”应打印mmmccl。目前,当我输入ArrayList goodMoves:([3,3,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个状态: MMMCCCL MCR MMMCCL CCCR MMMCL MMCCR MMCCL MMMCR CCCL MMMCCR MCL MMMCCR 这就是我到目前为止所做的:Java 从字符串ArrayList获取输入并输出新字符串,java,string,for-loop,arraylist,concatenation,Java,String,For Loop,Arraylist,Concatenation,这段代码应该获取一个字符串ArrayList并打印出这些字符串的修改版本,称为“states”。例如:第一个字符串“3,3,L”应打印mmmccl。目前,当我输入ArrayList goodMoves:([3,3,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个状态: MMMCCCL MCR MMMCCL CCCR MMMCL
// 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;
}
//测试方法
公共静态void main(字符串[]args){
int传教士=3;
int食人族=3;
布尔BoatState=true;
//添加初始状态
添加(toString(传教士、食人族、船政));
//呼叫检查船并探索
探索(传教士、食人族、船台、古德莫夫、所有莫夫斯马德);
//使用助手方法打印所有步骤
System.out.println(makePicture(goodMoves));
//打印所做操作的总数
字符串finalMoves=(“移动次数:”+(goodMoves.size()-1));
系统输出打印(最终移动);
}
//创建状态空间字符串
公共静态字符串makePicture(ArrayList goodMoves){
//初始化字符串
字符串misssString=“”;
字符串字符串=”;
字符串moveString=“”;
//使用输入创建打印输出
for(字符串输出:goodMoves){
//在字符串的每个索引处获取数字/字符
char missNum=output.charAt(0);
char cannNum=output.charAt(2);
char boatPos=output.charAt(4);
//打印M和C的数量,然后将它们连接在一起
missString=新字符串(新字符[missNum])。替换(“\0”,“M”);
cannString=新字符串(新字符[cannNum])。替换(“\0”,“C”);
//连接两个字符串
moveString=missString+cannString+boatPos+“\n”;
}
}
//返回当前状态的字符串
返回移动字符串;
}
请让我知道,如果有任何澄清需要。这个问题与普通的传教士和食人族游戏有关。提前谢谢
更新:问题解决了。感谢您的反馈试试这个
moveString=misssstring+cannString+boatPos+“,”代码>
还有,这样做
返回moveString.subString(0,moveString.length()-1)代码>它将从字符串中删除最后一个逗号。试试这个moveString=misssstring+cannString+boatPos+“,”代码>
还有,这样做
返回moveString.subString(0,moveString.length()-1)代码>它将从字符串中删除最后一个逗号。这应该是一个注释,但我没有足够的信誉点来做这件事
试试@Shika A刚才说的,最后加+“\n”。像这样:
moveString = missString + cannString + boatPos +"\n";
这将用不同的行分隔您的语句 这应该是一个评论,但我没有足够的声望点来评论
试试@Shika A刚才说的,最后加+“\n”。像这样:
moveString = missString + cannString + boatPos +"\n";
这将用不同的行分隔您的语句 首先,您有一个不必要的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
后,它将打印一个新行。如果你需要换行符在其他地方(我不完全理解你的代码),那么把它移到其他地方。但是添加换行符就这么简单。首先,您有一个不必要的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
后,它将打印一个新行。如果你需要换行符在其他地方(我不完全理解你的代码),那么把它移到其他地方。但是添加换行符就这么简单。插入System.out.println()语句(可能在每行之后),这将帮助您了解每行代码正在做什么,并相应地进行更改。您能否添加初始化goodMoves
的代码部分,以了解输入的外观?你能描述一下你的字符串应该如何被分成几行吗?您说您的方法“打印”字符串的修改版本,但我在代码中没有看到任何sysout,也没有附加任何新行字符;你应该给我们输入和输出的精确样本。这段代码很难查看和调试。我应该让“第一个字符串”3,3,L“应该打印mmmccl”更清晰吗?插入System.out.println()语句(可能在每行之后),这将有助于您了解每行代码的作用,并对其进行相应的更改。您能否添加初始化goodMoves
的代码部分,以了解输入的外观?你能描述一下你的字符串应该如何被分成几行吗?您说您的方法“打印”字符串的修改版本,但我在代码中没有看到任何sysout,也没有附加任何新行字符;你应该给我们输入和输出的精确样本。这段代码很难查看和调试。我应该让“第一个字符串”3,3,L“应该打印mmmccl”更清晰吗?我为不够清晰而道歉,我需要打印每个字符串