先用 StringTokenizer 得到一字符数组String[] sentence对数 1,2,3,... sentence.length 进行组合。只要实现排列组合就可以了

解决方案 »

  1.   

    "对数 1,2,3,... sentence.length 进行组合。"
    我认为关键就在这个地方,算法的好坏也在这。
      

  2.   

    下面只是输出一组随机产生的数据
    如果想一直输出下去,则将处理至输出部分循环便是,当然在最开头需将strs字符串组copy置另一String数组如oldStr(循环中的strs全部用oldStr替换即可),因为程序必须保证strs不变,且每次开始循环的时候都必须重置oldStr为strs的copy
    另外,如果需要输出全部的组合,这样随机生成肯定是不行的,那则需要另外的处理
    只输出一组随机组合的代码如下:
    import java.io.*;
    import java.util.*;public class StrChange {
      public static void main(String[] args) {
        try {
        DataInputStream in = new DataInputStream(System.in);
        String str = in.readLine();
        String[] strs = new String[str.length()];//保证够长
        int i = 0;
        StringTokenizer st = new StringTokenizer(str);//接收输入字符串
        while (st.hasMoreTokens()) {//分空格处理
          strs[i] = st.nextToken();
          i++;
        }
        int k = i;
        int g = 0;
        String[] newStr = new String[k];
        //begin
        for(i=0;i<k;i++) {
          Random rm = new Random();
          int j = rm.nextInt(k-i);//随机生成小于总字符个数的随机数,即取随机对应字串
          //System.out.println(j);
          newStr[i] = strs[j];//转换
          for(g=j;g<k;g++){
            strs[g] = strs[g+1];//将此字串取出后,后面的字串前移
          }
        }
        //end
        String strOut = "";//组织输出
        for(i=0;i<k;i++) {
          if(i==0) {
            strOut = newStr[i];
          }
          else {
            strOut = strOut + " " + newStr[i];
          }
        }
        System.out.println(strOut);//输出一组随机结果
        }
        catch(Exception e) {
          System.out.println(e);
        }
      }
    }
      

  3.   

    我想了一下,最好的方法应该是递归了!
    每次你用for循环从长度为n的数组中取出一个值,这样下一次你只要从剩下的(n-1)值中再抽出一个,这样递归到只剩下一个的时候就搞定了!你试试!呵呵!
      

  4.   


    递归,可运行, jbuilder3.0package untitled8;
    import java.util.*;public class MyClassCSDN {  public MyClassCSDN() {
      }  public static void main(String[] args) {
        MyClassCSDN myClassCSDN = new MyClassCSDN();
        myClassCSDN.invokedStandalone = true;    ArrayList l=new ArrayList();
        l.add ("I");
        l.add ("am");
        l.add ("a");
        l.add ("good");
        l.add ("man");    ArrayList temp=myClassCSDN.N(l);
        for ( int i=0;i<temp.size ();i++){
          System.out.println((String)temp.get (i));
        }  }
      private boolean invokedStandalone = false;  public ArrayList N (ArrayList list){
        ArrayList result=new ArrayList();
        if ( list.size ()==1 ) return list;
        else {
          for ( int i=0;i<list.size ();i++){
            String head=(String)list.get (i);
            ArrayList templist=(ArrayList)list.clone ();
            templist.remove (i);
            ArrayList tempresult=N(templist);
            if ( ! tempresult.isEmpty () ) {
              for ( int k=0;k<tempresult.size ();k++){
                result.add (head+" "+tempresult.get (k)) ;
              }
            }
          }
        }
        return result;
      }
    }
      

  5.   

    看我这个,也是用递归
    import java.util.*;
    public class TestStr {  public TestStr() {
      }
      public void outString(String test)
      {
        StringTokenizer strtoken=new StringTokenizer(test);
        int count=strtoken.countTokens();
        String[] ken=new String[count];
        int i=0;
        while(strtoken.hasMoreElements())
        {
          ken[i]=strtoken.nextToken();
          i++;
        }
          String outstr =new String(" ");
          arrangeString(ken,count,outstr);
      }  public void arrangeString(String[] ken,int count,String outstr){
        String tempstr=outstr;
        for(int i=0;i<count;i++)
        {
           int tempcount=count;
           outstr=tempstr;
           outstr=outstr.concat(" "+ken[i]);
            if(tempcount==1){
              System.out.println(outstr);
              return;
            }
            tempcount-=1;
            String[] kentemp=new String[tempcount];
            int k=0;
            for(k=0;k<i;k++)
            {
              kentemp[k]=ken[k];
            }
            for(int h=k;h<tempcount;h++)
            {
              kentemp[h]=ken[h+1];
            }
            arrangeString(kentemp,tempcount,outstr);
          }
      }  public static void main(String[] args) {
        TestStr testStr1 = new TestStr();
        String test="i am a good man";
        testStr1.outString(test);
      }
    }
      

  6.   

    列出单词的全部组合?
    输入一句话:The book on the desk is the best book
      

  7.   

    晕,居然现在才发现自己做错了方向……
    to lci21(元戈)
    改动一下楼上cianiao(才鸟)的一下就可以接收键盘输入了package javatest;
    import java.io.*;
    import java.util.*;public class MyClassCSDN {
    0A
      public MyClassCSDN() {
      }  public static void main(String[] args) {
        try {
          MyClassCSDN myClassCSDN = new MyClassCSDN();
          // myClassCSDN.invokedStandalone = true;
          //
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          //DataInputStream in = new DataInputStream(new BufferedInputStream(System.in));
          String str = br.readLine();
          //String str = in.readLine();
          String[] strs = new String[str.length()];//保证够长
          int i = 0;
          StringTokenizer st = new StringTokenizer(str);//接收输入字符串
          while (st.hasMoreTokens()) {//分空格处理
            strs[i] = st.nextToken();
            i++;
          }
          int k = i;
          ArrayList l=new ArrayList();
          for(i=0;i<k;i++) {
            l.add(strs[i]);
          }      ArrayList temp=myClassCSDN.N(l);
          for (i=0;i<temp.size ();i++){
            System.out.println((String)temp.get (i));
          }
        }
        catch(IOException e) {
    0A      System.out.println(e);0D
        }
      }
     // private boolean invokedStandalone = false;  public ArrayList N (ArrayList list){
        ArrayList result=new ArrayList();
        if ( list.size ()==1 ) return list;
        else {
          for ( int i=0;i<list.size ();i++){
            String head=(String)list.get (i);
            ArrayList templist=(ArrayList)list.clone ();
    0A        templist.remove (i);0D
            ArrayList tempresult3DN(templist);
            if ( ! tempresult.isEmpty () ) {
              for ( int k=0;k<tempresult.size ();k++){
                result.add (head2B" "+tempresult.get (k)) ;
              }
            }
          }
        }
        return result;
      }
    }
    ==============================================================
    如上所言,并非完全正确,请从建议的角度、用怀疑的眼光批判地接收
      

  8.   

    靠,csdn工具怎么这么多bug
    居然自动生成OA OD之类的数据……
    sigh
    ==============================================================
    如上所言,并非完全正确,请从建议的角度、用怀疑的眼光批判地接收