如何找到一个小于另一个元素的元素?

时间:2011-03-17 01:30:17

标签: java eclipse string conditional

我正在尝试设置一个使用字符串而不是整数的二进制搜索程序。问题是我不知道如何制作一个小于字符串值的数字数组。

例如

字符串数组小于字符串值。

/**
   The StringBinarySearcher class provides a public static
   method for performing a binary search on an String array.
*/



public class StringBinarySearcher
{
   /**
      The search method performs a binary search on an String
      array. The array is searched for the number passed to
      value. If the number is found, its array subscript is
      returned. Otherwise, -1 is returned indicating the
      value was not found in the array.
      @param numbers The array to search.
      @param value The value to search for.
   */



   public static int search(String[] numbers, String value)
   {
      int first;       // First array element
      int last;        // Last array element
      int middle;      // Mid point of search
      int position;    // Position of search value
      boolean found;   // Flag

      // Set the inital values.
      first = 0;
      last = numbers.length - 1;
      position = -1;
      found = false;

      // Search for the value.
      while (!found && first <= last)
      {
         // Calculate mid point
         middle = (first + last) / 2;

         // If value is found at midpoint...
         if (numbers[middle] == value)
         {
            found = true;
            position = middle;
         }

         // else if value is in lower half...
         // needs array to be less then the string value?, without using equality regulators
         else if (numbers[middle].compareTo(numbers[middle +1]) > 0)
            last = middle - 1;
         // else if value is in upper half....
         else
            first = middle + 1;
      }

      // Return the position of the item, or -1
      // if it was not found.
      return position;
   }
}

3 个答案:

答案 0 :(得分:2)

您的问题是比较运算符(==)。比较运算符仅适用于Java中的原始数据类型。 String是一个类(不是原始数据类型)。因此,您需要使用String的equals(String)方法来比较它们。

如果要将它们作为数字进行比较,则需要将它们解析为整数。为此,您可以使用Integer.parseInt(String)然后比较整数。

答案 1 :(得分:1)

第一次比较:

if (numbers[middle] == value)

使用==运算符。记住你正在比较String对象。您应该使用equals方法或compareTo

您的下一个比较是:

// else if value is in lower half...
// needs array to be less then the string value?, without using equality regulators
else if (numbers[middle].compareTo(numbers[middle +1]) > 0)

根据您的评论,您正在检查value是否位于数组的下半部分,但您的代码是将数组元素与下一个数组元素进行比较。要匹配评论,应该是:

else if (value.compareTo(numbers[middle]) < 0)

另外,请注意,在比较表示数字的字符串时,您会得到一些奇怪的结果。 compareTo方法按字典顺序比较字符串。这意味着,例如,“5”将评估为大于“11”。

答案 2 :(得分:0)

这适用于原始数据类型。不适用于String对象。

==用于检查两个对象的引用是否相同。 “==”从不比较两个对象的内容。

String strName1 = "Me";
String strName2 = new String("Me");

strName1 == strName2是假的。因为它们指的是两个不同的对象。

您可以使用equals方法进行比较。

if (strName2 .equals(strName2 )) {
    System.out.println("Me and Me are same :P");
}