【问题标题】:Getting input from String ArrayList and output new strings从 String ArrayList 获取输入并输出新字符串
【发布时间】:2017-02-15 20:17:58
【问题描述】:

此代码应采用字符串数组列表并打印出这些字符串的修改版本,称为“状态”。例如:第一个字符串“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 个州:

MMCCCL

MCR

MMMCCL

CCCR

MMMCL

MMCCR

MMCCL

MMC

CCCL

MMMCCR

MCL

MMCCCR

这是我目前所拥有的:

// 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;
}

如果需要任何说明,请告诉我。这个问题参考了常见的传教士和食人族游戏。提前致谢!

更新:问题已解决。感谢您的反馈

【问题讨论】:

  • 插入 System.out.println() 语句(可能在每一行之后),这将帮助您了解每行代码在做什么并相应地进行更改。
  • 您能否添加初始化goodMoves 的代码部分以了解输入的外观?你能描述一下你的琴弦应该如何分成几行吗?您说您的方法“打印”了字符串的修改版本,但我在您的代码中没有看到任何系统输出,也没有附加任何换行符。
  • 我在我的代码的main方法中调用了名为makePicture的方法:System.out.println(makePicture(goodMoves));
  • 你真的应该给我们输入和输出的精确样本。这段代码很难查看和调试。
  • 我应该让“第一个字符串 "3,3,L" 应该打印 MMMCCCL" 更清晰吗?

标签: java string for-loop arraylist concatenation


【解决方案1】:

试试这个moveString = missString + cannString + boatPos +",";

另外,这样做 return moveString.subString(0,moveString.length()-1); 它将从字符串中删除最后一个逗号。

【讨论】:

  • 我对表述不够清晰深表歉意,我需要将每条语句打印成一行。您的方法将用逗号分隔它们。
  • 换行试试这个System.out.println(missString + cannString + boatPos);
  • 好的,我知道了。问题在于这一行 missString = new String(new char[missNum]).replace("\0", "M"); cannString = new String(new char[cannNum]).replace("\0", "C"); 将其替换为 for(int i=0;i&lt;Character.getNumericValue(missNum);i++){ moveString +="M"; } for(int i=0;i&lt;Character.getNumericValue(cannNum);i++){ moveString +="C"; }moveString += boatPos; moveString += "\n"; 它应该可以工作
【解决方案2】:

这应该是一条评论,但我没有足够的声望点来执行此操作。

试试@Shika A 刚才说的,最后加上+“\n”。像这样:

moveString = missString + cannString + boatPos +"\n";

这会将您的语句分隔在不同的行中。

【讨论】:

  • 在此过程中,打印输出为“MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCR”
【解决方案3】:

首先,你有一个不必要的 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 后,它将打印一个新行。如果您需要将换行符放在其他地方(我不完全理解您的代码),请将其移至其他地方。但是添加换行符就是这么简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多