2014-07-11 5 views
0

J'ai un problème avec cette partie du code où je veux être en mesure de déclarer un tableau et dont la taille devrait être le nombre correspondant de divisions dans la chaîne. Ou dois-je compter le nombre de virgules dans la chaîne et allouer la taille en conséquence ou y a-t-il une meilleure solution.Solution de contournement pour déclarer un tableau dans une condition if

String MapPath2[]; 
    if(type.equals("comparative")) 
     MapPath2[]=args[1].split(","); 

Je n'ai pas eu l'occasion de coder dans java dans un passé récent. S'il vous plaît, épargnez-moi si c'est une question idiote et guidez-moi en tant que noob. Apprécier ton aide.

+0

Ce n'est pas valide Java. –

+2

En plus de supprimer le '[]' dans l'affectation, cela devrait être correct. 'String.split' retournera le tableau - vous n'avez pas besoin de le pré-allouer. –

+0

Ne nommez pas une variable comme celle-ci. Appelez-le 'mapPath2'. –

Répondre

4

Vous n'avez pas besoin de déclarer la taille, ce que vous avez est très bien si vous supprimez le [] supplémentaire:

String MapPath2[]; 
if(type.equals("comparative")) 
    MapPath2=args[1].split(","); 

Le tableau split donne de nouveau à vous a la taille appropriée. Si vous avez besoin de connaître la taille résultante, utilisez MapPath2.length (après l'avoir assigné).

Vous auriez probablement envie de faire quelque chose dans le else aussi bien, de sorte que MapPath2 a une valeur définie dans les deux cas:

String MapPath2[]; 
if(type.equals("comparative")) 
    MapPath2=args[1].split(","); 
else 
    MapPath2=null; 

ou de façon plus concise:

String MapPath2[]; 
MapPath2 = type.equals("comparative") ? args[1].split(",") : null; 

(au lieu du null s il, si ayant un tableau vide est préféré pour la logique ultérieure comme c'est parfois pratique, remplacez null par new String[0] au-dessus d'un sd ci-dessous. D'autres fois, il est plus pratique d'avoir le null comme « aucune donnée » drapeau)


Side note:. Il y a quelques très majoritairement conventions communes de style de code dans le monde Java que vous ferait mieux de utilisez dans votre code:

  1. Les noms de variables doivent commencer par une lettre minuscule, afin de ne pas être confondus avec les noms de classes. Le [] devrait aller avec le nom du type plutôt qu'avec le nom de la variable.

  2. Toujours utiliser {} même lorsque le corps d'un if ou else est seulement une ligne.

  3. Placez des espaces autour des opérateurs et des mots clés pour faciliter la lecture.

Appliquer ces:

String[] mapPath2; 
if (type.equals("comparative")) { 
    mapPath2 = args[1].split(","); 
} 
else { 
    mapPath2 = null; 
} 

Beaucoup gens mettent également else sur la même ligne que le }, donc:

String[] mapPath2; 
if (type.equals("comparative")) { 
    mapPath2 = args[1].split(","); 
} else { 
    mapPath2 = null; 
} 

Ou encore, de façon plus concise:

String[] mapPath2; 
mapPath2 = type.equals("comparative") ? args[1].split(",") : null; 
+3

Et idéalement utiliser des noms plus conventionnels et des placements en carré :) –

+0

@JonSkeet: En effet. :-) J'ai ajouté une note à la fin à ce sujet. –

+1

Merci à T.J.Crowder. Je suis incapable d'accepter votre réponse pour encore 9 minutes de plus. –

1

Vous pouvez utiliser List au lieu de Array si vous ne savez pas quelle taille il doit être.

Ensuite, vous pouvez utiliser

List<String> list = new ArrayList<>(); 
    if(type.equals("comparative")){ 
     Collections.addAll(list, args[1].split(",")); 
    } 
+0

* "Vous pouvez utiliser' List' au lieu de 'Array' si vous ne savez pas quelle taille il doit avoir." * Vous * pouvez *, mais vous pouvez utiliser un tableau même si vous ne connaissez pas la taille, car 'split' gérera cela pour vous. Dans ce qui précède, vous créez toujours un tableau (en fait, vous créez deux, l'un d'entre eux est temporaire - et en créez probablement trois ou même plus car le premier peut avoir besoin d'au moins une réallocation pendant 'addAll', et peut-être plus d'un). –

Questions connexes