【问题标题】:Java ArrayList sublist giving wrong resultJava ArrayList 子列表给出错误的结果
【发布时间】:2020-05-29 00:31:33
【问题描述】:

this 问题中所述,我正在尝试在 Java 中的 ArrayList 中的特定位置之后查找元素的索引。下面是我的实现:

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

所以,逻辑是我试图找到“ox”的反向索引,它应该返回 3,但代码总是返回 -1。我无法发现任何错误。如果你们发现任何错误,请告诉我。

谢谢!

【问题讨论】:

  • 就这么简单:暂时删除计数代码,然后用硬编码的知识测试它,即您只会输入ox。然后在打开调试的情况下单步执行:每一行会发生什么?
  • 抱歉,我使用的是简单的文本编辑器。我无法进行调试。我在 indexOf 中对“xo”进行硬编码
  • 然后第一步是开始使用合适的代码编辑器。无论是 Eclipse 还是 VS Code,真正的代码编辑器都可以帮助您解决问题,而不需要请人帮助您,所以:现在是开始使用的最佳时机。

标签: java


【解决方案1】:

StringBuilders 是正在构建的工作中的字符串,因此它们不会覆盖equals()。字符串生成器只会比较等于自身。它永远不等于任何其他构建器,即使是具有相同内容的构建器。

这意味着indexOf() 将无法工作,因为它依赖于equals()。如果你想让它工作,你需要使用普通的Strings 而不是StringBuilders。例如:

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

或者,如果您想坚持使用 StringBuilders 即可,您只需要放弃 indexOf() 方法并使用手动 for 循环自己查找匹配的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 2011-11-15
    相关资源
    最近更新 更多