【问题标题】:How to find the last element in an under capacity array?如何找到容量不足数组中的最后一个元素?
【发布时间】:2015-03-28 18:45:13
【问题描述】:

假设我的数组是这样定义的:

int [] p = new int[10];
p[0] = 1;
p[1] = 4;
p[2] = 7;

我知道我可以使用 ArrayList 而不必担心调整大小,但我只想知道如何找到该数组中最后一个元素 (7) 的索引。这是我尝试过的,但失败了,因为显然我无法将 int 与 null 进行比较。否则你会怎么做呢?

int tail=0;
for(int i= 0; i < p.length; i++){
    if(a[i]==null){
       tail= i-1;
       break;
    }

}

【问题讨论】:

  • int 数组元素被初始化为零。如果所有 您的 值都是正数,您可以检查 0,否则您根本无法区分默认值和指定值。
  • 好吧,其他数组组件将被初始化为零而不是空;除非不输入零,否则您可以做的唯一检查是,当您遇到零时,您的索引将是前一个。
  • 当您创建一个特定类型的数组时,它的所有元素都使用该类型的默认值进行初始化,在这种情况下为零。最好使用arraylist :)
  • 还可以选择使用高效的Arrays.fill 操作来初始化任何哨兵值,例如Integer.MIN_VALUE
  • 即使您可以将 int[] 元素与 null 进行比较,您的代码也是错误的。

标签: java arrays null capacity


【解决方案1】:

查看this code:

import java.util.Arrays;
class IntArrayExample {
    public static void main(String[] args) {
      int[] p = new int[10];
      p[0] = 1;
      p[1] = 4;
      p[2] = 7;
      System.out.println(Arrays.toString(p));
      int tail=0;
      for(int i= 0; i < p.length; i++){
        if(p[i]==0){
         tail= i-1;
         System.out.println("tail : " + tail);
         break;
        }
       }
     }
    }

输出:

[1, 4, 7, 0, 0, 0, 0, 0, 0, 0]
tail : 2

你可以看到我在哪里print the arrayint array 被初始化为zeros。在这种情况下,尾巴是2。如果您还想在数组中包含elements with the value of zero,并且不想使用ArrayListinitialise all elements to another value (e.g. Integer.MAX_VALUE or Integer.MIN_VALUE),然后是do your checks accordingly

顺便说一句,这行代码是错误的:

 if(a[i]==null){

不仅因为incomparable types: int and &lt;null&gt;,还因为您的数组被称为p 而不是a。希望对您有所帮助!

【讨论】:

  • 我认为“内容方面”你的回答很棒;但是您的代码示例可以更好地格式化;并且违反 Java 命名风格指南不应该发生在“答案”代码片段中。
  • 我改进了格式,我是如何违反 Java 命名风格的,所以我也要修复它?
  • intArray 不是类的好名字;它应该是 IntArray (类名确实以大写字母开头)......甚至更好的 IntArrayExample 或类似的东西 - 类的名称应该始终反映其目的。
  • 好吧改了,我想可能是这样的:)
  • @adrCoder:感谢您的回答。是的,我的数组应该是 p 而不是 a。这是一个错字。干杯!
【解决方案2】:

当您初始化特定大小的int array 时,它将默认值设置为零,直到被设置新的非零值替换。

示例:

所提及的数组将具有如下默认值。

[1, 4, 7, 0, 0, 0, 0, 0, 0, 0]

现在,如果您想找到数组的最后一个非零值,以下解决方案可以帮助您实现它。

使用下面提到的代码来获取索引值。

    public static void main(String[] args) {
    int [] p = new int[10];
    p[0] = 1;
    p[1] = 4;
    p[2] = 7;

    System.out.println(getLastFilledIndex(p));

}

private static int getLastFilledIndex(int[] p) {
    for(int i=p.length-1;i>0;i--){
        if(p[i]!=0){
            return i;
        }
    }
    return 0;
}

输出: 2

如上所示,代码将从最后一个索引开始迭代,直到找到非零值并返回该索引。

【讨论】:

  • 答案不应该是解释问题吗?你真的认为新手可以从几行代码中学到很多东西吗?没有提供任何指导,为什么你会按照自己的方式做事?
  • 我同意并立即更新我的答案。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 2013-04-11
  • 1970-01-01
  • 2010-11-17
  • 2013-07-27
  • 1970-01-01
相关资源
最近更新 更多