Java Подсписок ArrayList дает неверный результат - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь найти индекс элемента после определенной позиции в ArrayList в Java, как указано в этом вопросе. Ниже представлена ​​моя реализация:

import java.io.*;
import java.util.*;
class palindrome{
    public static void main(String[] args)throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int[] array = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        int n=array[0];
        List<StringBuilder> ls=new ArrayList<StringBuilder>();
        while(n-->0){
            ls.add(new StringBuilder(br.readLine()));
        }
        StringBuilder rev=ls.get(1).reverse();
        System.out.println(rev);
        int i=1;
        System.out.println(ls.subList(i+1,ls.size()).indexOf(rev));
    }
}

Я даю ниже ввод в программу

4 2
oo
ox
xx
xo

, поэтому logi c заключается в том, что я пытаюсь найти индекс обратного of 'ox', который должен вернуть 3, но код всегда возвращает -1. Я не могу обнаружить никаких ошибок. Пожалуйста, скажите мне, если вы заметили какую-либо ошибку.

Спасибо!

1 Ответ

5 голосов
/ 28 мая 2020

StringBuilder s - это строки в незавершенной работе, которые создаются, и поэтому они не отменяют equals(). Построитель строк будет сравнивать только себя. Он никогда не может сравниться с другими сборщиками, даже с такими же конструкторами.

Это означает, что indexOf() не будет работать, потому что он полагается на equals(). Если вы хотите, чтобы это работало, вам нужно использовать простые String s, а не StringBuilder s. Например:

List<String> ls = new ArrayList<>();
while (n-- > 0) {
    ls.add(br.readLine());
}
String rev = new StringBuilder(ls.get(1)).reverse().toString();

Или, если вы хотите придерживаться StringBuilder s, вы можете просто использовать go метод indexOf() и искать соответствующую строку самостоятельно с помощью инструкция for l oop.

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