【问题标题】:How to check index of integer array element in java? [duplicate]如何在java中检查整数数组元素的索引? [复制]
【发布时间】:2016-11-12 17:14:36
【问题描述】:

在下面的代码中,我可以得到数组的长度和元素。如果我必须在运行时检查每个元素的索引号,我该如何检查? 如果我每次使用数组元素从循环中打印i 的值,它将给出相同的值,那么将i 的值视为数组的索引值是否正确? 在 Eclipse 中调试过程中的另一个混淆它显示数组的 id 值与循环值不同。

public class FirstArray {

    public static void main(String[] args) {
        int[] arr = {11,12,13,14,15,16,17,18,19,20};
        int onelength = arr.length;
        System.out.println("Size of Array is: " + onelength);
        for(int i = 0; i < arr.length; i++){
           System.out.println("element of aray is: "+ arr[i]);
        }       
     }
}

【问题讨论】:

  • id值是什么意思?
  • i 的值不会是数组中元素的索引值。它将是i+1
  • @VatsalSura Java 有基于 0 的索引。所以这取决于你如何考虑索引。
  • @AkashdeepSaluja 是的,你是对的,我考虑过基于 1 的索引。
  • 我们将在调试过程中为每个元素在变量窗口中显示的值称为什么,它显示的 id 值与每个元素的循环绑定索引值不同?我只是想从循环绑定中定义的索引值和在调试过程中为每个元素生成的 id 值中清除我的困惑。

标签: java arrays


【解决方案1】:

是的,i 的值将是索引值。我建议您阅读 Java 数组的基础知识。

【讨论】:

    【解决方案2】:

    问题本身并不清楚。循环边界肯定与数组的索引值不同。如果要打印循环边界以及索引处的值,只需在循环中打印 i 即可。

    【讨论】:

    • 循环边界将打印 i 的值,如果将 i 的值从 0 初始化为其他值,它将开始打印从该特定索引到数组长度的值,现在混淆 JVM 考虑什么值在数组调试过程中,每个元素的 id 值显示与循环值不同(在调试窗口和变量窗口中)。
    【解决方案3】:

    对于您的问题“每个元素在运行时的索引号是多少,我该如何检查?”参考下面的解决方案: Where is Java's Array indexOf?

    对于您的问题“如果我每次都使用数组元素从循环中打印 i 的值,它将给出相同的值,将 i 的值视为数组的索引值是否正确?”

    数组索引从 0 开始,因此如果您的数组长度为 10,则索引值将是 0 到 9。因此,如果您从 i=0 开始循环,则索引值将与 i 相同,但如果您从 i=1 开始循环,则索引值为 i-1。

    【讨论】:

      【解决方案4】:

      将 i 的值视为 数组?

      当然是对的,i实际上是arrayindex

      在 Eclipse 中调试期间的另一个混淆它显示 id 值 数组与循环值不同

      是的,它显示,因为它真的不同,看看:

      for(int i = 0; i < arr.length; i++) {
          System.out.println("element of aray is "+ arr[i]); // It prints the element itself -> 11 12 13 14 15.. and so on
          System.out.println("iteration number "+ i); // It prints the index of iteration -> 0 1 2 3 4 5.. and so on
      }     
      

      【讨论】:

      • 这里打印第二行的循环中定义的值,我很困惑,在调试过程中是否有任何由 JVM 管理的索引显示元素的 id 值与循环索引不同?
      • 嗯,它是正确的,第一行打印元素(11、12、13.. 等等),因为您正在访问 i 位置的数组......而第二个print 行仅打印当前的迭代索引(0、1、2、3.. 等等)。
      • 我不确定在调试过程中为每个元素的数组生成的 id 值。 JVM 是如何管理每个元素的?
      【解决方案5】:

      您可能想澄清您到底在搜索什么。

      array 在给定索引处存储一个值(从索引 0 开始,一直到索引长度为数组减一)。

      传统的创建数组的方式如下:

      // Create an empty array that is able to hold 3 values
      int[] numbers = new int[3];
      numbers[0] = 11;
      numbers[1] = 15;
      numbers[2] = 13;
      

      如果我们现在按索引顺序打印值,我们会收到 11, 1513。代码如下:

      for (int i = 0; i < numbers.length; i++) {
          System.out.println(numbers[i]);
      }
      

      因此,我们看到numbers[i] = 14 可以将值14 分配给数组的索引i。使用System.out.println(numbers[i]),我们可以打印数组在索引i 处存储的值。
      数组有一个固定的长度,需要在创建时指定,它不是一个灵活的数据结构(但非常快和小)。因此,如果您尝试访问numbers[100],但我们说numbers 只能保存3 值,那么您将获得ArrayIndexOutOfBoundsException

      您提供的代码是传统方式的简写:

      int[] arr = {11,12,13};
      

      作用相同
      int[] arr = new int[3];
      arr[0] = 11;
      arr[1] = 12;
      arr[2] = 13;
      

      如果要搜索索引,给定值(假设值是唯一的),您需要搜索整个数组,直到找到索引。这是一些代码:

      public int getIndex(final int[] array, final int value) {
          for (int i = 0; i < array.length; i++) {
              if (array[i] == value) {
                  // Value found
                  return i;
              }
          }
          // Value not found
          return -1;
      }
      

      请注意,搜索代码非常慢,因为您可能需要搜索整个数组长度(最坏情况)。根据您的使用情况,其他数据结构可能更有用。

      【讨论】:

        猜你喜欢
        • 2019-11-16
        • 2015-10-16
        • 2012-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 2019-01-12
        • 2010-12-04
        相关资源
        最近更新 更多