it-swarm.com.de

Der Typ des Ausdrucks muss ein Array-Typ sein, er wurde jedoch in ArrayList aufgelöst (wobei der String in zwei Arrays verglichen werden soll)

Ich versuche, jeden String oder Int in einem Array mit einem anderen Array zu vergleichen, und drucke die Ergebnisse danach, ob der String im anderen Array vorhanden ist oder nicht: Versuch, zwei Werte mit .equals zu vergleichen (nicht sicher, ob es die richtige Methode ist ... Ich bin neu bei diesem Thema) Bitte helfen Sie!

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. Ein ArrayListist kein arrayname__. Die Syntax von get the element at index i ist unterschiedlich: list.get(i) vs arr[i]. Lesen Sie sich ArrayListNAME _ durch, insbesondere die Methode get(int).

  2. Erforschen Sie, was String.equals(Object) zurückgibt und was das bedeutet. Ein Blick auf Object.equals(Object) würde auch nicht schaden, da jedes Objekt in Java standardmäßig dieses Objekt erhält.

  3. Ziehen Sie in Betracht, eine foreach-Schleife anstelle der alten for-Schleife zu verwenden. Die alte for-Schleife kann verrückt nützlich sein, aber hier hat es keinen Sinn. Schauen Sie, wie viel sauberer das ist:

    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. Sie haben also einen ArrayListname__. Von was?! Das ist zwar technisch nicht illegal, aber wenn Ihr Java - Compiler Typparameter unterstützt, müssen Sie diese wirklich verwenden. Schreiben Sie stattdessen List<String> stocks = new ArrayList<String>(). Jetzt weiß jeder, der Ihren Code liest, sofort, was die Liste enthält. Außerdem garantiert der Compiler, dass Ihre Liste nur Zeichenfolgen enthält. Wenn Sie versuchen, etwas Wahnsinniges oder Dummes zu tun, z. B. einige Ganzzahlen und Maps mit Ihren Zeichenfolgen in die Liste zu werfen, wird der Compiler kotzen.

  5. Wenn das, was Sie in if..else drucken, das ist, was Sie meinen, ist Ihre Logik fatal fehlerhaft. Sie drucken "Lager nicht in Dateiliste", wenn die aktuelle Lager- und die zu vergleichende Dateizeichenfolge nicht übereinstimmen. Bedeutet dies logischerweise, dass keine der Stock-Strings und File-Strings gleich ist?

12
djeikyb

Sie können die Array-Notation nicht für eine ArrayList verwenden. Sie müssen stattdessen get(index) aufrufen.

4
Tom G

Ändern Sie Aktien [i] in Stocks.get (i) und NameofFileinDir [j] in NameofFileinDir.get (j).

Zusätzliche Vorschläge:

Machen Sie auch NameofFileinDir zu A hashSet, um die Leistung zu verbessern

Befolgen Sie auch die Benennungskonventionen für Java camelCase, z

0
Mangoose

Sie können die ArrayList objects nicht über den []-Operator wie arrays abrufen. Verwenden Sie die get()-Methode für ArrayList, um die Objekte abzurufen . Ändern Sie also den Code 

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

zu 

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

Ihr Fehler ist hier:

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

Zuerst sollten Sie Stocks.get(i).equals(NameofFileinDir.get(j).__ sagen. Die equals-Funktion gibt einen booleschen Wert zurück, also vergleichen Sie, ob true/false > 0 Sie können den > 0) einfach ablegen.

0
Klicky

Wenn Sie ArrayList verwenden, müssen Sie die Methode get (index) verwenden, um auf die Variable an diesem Index zuzugreifen. Auch das .equals (object) gibt einen booleschen Wert zurück, so dass keine> 0 erforderlich ist

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

Wenn Sie nicht für jede Schleife verwenden möchten, können Sie diesem folgen.

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]);
        }
    }
}

Anstelle von Stocks [i] haben Sie im obigen Code Folgendes:

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