java - 从 String ArrayList 获取输入并输出新字符串

标签 java string for-loop arraylist concatenation

此代码应采用 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/

相关文章:

c - 使用 for 循环以 X 模式打印字符

c - 如何在char中使用For循环?

java - GSON 库忽略值字段中的 + 符号

java - Java数组的最大限制

具有特定宽度的 Python 字符串

php - 如果提供的函数中小时和分钟为零,则隐藏小时和分钟

java - Solr:支持希腊语的音译/转录

java - Spring Boot 自定义 Bean 加载器

string - 替换字符串中的字符

r - 如何将for循环与需要字符串字段的函数一起使用?