Java 使用for循环的字符串置换
我必须打印给定输入字符串的所有可能排列 使用下面的代码,我现在得到aaaabbbcc,在下一次迭代中,我想打印aaaabaac。aba aca等。请告诉我这件事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
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循环。这与我在课堂上被告知的内容非常相关,我只是没有同时尝试,完全失去了想法。这真的很有帮助