Поиск ArrayList по ключевым словам и местоположению возврата - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь написать метод, который ищет ArrayList определенного слова и затем печатает местоположение всех вхождений слова.

Вот что у меня есть, работает нормально, пока я не введу слово, которое хочу найти, но потом ничего не печатает:

import java.util.ArrayList; 
import java.util.Scanner;

public class W7E2 {
    public static void main(String[]args) {
        System.out.println("Please anter words: ");
        Scanner sc = new Scanner(System.in);
        String []w = sc.nextLine().split(" ");

        ArrayList<Words> word = new ArrayList<Words>();
        for(int i=0; i<w.length; i++) {
            word.add(new Words(w[i]));
        }
        System.out.println(word);

        System.out.println("Please enter the word you want to search: ");
        String search = sc.nextLine();


        for(Words ws: word) {
            if(ws.equals(search)) {
                System.out.println(ws.getLocation());
            }
        }

    }

    static class Words{
        private String wor;
        private static int number = -1;

        public Words(String wor) {
            this.wor = wor;
            number++;
        }
        public int getLocation() {
            return number;
        }

        public String toString() {
            return wor;
        }
    }
}

Ответы [ 4 ]

0 голосов
/ 19 сентября 2018

Вам нужно вместо ws.equals(search) добавить ws.toString().equals(search) при возврате слова из метода toString()
в классе Words.Таким образом, код должен выглядеть примерно так:

  for(Words ws: word) {
            if(ws.toString().equals(search)) {
                System.out.println(ws.getLocation());
            }
        }
0 голосов
/ 19 сентября 2018

Помимо ответа GBlodgett, number в классе Word является статическим, поэтому каждый экземпляр Word будет иметь одинаковое число, вам нужно использовать нестатическую переменную для хранения местоположения

static class Words{
    private String wor;
    private static int number = -1;
    private int location;

    public Words(String wor) {
        this.wor = wor;
        number++;
        location = number;
    }
    public int getLocation() {
        return location;
    }

    public String toString() {
     return wor;
   }
}
0 голосов
/ 19 сентября 2018

Ваш код должен выглядеть следующим образом:

for(Words ws: word) {
    if(ws.toString().equals(search)) { //to change
        System.out.println(ws.getLocation());
    }
}

ws является объектом класса Words, вы должны изменить его на toString ()

0 голосов
/ 19 сентября 2018

В вашем выражении if, чтобы увидеть, содержит ли ArrayList слово, которое у вас есть:

if(ws.equals(search)) {
    System.out.println(ws.getLocation());
}

Но ws - это объект Word, и если вы не переопределите метод equals(), он никогда не будет равен объекту String.Вам нужно сделать что-то вроде:

if(ws.getwor().equals(search)) {
        System.out.println(ws.getLocation());
}

Это предполагает, что вы создаете метод get для wor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...