Duplicata possible:
Déclaration d'un tableau de taille inconnue
Je travaille dans Java et j'essaie de saisir une phrase dans un tableau de chaînes. Je la tokenise et détermine le nombre de mots. Cependant, je dois ajouter chaque mot dans un tableau de chaînes afin de déterminer s'il y a des doublons ou non. Je ne sais pas comment initialiser mon tableau si je ne connais le nombre de mots que plus tard dans le programme.
//Declares variables
Scanner scan = new Scanner (System.in);
int withoutdup = 0, wordCount = 0;
String line, Word;
StringTokenizer tokenizer;
List<String> sentence = ArrayList<String>;
//Asks user for input
System.out.println ("Please enter text. Enter DONE to finish.");
line = scan.next();
//Tokenizes the string and counts the number of character and words
while (!line.equals("DONE"))
{
tokenizer = new StringTokenizer (line);
while (tokenizer.hasMoreTokens())
{
Word = tokenizer.nextToken();
wordCount++;
sentence += Word;
}
line = scan.next();
}
Utilisez un ArrayList
à la place
List<String> list = new ArrayList<String>();
il se développe automatiquement.
Pour vérifier les doublons, vous pouvez utiliser un Set
(HashSet
), il n'autorise pas les éléments en double.
Mise à jour
Je vois quelques problèmes dans votre code:
List<String> sentence = ArrayList<String>;
Vous manquez le new
après =
.
sentence += Word;
Cela ne fonctionnerait que si sentence
était un String
. C'est un List
vous devez donc utiliser la méthode List.add
sentence.add(Word);
De plus, wordCount++;
Est désormais redondant sentence.size()
vous indiquera le nombre de mots.
voyez juste l'exemple ci-dessous, vous aurez une idée sur la façon de déclarer un tableau de chaînes de taille inconnue.
Tout d'abord, utilisez ArrayList pour stocker les chaînes et à chaque appel de la méthode .add, la taille ArrayList augmente d'un élément. Lorsque vous remplissez ArrayList, utilisez la méthode ArrayList size () et créez votre tableau String et dimensionnez-le à partir de. Mais assurez-vous que chaque élément d'une liste de tableaux est un objet, c'est pourquoi vous devez convertir chaque élément en chaîne.
Exemple:
ArrayList list = new ArrayList();
for( int i = 0; i < 100; i++ )
list.add( "stuff" );
String[] strArray = new String[ list.size() ];
for( int j = 0; j < strArray.length; j++ )
strArray[ j ] = list.get( j ).toString();
J'espère que cela vous aidera. C’est juste une façon, mais je pense qu’il pourrait y avoir une autre manière plus efficace de faire la même chose.
Utilisez une structure dynamique qui peut rétrécir et croître au besoin, ArrayList
serait un bon choix, par exemple.
Pas possible, les tableaux sont de longueur constante. Il vaut mieux utiliser Java.util.List
implémentation comme ArrayList,LinkedList
etc...
Si vous souhaitez persister avec le tableau, vous pouvez utiliser une telle fonction pour redimensionner votre tableau, mais là encore, il créera un nouveau tableau avec une nouvelle taille et copiera la valeur des tableaux précédents.
private static Object resizeArray (Object oldArray, int newSize) {
int oldSize = Java.lang.reflect.Array.getLength(oldArray);
Class elementType = oldArray.getClass().getComponentType();
Object newArray = Java.lang.reflect.Array.newInstance(
elementType, newSize);
int preserveLength = Math.min(oldSize, newSize);
if (preserveLength > 0)
System.arraycopy(oldArray, 0, newArray, 0, preserveLength);
return newArray;
}