Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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 使用for循环的字符串置换_Java_For Loop_Permutation - Fatal编程技术网

Java 使用for循环的字符串置换

Java 使用for循环的字符串置换,java,for-loop,permutation,Java,For Loop,Permutation,我必须打印给定输入字符串的所有可能排列 使用下面的代码,我现在得到aaaabbbcc,在下一次迭代中,我想打印aaaabaac。aba aca等。请告诉我这件事 String s = "abc"; char ch; ArrayList<Character> input = new ArrayList<Character>(); public static void main (String [] args) { String s= "abc"; int cou

我必须打印给定输入字符串的所有可能排列

使用下面的代码,我现在得到aaaabbbcc,在下一次迭代中,我想打印aaaabaac。aba aca等。请告诉我这件事

String s = "abc";
char ch;
ArrayList<Character> input = new ArrayList<Character>();

public static void main (String [] args)
{
  String  s= "abc";
  int count ; 
  char ch;
  ArrayList<Character> input = new ArrayList<Character>();
  for (int i=0; i < s.length(); i++)
  {
    ch = s.charAt(i);
    input.add(ch);         
  }       


  for (int i=0; i <= input.size(); i++)
  {
    for(int j=0; j < input.size(); j++)
    {
      System.out.print(input.get(i));
    } 
    System.out.println();
  } 
}

在当前实现中,您应该使用:

for (int i=0; i <= input.size(); i++) {
   for(int j=0; j < input.size(); j++) {
      for(int k=0; k < input.size(); k++) {
         System.out.print(input.get(i));
         System.out.print(input.get(j));
         System.out.print(input.get(k));
         System.out.println();
      }
   }
}

但是我认为最好使用s.charAti而不是input.geti。

在当前的实现中,您应该使用:

for (int i=0; i <= input.size(); i++) {
   for(int j=0; j < input.size(); j++) {
      for(int k=0; k < input.size(); k++) {
         System.out.print(input.get(i));
         System.out.print(input.get(j));
         System.out.print(input.get(k));
         System.out.println();
      }
   }
}

但是我认为最好使用s.charAti而不是input.geti。

您可以使用递归函数。范例

private static String text = "abcd";

public static void main(String[] args) {
    loopPattern(text, 0, "");
}

private static void loopPattern(String source, int index, String res) {
    if (source == null || source.length() == 0) {
    return;
    }
    if (index == source.length()) {
        System.out.println(res);
        return;
    }
    for (int i = 0; i < source.length(); i++) {
        loopPattern(source, index + 1, res + source.charAt(i));
    }
}

可以使用递归函数。范例

private static String text = "abcd";

public static void main(String[] args) {
    loopPattern(text, 0, "");
}

private static void loopPattern(String source, int index, String res) {
    if (source == null || source.length() == 0) {
    return;
    }
    if (index == source.length()) {
        System.out.println(res);
        return;
    }
    for (int i = 0; i < source.length(); i++) {
        loopPattern(source, index + 1, res + source.charAt(i));
    }
}

不依赖于字符数的递归版本:

class Test
{
    public static void main(String[] args)
    {
        if(args.length != 1)
        {
            System.out.println("Usage: java Test <string>");
            System.exit(1);
        }

        String input = args[0];

        iterate(input, "", input.length());
    }

    public static void iterate(String input, String current, int level)
    {
        if(level == 0)
        {
            System.out.println(current);
            return;
        }

        for(int i=0; i < input.length(); i++)
        {
            iterate(input, current + input.charAt(i), level-1);
        }
    }

不依赖于字符数的递归版本:

class Test
{
    public static void main(String[] args)
    {
        if(args.length != 1)
        {
            System.out.println("Usage: java Test <string>");
            System.exit(1);
        }

        String input = args[0];

        iterate(input, "", input.length());
    }

    public static void iterate(String input, String current, int level)
    {
        if(level == 0)
        {
            System.out.println(current);
            return;
        }

        for(int i=0; i < input.length(); i++)
        {
            iterate(input, current + input.charAt(i), level-1);
        }
    }

为什么使用ArrayList存储字符串,而使用s.charAti可以读取每个字符?@BackSlash我在这里放置了特定的字符串,但是输入不是特定的,可以是abc123等。那么所需的模式到底是什么?听起来您需要输入字符的所有可能排列。可能的重复为什么您使用ArrayList存储字符串,而每个字符都可以使用s.charAti读取?@反斜杠我在这里放置了特定的字符串,但是输入不是特定的,可以是abc123等。那么所需的模式到底是什么?听起来你想要输入字符的所有可能排列。可能的重复听起来像OP想要输入字符的所有可能排列。在这种情况下,这个解决方案不能扩展,因为它要求每个字符有一个for循环。这与我在课堂上被告知的内容非常相关,我只是没有同时尝试,完全失去了想法。这真的很有用。听起来OP想要输入字符的每一种可能的排列。在这种情况下,这个解决方案不能扩展,因为它要求每个字符有一个for循环。这与我在课堂上被告知的内容非常相关,我只是没有同时尝试,完全失去了想法。这真的很有帮助