web-dev-qa-db-fra.com

Le type de l'expression doit être un type de tableau, mais il a été résolu en ArrayList

J'essaie de comparer chaque chaîne ou entier d'un tableau avec un autre tableau, puis affiche les résultats selon que la chaîne existe ou non dans l'autre tableau: Ci-dessous, le code complet: en essayant de comparer deux valeurs en utilisant .equals (pas sûr si sa bonne méthode , ... Je suis nouveau à cela) S'il vous plaît aider!

public class comparer {
public void compare (){

    ArrayList NameofFileinDir = new ArrayList ();
    ArrayList Stocks = new ArrayList();
    // populate array with files names in dir
    try {   
        Scanner reads = new Scanner (new File("G:/Programming/StockDataDownload/NameOfFileinDir.txt"));
        String FileCode;
        while (reads.hasNext()){  
               FileCode = reads.nextLine(); //read next line
                               NameofFileinDir.add(FileCode);

        }
        reads.close();
        }
        catch (IOException e) { 
        }
    // populate array with original stocks
    try {   
        Scanner reads = new Scanner (new File("G:/Programming/StockDataDownload/AllSecurities.txt"));
        String StockCode;
        while (reads.hasNext()){  
               StockCode = reads.nextLine(); //read next line
               Stocks.add(StockCode);

        }
        reads.close();
         for(int i = 0; i < Stocks.size(); i++) {

             for (int j = 0; j < NameofFileinDir.size(); j++) {
                    if (Stocks[i].equals(NameofFileinDir[j])) > 0) {
                        System.out.println("Stock:" + Stocks[i]);}
                    else{
                        System.out.println("Stock not in files:" + Stocks[i]);
                    }
                    }
             }

        }
        catch (IOException e) { 
        }

}}
8
Faisal Mehmood
  1. Une ArrayList n'est pas une array. La syntaxe à get the element at index i est différente: list.get(i) vs arr[i]. Lisez sur ArrayList , en particulier la méthode get(int).

  2. Recherchez ce que (_String.equals(Object) _ renvoie et ce que cela signifie. Regarder Object.equals(Object) ne ferait pas de mal non plus, car chaque objet en Java obtient celui-ci par défaut.

  3. Envisagez d'utiliser une boucle foreach au lieu de l'ancienne boucle for. L'ancienne boucle for peut être d'une utilité folle, mais cela ne sert à rien. Regardez combien cela est plus propre:

    for (String stock : Stocks) {
        for (String filename : NameofFileinDir) {
            if (stock.equals(filename)) {
                System.out.println(" Stock: " + stocks);
            } else {
                System.out.println("Stock not in files: " + stocks);
            }
        }
    }  
    
  4. ArrayList Stocks = new ArrayList();. Cool. Donc, vous avez une ArrayList. De quoi?! Cela n’est pas techniquement illégal, mais si votre compilateur Java prend en charge les paramètres de type, vous devez vraiment les utiliser. Écrivez à la place List<String> stocks = new ArrayList<String>(). Maintenant, tout le monde qui lit votre code sait immédiatement ce que la liste contient. De plus, le compilateur garantira que votre liste contiendra seulement des chaînes. Si vous essayez de faire quelque chose de fou ou de stupide, comme insérer des entiers et des cartes dans la liste avec vos chaînes, le compilateur vomira.

  5. Si ce que vous écrivez dans le if..else est ce que vous voulez dire, votre logique est fatalement imparfaite. Vous imprimez «stock ne figurant pas dans la liste des fichiers» si la chaîne de stock actuelle et la chaîne de fichier que vous comparez ne sont pas égales. Mais logiquement, cela signifie-t-il qu'aucune des chaînes de stock et des chaînes de fichier ne sont égales?

12
djeikyb

Vous ne pouvez pas utiliser la notation de tableau sur une ArrayList. Vous devez appeler get(index) à la place.

4
Tom G

changez Stocks [i] en Stocks.get (i) et NameofFileinDir [j] en NameofFileinDir.get (j)

Suggestions supplémentaires:

Faites également NameofFileinDir to A hashSet pour de meilleures performances

Suivez également les conventions de dénomination Java camelCase telles que change NameofFileinDir en nameofFileinDir.

0
Mangoose

Vous ne pouvez pas obtenir ArrayList objects en utilisant l'opérateur [] tel que arrays.Utilisez la méthode get() sur ArrayList pour obtenir les objets . Modifiez donc le code 

 if (Stocks[i].equals(NameofFileinDir[j])) > 0) {  

à 

  if (Stocks[i].equals(NameofFileinDir.get([j]))) > 0) {
0
Prabhaker

Votre erreur est ici:

if (Stocks[i].equals(NameofFileinDir[j])) > 0) {

Tout d’abord, vous devriez dire Stocks.get(i).equals(NameofFileinDir.get(j) La fonction equals renvoie un booléen, vous comparez donc true/false > 0. Vous pouvez simplement laisser tomber le > 0)

0
Klicky

Si vous utilisez ArrayList, vous devez utiliser la méthode get (index) pour accéder à la variable de cet index. De plus, le .equals (objet) retourne une valeur booléenne donc pas besoin de> 0

if (Stocks.get(i).equals(NameOfFileINDir.get(j)) {
}
0
Danny

Si vous ne voulez pas utiliser pour chaque boucle, vous pouvez suivre ceci.

for(int i = 0; i < Stocks.size(); i++) {
    for (int j = 0; j < NameofFileinDir.size(); j++) {
        if (Stocks[i].equals(NameofFileinDir[j])) > 0) {
            System.out.println("Stock:" + Stocks[i]);}
        else{
            System.out.println("Stock not in files:" + Stocks[i]);
        }
    }
}

Dans le code ci-dessus, au lieu d'avoir Stocks [i], voici ceci:

for(int i = 0; i < Stocks.size(); i++) {
    for (int j = 0; j < NameofFileinDir.size(); j++) {
        if (Stocks.get(i).equals(NameofFileinDir.get(j))) > 0) {
              System.out.println("Stock:" + Stocks[i]);}
        else{
              System.out.println("Stock not in files:" + Stocks.get(i));
        }
    }
}
0