import javax.swing.JOptionPane;
public class Permutations {
public static void main(String[] args) throws Exception {
String str = null;
str = JOptionPane.showInputDialog("Enter a word");
StringBuffer strBuf = new StringBuffer(str);
doPerm(strBuf,str.length());
}
private static void doPerm(StringBuffer str, int index){
String[] anArrayOfStrings;
if(index == 0){
System.out.println(str);
}
else {
doPerm(str, index-1);
int currPos = str.length()-index;
for (int i = currPos+1; i < str.length(); i++) {
swap(str,currPos, i);
doPerm(str, index-1);
swap(str,i, currPos);
}
}
}
private static void swap(StringBuffer str, int pos1, int pos2){
char t1 = str.charAt(pos1);
str.setCharAt(pos1, str.charAt(pos2));
str.setCharAt(pos2, t1);
}
}
使用上面的代码,我排列了一个词并在控制台中打印它们。
样本 输入:坏
输出:
bad
bda
abd
adb
dab
dba
我想在 JOptionPane 中显示输出。我试图替换这一行
System.out.println(str);
有了这个
JOptionPane.showMessageDialog(null, str);
但是所有输出都不会加载到 1 JOptionPane 中。相反,它会显示一个带有“坏”的 JOptionPane,当我单击“确定”或按 Enter 时,将显示一个带有“bda”的 JOptionPane,依此类推,直到完成循环。我想要的是在单个 JOptionPane 中显示 6 个输出。
我也试过类似数组但几乎相同的输出。
private static void doPerm(StringBuffer str, int index){
ArrayList<String> list = new ArrayList<String>();
if(index == 0){
list.add(str.toString());
}
else {
doPerm(str, index-1);
int currPos = str.length()-index;
for (int i = currPos+1; i < str.length(); i++) {
swap(str,currPos, i);
doPerm(str, index-1);
swap(str,i, currPos);
}
}
JOptionPane.showMessageDialog(null, list);
}
最佳答案
我猜你正在寻找这样的东西:
您应该按照以下步骤进行:
import javax.swing.JOptionPane;
public class Permutation {
public static void main(String[] args) throws Exception {
String str = null;
str = JOptionPane.showInputDialog("Enter a word");
StringBuffer strBuf = new StringBuffer(str);
doPerm(strBuf,str.length());
JOptionPane.showMessageDialog(null,sbuf.toString());
}
static StringBuffer sbuf = new StringBuffer();
private static void doPerm(StringBuffer str, int index){
String[] anArrayOfStrings;
if(index == 0){
//System.out.println(str);
sbuf.append(str+"\n");
}
else {
doPerm(str, index-1);
int currPos = str.length()-index;
for (int i = currPos+1; i < str.length(); i++) {
swap(str,currPos, i);
doPerm(str, index-1);
swap(str,i, currPos);
}
}
}
private static void swap(StringBuffer str, int pos1, int pos2){
char t1 = str.charAt(pos1);
str.setCharAt(pos1, str.charAt(pos2));
str.setCharAt(pos2, t1);
}
}
关于java - JOptionPane 中的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17410587/