Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串ArrayList获取输入并输出新字符串_Java_String_For Loop_Arraylist_Concatenation - Fatal编程技术网

Java 从字符串ArrayList获取输入并输出新字符串

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

这段代码应该获取一个字符串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

这就是我到目前为止所做的:

// 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”更清晰吗?我为不够清晰而道歉,我需要打印每个字符串