it-swarm.com.ru

Тип выражения должен быть типом массива, но он разрешается в ArrayList (при попытке сравнить строку в двух массивах

Я пытаюсь сравнить каждую строку или int в массиве с другим массивом, а затем распечатать результаты в соответствии с тем, существует ли строка в другом массиве: Ниже приведен весь код: Я получаю ошибку в циклах for, когда пытаясь сравнить два значения с помощью .equals (не уверен, что это правильный метод , ... Я новичок в этом) Пожалуйста, помогите!

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. ArrayList не является array. Синтаксис get the element at index i отличается: list.get(i) vs arr[i]. Читайте о ArrayList , особенно о методе get(int).

  2. Исследуйте, что String.equals(Object) возвращает и что это значит. Взглянув на Object.equals(Object) также не повредит, так как каждый объект в Java получает этот по умолчанию.

  3. Попробуйте использовать цикл foreach вместо старого цикла for. Старый цикл for может быть безумно полезным, но здесь нет никакого смысла. Посмотрите, насколько это чище:

    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();. Здорово. Итак, у вас есть ArrayList. Которого?! Теперь это технически незаконно, но если ваш компилятор Java поддерживает параметры типа, вам действительно нужно их использовать. Напишите вместо этого List<String> stocks = new ArrayList<String>(). Теперь каждый, кто читает ваш код, сразу же знает, что держит список. Кроме того, компилятор гарантирует, что ваш список будет only содержать строки. Если вы попытаетесь сделать что-то безумное или глупое, например, добавив несколько строк и карт в список со своими строками, компилятор будет рвать.

  5. Если то, что вы печатаете в if..else, это то, что вы имеете в виду, ваша логика ошибочна Вы печатаете «склад не в списке файлов», если текущая строка запаса и строка файла, которую вы сравниваете, не совпадают. Но логично, означает ли это, что ни одна из стандартных и файловых строк не совпадает?

12
djeikyb

Вы не можете использовать нотацию массива в ArrayList. Вам нужно позвонить get(index) вместо.

4
Tom G

измените Stocks [i] на Stocks.get (i) и NameofFileinDir [j] на NameofFileinDir.get (j)

Дополнительные предложения:

Также сделайте NameofFileinDir в hashSet для лучшей производительности

Также следуйте соглашению об именах Java CamelCase, например, измените NameofFileinDir на nameofFileinDir

0
Mangoose

Вы не можете получить ArrayList объекты с помощью оператора [], такого как arrays.Use get() метод на ArrayList, чтобы получить объекты . Поэтому измените код 

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

в 

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

Ваша ошибка здесь:

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

Во-первых, вы должны сказать Stocks.get(i).equals(NameofFileinDir.get(j) Функция equals возвращает логическое значение, поэтому вы сравниваете более влажный true/false > 0. Вы можете просто удалить > 0)

0
Klicky

Если вы используете ArrayList, то вам нужно использовать метод get (index) для доступа к переменной с этим индексом. Также .equals (объект) возвращает логическое значение, поэтому нет необходимости> 0

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

Если вы не хотите использовать для каждого цикла, то вы можете следовать этому.

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

В приведенном выше коде вместо того, чтобы иметь Stocks [i], имейте это

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
FAIZAN AHMED KHAN