gpt4 book ai didi

java - 如何使用比较器计算ArrayList中的最小字符串?

转载 作者:行者123 更新时间:2023-12-02 06:07:51 24 4
gpt4 key购买 nike

我需要在 MinTester 类中编写一个静态方法来计算“最小”字符串使用比较器对象从 ArrayList 集合中获取:

public static String min(ArrayList<String> list, Comparator<String> comp)

我无法使用 Collections 类来计算最小值。

这是我到目前为止所拥有的。

public class MinTester
{

static String least;//This is static because it is being used in a static static context


public static String min(ArrayList<String> list, Comparator<String> comp)
{
int min = 0;


for( int i = 0; i < list.size(); i++ )
{
min = list.get(i).compareTo(list.get(i++));
if(min < 0)
{
least = list.get(i);
}
else if(min == 0)
{
least = list.get(i);
}
else
{
least = list.get(i++);
}
}
return least;
}
}

我使用最小值是因为我读到,无论第一个字符串小于、等于还是大于第二个字符串,compareTo 方法都会返回负数、0 或正数。

我没有从该方法中收到任何错误,因此我尝试使用此方法在 Main 中测试它。我收到此警告:“访问静态方法分钟”

   public static void main(String[] args)
{
// TODO code application logic here

MinTester s = new MinTester();
Comparator<String> comp = null;
ArrayList<String> list = new ArrayList<>();

list.add("a");
list.add("ab");
list.add("abc");
list.add("abcd");

String a = s.min(list,comp);//Warning: Accessing static method min

System.out.println(a);
}

我的输出来自 a = "abcd"。谁能帮我弄清楚为什么我将“abcd”作为列表中的“Min”字符串?我认为我的错误来 self 的 min() 方法,但我不确定它的内部位置或原因。

最佳答案

如果您需要在ArrayList中找到最短的String而不对其进行排序,您可以简单地遍历列表并检查.length每个 String 的属性,始终跟踪最短的一个。

String shortest = list.get(0);

for(String str : list) {
if (str.length() < shortest.length()) {
shortest = str;
}
}
System.out.println("The shortest string: " + shortest);

编辑:

如果您想实现两个字符串的自定义比较,您可以使用Comparator。比较它们的长度可以在 1 行内完成,因此 Comparator 确实没有必要。如果您绝对需要使用Comparator,则需要替换

if (str.length() < shortest.length())

if (comp.compare(str, shortest) < 0))

基本上是一样的,只是你不自己定义比较,而是让 Comparator 来决定,两者中的哪个 String 是较小。这样,如果您想要将来比较字符串的方式,则不必重写该方法,只需提供不同的 Comparator

关于java - 如何使用比较器计算ArrayList中的最小字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22130261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com