2010-07-15 2 views
0

J'ai placé un argument de chaîne dans l'en-tête de la méthode appelé methodASet. Est-il possible d'utiliser cet argument de chaîne dans le corps et renvoie les mots dans l'argument en tant qu'ensemble? Si oui, comment puis-je faire cela? Merci.argument de chaîne pour l'en-tête de la méthode statique du tableau help pour java

public class MyMates { 

private static Set<String> names; 
private static String[] name1 = null; 
private static String[] name2 = null; 
private static String[] name3 = null; 


public MyMates() { 
    methodASet(); // (2) but I then get a error message "methodASet(java.lang.String) in myMates cannot applied to() 
    names = new TreeSet<String>(); 
} 

public static void methodASet(String aTemp) { 

    name1 = new String[]{"Amy", "Jose", "Jeremy", "Alice", "Patrick"}; 
    name2 = new String[]{"Alan", "Amy", "Jeremy", "Helen", "Alexi"}; 
    name3 = new String[]{"Adel", "Aaron", "Amy", "James", "Alice"}; 

    return aTemp; // (1) is it like this? 
} 

Répondre

1

Voici comment vous ajouteriez une chaîne comme aTemp à un ensemble existant:

static Set<String> names = new TreeSet<String>(); 

public static void addToNames(String aTemp) { 
    names.add(aTemp); 
} 

Vous pouvez le faire avec tableau de noms aussi. Je montre la voie facile:

static Set<String> names = new TreeSet<String>(); 

public static void addToNames(String[] manyNames) { 
    for(String name:manyNames) 
    names.add(name); 
} 

L'ensemble doit être créé avant de pouvoir ajouter une valeur (sinon vous obtiendrez un NullPointerException). names est déclaré en tant que champ statique, vous pouvez donc l'utiliser dans le corps de la méthode et ne devez pas le renvoyer.

Vous pouvez utiliser la méthode (seconde) comme ceci:

public static void main(String[] args) { 
    // assuming names is declared and constructed like shown above 
    String[] name1 = new String[]{"Amy", "Jose", "Jeremy", "Alice", "Patrick"}; 
    String[] name2 = new String[]{"Alan", "Amy", "Jeremy", "Helen", "Alexi"}; 
    String[] name3 = new String[]{"Adel", "Aaron", "Amy", "James", "Alice"}; 

    addToNames(name1); 
    addToNames(name2); 
    addToNames(name3); 

    // Prove that the set has no duplicates and is ordered: 
    for(String name: names) 
    System.out.println(name); 
} 

Hope it helps!

+0

merci Andreas_D. J'espère qu'un jour je pourrais être un brillant programmeur comme vous les gars. – DiscoDude

+0

Ne pensez-vous pas que le set ** static ** est une mauvaise idée? Plus globalement, ne serait-il pas préférable de ne pas utiliser de champs/méthodes statiques ici? –

+0

@Sylvain - Je suis d'accord, mais pour cette réponse j'ai essayé de rester très proche des fragments de code de la question ci-dessus, juste pour rendre le plus facile possible pour l'OP de comprendre la réponse. –

1

Votre méthode methodASet() prend String comme argument, donc quand vous appelez la méthode, vous devez passer un String à lui. Vous essayez de l'appeler sans argument.

public MyMates() { 
    methodASet("something"); 
    // ... 
} 

En outre, votre méthode methodASet() est void, ce qui signifie qu'il ne retourne pas de valeur. Donc, vous ne pouvez pas return aTemp; de la méthode. Supprimez la déclaration return, ou déclarer que la méthode renvoie un String:

public static String methodASet(String aTemp) { 
    // ... 

    return aTemp; 
} 
+0

oui c'est un exemple que j'utilise tout le temps. Parfois, je ne suis pas sûr du type d'en-tête de méthode à utiliser. Merci Jesper. – DiscoDude

Questions connexes