【问题标题】:Java return index if value found in array如果在数组中找到值,Java返回索引
【发布时间】:2012-08-22 07:57:01
【问题描述】:

我正在尝试在数组中查找一个值,并且我确定该值将只存在一次,因此我正在尝试查找该值并返回存储它的数组的索引,如果未找到则返回-1 这就是我想要做的:

static Integer[] accs = new Integer[20];
 public static int search()
    {
        Integer[] numbers;
        numbers = accs;
        Integer key;
        Scanner sc = new Scanner(System.in);
         System.out.println("Enter the Account Number:");        
         key = sc.nextInt();

        for (Integer index = 0; index < numbers.length; index++)
      {
           if ( numbers[index] == key )
                 return index;  //We found it!!!
      }
     // If we get to the end of the loop, a value has not yet
     // been returned.  We did not find the key in this array.
     return -1;

    }

即使我知道该值存在于数组中,当我运行它时,也没有显示任何内容。我进行了调试,然后我发现 Key 变量没有我输入的值。有什么问题吗?

【问题讨论】:

  • 您有什么理由使用 Integer 而不是 int 吗?你在key 看到了什么,你期待什么?
  • 您正在使用 == 进行对象比较(它进行引用比较)。您应该使用 equals 或简单的 int。只有当您的数字在整数缓存范围内时,此代码才会意外工作
  • 使用等于而不是 == 来比较整数。或者使用 int 代替。
  • 您正在通过引用比较 Integer 对象。你需要使用等于
  • 这段代码正在运行,这里有什么问题????

标签: java arrays search


【解决方案1】:

您的数组存储整数,它是一个 java 对象,要测试 Java 对象的相等性,您需要调用 Object.equals 方法而不是 ==

在您的情况下,我建议您使用int 的数组而不是Integer,它的内存更轻,支持==,并且您没有使用Integer 的任何功能,所以您不要这里需要它们。

【讨论】:

    【解决方案2】:

    您在检查 operator== 时检查的是 identity(这两个引用是否指向完全相同的对象?)而不是 equality(它们是否彼此相等?)。

    您应该使用ints(而不是Integers)或更改条件以使用equals() 方法。

    【讨论】:

      【解决方案3】:

      Integer 是一个对象,所以你必须使用 equals 方法。试试 numbers[index].equals(key)。

      【讨论】:

        【解决方案4】:
        java.util.Arrays.asList(accs).indexOf(key)  
        

        org.apache.commons.lang.ArrayUtils.indexOf(accs, key);
        

        【讨论】:

          【解决方案5】:

          确保您了解对象相等和对象标识之间的区别。您正在使用“==”来检查您的值是否在数组中 - 这将检查身份,而不是平等。请改用numbers[index].equals(key)

          【讨论】:

            【解决方案6】:

            您需要在搜索之前为每个元素设置值。 下面的语句仅声明具有 20 个元素且 value = null 的新数组 静态整数 [] accs = 新整数 [20]; 替换为: 静态整数 [] accs = 新整数 []{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 并重新测试。

            问候,

            【讨论】:

              【解决方案7】:

              像这样初始化数组static Integer[] accs = {3,5,15,6,4,32,9};并在main中调用search()方法。您的功能正常工作。

              【讨论】:

                【解决方案8】:

                使用以下命令捕获用户输入 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-02-10
                  • 2018-02-09
                  • 2020-06-30
                  • 2017-01-24
                  • 2016-06-25
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多