2013-06-06 3 views
0

Надеюсь, это не глупый вопрос, но я взял код из другого сообщения. Он просто генерирует все перестановки строки. То, что я хотел бы сделать, это просто изменить его, чтобы все перестановки были добавлены в arraylist, но у меня возникли проблемы с поиском того, что, надеюсь, простое очевидное решение. Может ли кто-нибудь быстро взглянуть на это и объяснить, что я делаю неправильно? Я просто хочу взять перестановки строки и создать список массивов, вот и все.Создать ArrayList из перестановок Java

public class UserInput { 

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter Word: "); 
    List<String> inputList = new ArrayList<String>(); 
    String input = scan.next(); 
    permutation(input); 

      //Error occurs here 
    inputList.addAll(permutation(input)); 

} 

public static void permutation(String str) { 
    permutation("", str); 
} 

private static void permutation(String prefix, String str) { 
    int n = str.length(); 
    if (n == 0) System.out.println(prefix); 
    else { 
     for (int i = 0; i < n; i++) 
      permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n)); 
    } 
} 

}

ответ

6

Перестановка не имеет типа возвращаемого значения, это метод, пустота, вы ставите его в списке, который принимает только объекты типа String. Вы можете изменить его так, как только рекурсии достигает самого низкого уровня она добавляет себя в список как так:

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter Word: "); 
    List<String> inputList = new ArrayList<String>(); 
    String input = scan.next(); 
    permutation(input, inputList); 

    System.out.println(inputList); 

} 

public static void permutation(String str, List<String> result) { 
    permutation("", str, result); 
} 

private static void permutation(String prefix, String str, 
     List<String> container) { 
    int n = str.length(); 
    if (n == 0) { 
     container.add(prefix); 
    } else { 
     for (int i = 0; i < n; i++) 
      permutation(prefix + str.charAt(i), 
        str.substring(0, i) + str.substring(i + 1, n), 
        container); 
    } 
} 

Для "Hei"

[Hei, Hie, eHi, eiH, iHe, ieH] 
+0

Спасибо, это сработало. – David

-1

permutation(input) возвращает пустоту, в то время как inputList.addAll() ожидает Collection<String>.

1

Вместо того чтобы печатать перестановку, вы можете добавить ее в список.

import java.util.List; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class UserInput { 
private static List<String> inputList; 
public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter Word: "); 
    inputList = new ArrayList<>(); 
    String input = scan.next(); 
    permutation(input); 

    System.out.println(inputList.toString()); 

} 

public static void permutation(String str) { 
    permutation("", str); 
} 

private static void permutation(String prefix, String str) { 
    int n = str.length(); 
    if (n == 0) inputList.add(prefix); 
    else { 
     for (int i = 0; i < n; i++) 
      permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n)); 
    } 
} 
} 
Смежные вопросы