Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    64

    JAVA Combinazioni

    Ciao a tutti qualcuno conosce un metodo per fare in modo di permutare una stringa di lunghezza N in tutte le sue possibili combinazioni...mi spiego meglio...io ho una parola ad esempio "ciao" e voglio poter mescolare tutte le lettere che la compongono in tutti i modi possibili tipo:

    cioa
    coia
    coai
    caoi
    caio
    icao
    icoa
    iaco

    ecc..

    dovrebbero essere 24 possibili combinazioni (essendo una parola di 4 lettere faccio il fattoriale di 4... 4!=24...se sono 3 sono 6 se sono 5 sono 120 e così via)...avrei bisogno di un metodo generale che in base alla lunghezza della stringa mi calcoli tutte le possibili combinazioni..spero di essermi spiegato...

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    75
    prova con questo: sono due classi la prima è la principla, la seconda è il cliente.

    import java.util.ArrayList;

    public class PermutationGenerator {

    public PermutationGenerator(String aWord) {
    word = aWord;
    }

    public ArrayList<String> getPermutations() {
    ArrayList<String> result = new ArrayList<String>();
    if (word.length() == 0) {
    result.add(word);
    return result;
    }

    for (int i=0; i<word.length(); i++) {
    String shorterWord = word.substring(0,i) + word.substring(i+1);


    PermutationGenerator shorterPermutationGenerator = new PermutationGenerator(shorterWord);
    ArrayList<String> shorterWordPermutations = shorterPermutationGenerator.getPermutations();

    for (String s : shorterWordPermutations) {
    result.add(word.charAt(i) + s);
    }

    }
    return result;
    }

    private String word;
    }


    ---------------------------------------------------------

    import java.util.ArrayList;

    public class PermutationGeneratorTester {
    public static void main(String[] args) {

    PermutationGenerator generator = new PermutationGenerator("ciao");
    ArrayList<String> permutations = generator.getPermutations();
    for (String s : permutations)
    {
    System.out.println(s);

    }
    }
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    64

    problemi di compilazione

    Ciao scusami ho dei problemi a compilare questo codice in particolare mi segna errore su:

    for (String s : permutations)

    public ArrayList<String> getPermutations() {

    ..sinceramente non ho mai visto questo tipo di notazione per il for e a dire il vero neanche per <String>...mi
    potresti dire cosa significano..e eventualmente darmi qualche dritta su cosa devo fare per compilare...devo forse aggiungere qualcosa???..o dipendente dalla mia jdk???...io ho la 1.3...

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Su java 1.3 (e fino a 1.5 - 5.0) quel codice non compila nè gira.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    64

    risp

    Infatti mi pareva un po strano... ma da dove è saltato fuori?? :master: ...eventualmente qualcuno a qualche altra idea o qualche dritta da darmi per risosolvere il mio prob..

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Questo è del codice del 2003, l'ho scritto io e non mi ricordo perché, non è ottimizzato, ma mi pare che faccia le cose che chiedi tu.

    codice:
    class permutation2 {
    
      char[] string, working, result;
      char a,b;
      int index1, index2;
      String res;
    
    
      permutation2(String s) {
        string = s.toCharArray();
        working = new char[string.length];
        res = "";
        init();
      }
      //passo gli indici che non devono essere modificati
      private void createWorking(int i, int j) {
        a = string[i];
        b = string[j];
        index1 = i;
        index2 = j;
        for (int k=0; k < string.length; k++) {
          working[k] = string[k];
        }
        permute();
    
      }
    
      private void init() {
        for (int i=0; i < string.length; i++) {
          for (int j=0; j < string.length; j++) {
            if (j==i && j < string.length-1) {
              j++;
            }
            createWorking(i, j);
          }
        }
      }
    
      private void permute() {
        working[index1] = a;
        working[index2] = b;
        res +="\n"+ new String(working);
        working[index1]=b;
        working[index2] = a;
        res += "\n" + new String(working);
      }
    
      public String result() {
        return res;
      }
    }
    
    public class testPer2 {
      public static void main (String args[]) {
        permutation2 p = new permutation2("ciao");
        System.out.println(p.result());
      }
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    64

    risp

    Grazie sono riuscito a risolvere così....
    codice:
    void permutations(String p,String letters,int lung){
    
    			int i= 0;
    
    			while (i<letters.length()) {
    				
    				String newPermutation = p + letters.substring(i,i+1);
    				String newLetters = letters.substring(0,i) + letters.substring(i+1);
    				if(newPermutation.length()==lung)
    				System.out.println(newPermutation);
    				permutations(newPermutation,newLetters,lung);
    				i++;
    				
    				}
    			}

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.