【问题标题】:How do I return a value when ArrayList.isEmpty()?ArrayList.isEmpty() 时如何返回值?
【发布时间】:2023-03-28 07:51:02
【问题描述】:

除了“isEmpty”返回语句之外,它都正确打印。我如何让它正确返回“-1”,以便主函数中的最后 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);
 }
}

【问题讨论】:

  • 返回null。您不能返回 -1 来代替特定类型的对象,就像您的情况一样。
  • int shortt = A.indexOf(A.get(i)); position = shortt; 是一种非常复杂的写法position=i;
  • @skypjack 而不是返回null,您应该返回空的ArrayList&lt;String&gt;,因为这将为您的类的客户端保存一个空检查。 Joshua Bloch 在 Effective Java 的第 43 条中讨论了这一点。
  • @Jubobs 我同意你的观点,但是如果你看一下代码,你会注意到remove_minimum_length 的返回值从未使用过,因此该函数甚至可以在其原型中包含voidif 可以删除。无论如何,问题不在于那个功能,我误解了这个问题。我的错。 :-)

标签: java arraylist return return-value is-empty


【解决方案1】:

移动这个:

if(A.isEmpty())
        {

            return -1;
        }

超出你的 for-block。仅当有要迭代的元素时才会执行 for 块,也就是说,如果列表不为空。

【讨论】:

  • 我猜他的问题是函数remove_minimum_length
  • 因为他还没有开始那个,我对此表示怀疑。他想在列表为空时返回 -1,但根据他当前的实现,情况永远不会如此。
  • 你说得对,我将放弃我的回复。误解了这个问题。谢谢。
  • 他的代码除了你给出的答案还有其他问题。
  • 是的,有。我只是回答了他具体询问的那个。
【解决方案2】:

我会对您的方法进行一些更改。首先,您应该检查null 输入,如果找到则返回-1。如果输入为空ArrayList,您也可以返回-1

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;
}

【讨论】:

    【解决方案3】:

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

    要解决您的问题,您必须将 if-clause 从 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;
            }
        }
    

    【讨论】:

      【解决方案4】:

      将您的 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;
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-12
        相关资源
        最近更新 更多