Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Far partire il metodo

  1. #1

    Far partire il metodo

    Ciao a tutti, ho questo metodo preso dalla rete:
    codice:
     	
    public static<T> List<List<T>> disposizioni(List<T> linearSet, int k) {
     		List<List<T>> toReturn = new ArrayList<List<T>>();
     		int[] indexes = new int[k];
     		indexes[0] = 0;
     		int i = 0;
     		while (i >= 0) {
     			while (i++ < indexes.length - 1)
     				indexes[i] = indexes[i-1]+1;
     			List<T> toAdd = new ArrayList<T>();
     			for (i = 0; i < k; i++)
     				toAdd.add(linearSet.get(indexes[i]));
     			toReturn.add(toAdd);
     			i = indexes.length - 1;
     			while (i >= 0 && ++indexes[i] == linearSet.size() - (indexes.length-i-1)) 				i--; 		}
     		return toReturn;
     	}
    ma non sono capace di farlo partire.
    Nel main ho un Vector<String> elementi ma come faccio a farlo passare al metodo? E poi, per elencare le disposizioni a video, come faccio?
    Grazie!

  2. #2
    Allora innanzitutto devi mettere al posto delle "T" "String"
    Poi il tuo vector lo devi trasformare in una List
    e alla fine metti

    List<String> Mia = .... // La tua lista di stringhe
    disposizioni(Mia, 5)

  3. #3
    Ciao, grazie per l'aiuto ma non ci sono riuscito: devo fare in modo che il metodo restituisca un Vector<String> che poi dovrei usare e stampare.
    Intanto pongo qui il codice mio modificato ma se lancio l'applicazione nasce un'eccezione:
    [CODE]
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Vector;


    public class DisposizioniSemplici {


    public static<String> List<List<String>> disposizioni(List<String> linearSet, int k) {
    List<List<String>> toReturn = new ArrayList<List<String>>();
    int[] indexes = new int[k];
    indexes[0] = 0;
    int i = 0;
    while (i >= 0) {
    while (i++ < indexes.length - 1)
    indexes[i] = indexes[i-1]+1;
    List<String> toAdd = new ArrayList<String>();
    for (i = 0; i < k; i++)
    toAdd.add(linearSet.get(indexes[i]));
    toReturn.add(toAdd);
    i = indexes.length - 1;
    while (i >= 0 && ++indexes[i] == linearSet.size() - (indexes.length-i-1))
    i--;
    }
    return toReturn;
    }

    public static void main(String arg[]) {
    List<String> Mia = new Vector<String>();
    Mia.add("a");
    Mia.add("b");
    Mia.add("c");
    List<List<String>> aaa = disposizioni(Mia, 2);
    String[] bbb = (String[]) aaa.toArray();
    for(int i=0; i<bbb.length; i++) {
    MyUtil.scriviAndandoCapo(bbb[i].toString());
    }


    }
    [CODE]


  4. #4
    codice:
    List<String> Mia = new Vector<String>();
    così non partirà mai!
    codice:
    List<String> Mia = new List<String>();
    Così si!
    prova
    ah mi raccomando quando stampi stai stampando una list e non un vector!

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Lory1990
    codice:
    List<String> Mia = new Vector<String>();
    così non partirà mai!
    E' correttissimo invece. Vector implementa l'interfaccia List: ovunque puoi passare un List puoi passare un Vector.

    Originariamente inviato da Lory1990
    codice:
    List<String> Mia = new List<String>();
    Così si!
    prova !
    Mi spiace deluderti ma questa riga neanche compila. List è un'interfaccia, non la puoi istanziare direttamente.

    Puoi fare

    List<String> arrayList = new ArrayList<String>();
    List<String> vector = new Vector<String>();
    ecc...

    L'utilizzo dell'interfaccia al posto della classe concreta è anche un approccio consigliato. Il metodo che Power Dragon ha copia-incollato usa List: gli puoi quindi passare ArrayList, Vector, LinkedList e qualsiasi altra implementazione di List.

    @Power Dragon: se non hai esigenze particolari usa ArrayList al posto di Vector. Quest'ultimo è sincronizzato e thread safe (cosa che ne peggiora leggermente le prestazioni). Se non stai lavorando con thread multipli, Vector non ti serve.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Far partire il metodo

    Originariamente inviato da Power Dragon
    ma non sono capace di farlo partire.
    Nel main ho un Vector<String> elementi ma come faccio a farlo passare al metodo? E poi, per elencare le disposizioni a video, come faccio?
    Grazie!
    Mettilo in una classe (es: MiaClasse) e richiamalo in questo modo:

    codice:
    int k = 2;
    List<String> vector = new Vector<String>();
    vector.add("A");
    vector.add("B");
    vector.add("C");
    vector.add("D");
    	
    List<List<String>> disposizioniCalcolate = MiaClasse.<String>disposizioni(vector, k);
    Notare l'uso di <String> nella chiamata del metodo statico.

    Per visualizzare i risultati beh, scorri la lista, no?

    codice:
    for (List<String> list : disposizioniCalcolate )
    { 
        System.out.println(list.toString());
    }
    L'output:

    codice:
    [A, B]
    [A, C]
    [A, D]
    [B, C]
    [B, D]
    [C, D]
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Anche così non è male!
    codice:
    List<String> Mia = new Vector<String>();
    Mia.add("a");
    Mia.add("b");
    Mia.add("c");
    List<List<String>> aaa = disposizioni(Mia, 2);
    String out[][] = new String[aaa.size()][aaa.get(0).size()];
    for(int i =0;i<aaa.size();i++){
        List<String>  x = aaa.get(i);
        for(int j =0;j<x.size();j++){
            out[i][j] = x.get(j);
            System.out.print("["+out[i][j]+"]");
        }
        System.out.println();

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Lory1990
    Anche così non è male!
    No, è un modo orrendo, ingarbugliato e poco leggibile di fare una cosa che si può fare in modo più semplice in due righe di codice... Mai sentito parlare del rasoio di Occam?

    Originariamente inviato da Lory1990
    codice:
    List<String> Mia = new Vector<String>();
    Mia.add("a");
    Mia.add("b");
    Mia.add("c");
    List<List<String>> aaa = disposizioni(Mia, 2);
    String out[][] = new String[aaa.size()][aaa.get(0).size()];
    for(int i =0;i<aaa.size();i++){
        List<String>  x = aaa.get(i);
        for(int j =0;j<x.size();j++){
            out[i][j] = x.get(j);
            System.out.print("["+out[i][j]+"]");
        }
        System.out.println();
    Se ti piace scrivere il quintuplo del codice necessario fai pure
    Non capisco però perché ti crei una matrice a partire dalla lista di liste... a cosa ti serve? A nulla, hai già tutto quello ti serve! Inoltre il metodo disposizioni lo chiami senza dire il tipo di T...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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 © 2025 vBulletin Solutions, Inc. All rights reserved.