当 ArrayList.isEmpty() 时如何 return 一个值?

How do I return a value when ArrayList.isEmpty()?

除了 "isEmpty" return 语句外,其他都正确打印。我如何才能正确地 return "-1" 以便 main 函数中的最后 2 个语句完成它们的工作。
注意:我无法编辑主要功能

我的代码如下:

import java.util.*;

public class task7{

public static int find_minimum_length(ArrayList<String> A)
{
    int position = 0;
    int smallest = A.get(0).length();
    for(int i = 0; i<A.size(); i++)
    {
        if(A.isEmpty())
        {

            return -1;
        }
        if(A.get(i).length()<smallest)
        {
            smallest = A.get(i).length();
            int shortt = A.indexOf(A.get(i));
            position = shortt;
        }

    }

    return position;
}



 public static ArrayList<String> remove_minimum_length(ArrayList<String> A)
{

        if(A.isEmpty())
        {

        }
        else 
        {
        A.remove(find_minimum_length(A));
        }

return A;
}     
public static void main(String[] args)
  {
ArrayList<String> a = new ArrayList<String>();

a.add("whale");
a.add("cat");
a.add("elephant");
a.add("donkey");
a.add("goat");

System.out.println(a);
int position = find_minimum_length(a);
System.out.printf("minimum position = %d\n\n", position);

remove_minimum_length(a);
System.out.println(a);
position = find_minimum_length(a);
System.out.printf("minimum position = %d\n\n", position);

remove_minimum_length(a);
System.out.println(a);
position = find_minimum_length(a);
System.out.printf("minimum position = %d\n\n", position);

remove_minimum_length(a);
System.out.println(a);
position = find_minimum_length(a);
System.out.printf("minimum position = %d\n\n", position);

remove_minimum_length(a);
System.out.println(a);
position = find_minimum_length(a);
System.out.printf("minimum position = %d\n\n", position);

remove_minimum_length(a);
System.out.println(a);
position = find_minimum_length(a);
System.out.printf("minimum position = %d\n\n", position);
 }
}

移动这个:

if(A.isEmpty())
        {

            return -1;
        }

超出您的 for 块范围。只有在有元素要迭代时才会执行 for 块,也就是说,如果列表不为空。

你的问题是 for 块将在数组很大时执行。因此,如果您的数组为空,则大小为 0。因此 for 不会执行。

要解决您的问题,您必须将 if-子句移出 for

应用于您的代码应该如下所示:

    public static int find_minimum_length(ArrayList<String> A)
    {
        int position = 0;
        int smallest = A.get(0).length();
        if(!A.isEmpty())
        {
           for(int i = 0; i<A.size(); i++)
           {
            if(A.get(i).length()<smallest)
            {
                smallest = A.get(i).length();
                int shortt = A.indexOf(A.get(i));
                position = shortt;
            }
            return position;
        }
        else
        {
           return -1;
        }
    }

我会对你的方法做一些修改。首先,您应该检查 null 输入,如果找到它,则检查 return -1。您还可以 return -1 在输入为空的情况下 ArrayList.

public static int find_minimum_length(List<String> a) {
    if (a == null || a.size() == 0) {
        return -1;
    }
    int position = 0;
    int smallest = a.get(0).length();

    // start iterating your for loop at 1, not 0
    for (int i=1; i < a.size(); i++) {
        if (a.get(i).length() < smallest) {
            smallest = a.get(i).length();
            position = i;
        }
    }

    return position;
}

public static List<String> remove_minimum_length(List<String> a) {
    int index = find_minimum_length(a);

    if (index != -1) {
        a.remove(index);
    }

    return a;
}

将您的 isEmpty() 调用放在 for 循环之外。

if(A.isEmpty()) return -1;

for(int i = 0; i<A.size(); i++)
{
    if(A.get(i).length()<smallest)
    {
        smallest = A.get(i).length();
        int shortt = A.indexOf(A.get(i));
        position = shortt;
    }

}