java - JOptionPane 中的排列

标签 java swing permutation joptionpane

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);

}

最佳答案

我猜你正在寻找这样的东西:
enter image description here
您应该按照以下步骤进行:

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/

相关文章:

c - 在 C 中打印字符串的所有排列

java - 使用 java 的经典有界缓冲区问题变体的同步问题

java - Spring @Cacheable如何配置复杂的key

java - 支持 Netbeans 和 Eclipse 用户的 Git 存储库的最佳实践

java - 如何触发 Tab 键事件?

c - 获取数字数组的第 i 个组合

Python计算一个表的所有可能组合

java - 错误: Invalid Client - Sign In With Apple with Spring Boot

java - 为什么简单的选择查询返回 List<Mymodel> 但在 jpa 中加入查询返回 List<Object>

java - 如何更改循环内的 JTextField 值